본문 바로가기

전체 글37

Spring Cloud with Aws Secrets Manager 애플리케이션 프로퍼티에 DB 계정 정보를 하드코딩된 상태로 사용하지 않기 위해 AWS Secrets manager 를 사용하게 되었다. KMS 에 저장된 암호화 키로 secrets manager 에 자격 증명을 해서 필요한 보안 정보를 복호화해서 반환해주는 서비스이다. aws java sdk를 사용하려다 Spring Cloud에서 스프링 프로퍼티 소스를 이용해서 AWS Secrets manager 매커니즘을 사용할 수 있기에 org.springframework.cloud:spring-cloud-starter-aws-secrets-manager-config 를 간단하게 라이브러리를 추가해서 활성화시켰다. 스프링 부트에서 제공하는 환경별로 프로퍼티를 구성하는 것처럼 동일하게 프로필을 명시해주면 모든 서비스 .. 2020. 2. 3.
어째서 엔티티가 계속 업데이트 되는가.. 트랜잭션이 끝날 때마다 엔티티가 계속 업데이트가 되는데 어째서죠. 조회만 했을 뿐인데요. 그 것은 Converter를 사용하는 필드에서 Section을 새로 매핑해주면서 항상 다른 객체로 인식되었기 때문.. @Getter @Setter @Entity @Table public class Entity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Convert(converter = SectionConverter.class) private List sections; } 아래에 Section을 보면 EqualsAndHashCode를 따로 선언해주지 않아 매 번 그 객체가 항상 다른 객체로 확인이 되기 때문에 JPA 에서 조.. 2019. 6. 28.
클라이언트 WebView iOS와 Android 네이티브 클라이언트에 결제 모듈을 연동을 하면서 소소한 부분 포스팅합니다. Webview로 PG사 연동을 진행하면서 클라이언트에 Javascript로 결제 연동 결과 값을 내려주기까지 변경했던 코드를 조금 공유합니다. 🙂 # CDATA 이 코드 이전에는 thymeleaf 템플릿을 쓰고 있었는데 (tmi) 지금은 freemarker를 쓰고 있습니다. (tmi2어쨌든 템플릿을 쓰고 있다는 얘기) 변수를 할당하기 위해서 CDATA 라는 녀석을 붙여줘야하는데 문자열이 아닌 것으로 인식하지 않기 위해 사용해야합니다. 제대로 된 json string을 내려주는 데 무엇이 문제인지 조금 걸렸습니다. 템플릿 메뉴얼에 보니 모두 CDATA를 쓰고 있는 건 한참 뒤에 안 사실! # MessageHa.. 2019. 6. 26.
fluentd와 함께하는 검색 데이터 수집 원글 : https://dailyhotel.io/fluentd%EC%99%80-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-%EA%B2%80%EC%83%89-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%88%98%EC%A7%91-b76932a8dc2a fluentd와 함께하는 검색 데이터 수집 안녕하세요. 주니어 개발자 Anny입니다. dailyhotel.io 검색 데이터를 Fluentd로 수집하여 이를 시각화하고 분석을 진행하고 있는 과정 및 중간 작업 결과를 포스팅합니다. 현재 데일리는 여러 채널을 통해 데이터가 수집하고 있습니다. 검색 관련 데이터는 GA를 통해서 분석하고 있습니다. 그를 위해선 매번 엄청난 쿼리를 생성해서 실행하는데 언뜻보기에도 복잡하고 반복되는 .. 2019. 6. 26.
Redisson 현재 운영하고 있는 서비스 특성 상, 여러 개의 트랜잭션이 연거푸 요청될 수 있어 주문/결제 처럼 트랜잭션이 동기화 처리가 필요할 때 사용하기 위해 분산 락을 사용하기로 합니다. 그 중에 Redisson을 사용합니다. Redisson은 인메모리 데이터 그리드 기능을 가진 Redis Java Client 입니다. 데이터 모델링과 어플리케이션 로직에 집중할 수 있게 도와줍니다. 여러 레디슨 노드를 활용해서 분산환경에서 핸들링 할 수 있습니다. Redisson을 도입하게 된 큰 이유는 Redis Cluster 설정과 지원이 간단하고 용이하다는 점이 있겠습니다. Lock을 얻기위한 WaitTime, LeaseTime lock을 얻기 위한 대기시간(=waitTime)과 락을 임대할 시간(=leaseTime)을 설.. 2019. 6. 26.
ModelMapper Entity 에서 DTO로 매핑해줄 때 사용할 라이브러리를 찾다가 ModelMapper를 사용하였습니다. source -> destination으로 matching strategy 나 다른 설정을 통해서 매칭시켜 암묵적으로 매핑시켜줍니다. 그 중에 기록하고자 했던 것은 Property Mapping 입니다. 대부분의 Object 매핑은 ModelMapper에서 해주게 되는데 조건이 존재하거나 컨버팅, DeepMapping을 원하는 경우에는 PropertyMapping을 사용해 클래스를 명시적으로 정의하고 source, destination 간의 매핑을 이뤄지게 합니다. public class Source { private long id; private String name; private String v.. 2019. 6. 25.