[Lombok] @Builder를 클래스가 아닌 메서드에 적용하는 이유
·
Spring
@Builder의 작동 과정 및 수행 방식 Lombok의 @Builder는 빌더 패턴을 자동으로 생성하여 객체를 보다 유연하게 생성할 수 있도록 해준다.@Builder는 클래스에 붙일 수도 있고, 메서드에 붙일 수도 있으며, 각각의 수행 방식과 장단점이 다르다. 1. 클래스에 @Builder를 붙였을 때 수행 방식 및 연관 엔티티 초기화  작동 과정 1. Lombok이 정적 내부 클래스로 빌더 클래스를 생성한다. 2. 빌더 클래스는 해당 객체의 모든 필드를 포함한 Builder 메서드를 제공한다. 3. 객체를 생성할 때, build() 메서드를 호출하여 최종적으로 객체를 반환한다. 코드 예시@Builder@Getter@AllArgsConstructorpublic class Product { priv..
[DDD] Kakao ConferenceDDD와 적용 사례 공유 정리
·
카테고리 없음
if(kakao) 2022 컨퍼런스 내용을 듣고 정리한 내용이다. DDD에 대한 간단한 개념 정리를 먼저 읽고 아래 내용을 참고하길 바란다. DDD란Domain-Driven Design으로 도메인 주도 설계라고 부른다.특징1. 일반적으로 많이 사용하는 데이터 중심의 접근법을 탈피해서 순수한 도메인 모델과 로직에 집중하는 것을 말한다.2. 보편적인 언어의 사용이다. 도메인 전문가와 소프트웨어 개발자간의 커뮤니케이션 문제를 없애고 상호가 이해할 수 있고 모든 문서와 코드에 이르기까지 동일한 표현과 단어로 구성된 단일화된 언어체계를 구축해나가는 과정을 말한다. 이로서 분석 작업과 설계 그리고 구현에 이르기까지 통일된 방식으로 커뮤니케이션이 가능해진다.3. 소프트웨어 엔티티와 도메인 컨셉을 가능한 가장 가까이 ..
[Kafka] Consumer 올바르게 사용하기
·
Kafka
Spring-Kafka 에서 카프카 메세지를 수신하기 위해서는 MessageListenrContainer와 Message Listener or @KafkaListenr를 사용하라고 한다. Spring Kafka의 메세지 리스너 소비방식1. 리스너 기반(Listener - based) - @KafkaListener 사용2. Polling 기반(Manually Polling)방식 - KafkaConsumer.poll() 직접 호출우리는 @KafkaListener를 더 일반적으로 사용한다. @KafkaListener를 사용한 메세지 리스너topics = 구독할 Kafka 토픽 지정groupId = "my-group" 으로 컨슈머 그룹을 설정메세지가 수신되면 자동으로 listen() 메서드가 수행된다.@Kafk..
[JPA, Kafka] @Transactional과 Kafka 메세지 전송 시점
·
Spring/JPA
카프카와 트랜잭션의 수행 시점Kafka와 JPA를 함께 사용하면 수행되는 시점에서 차이가 있다. 우선 @Transactional을 적용한 경우 어떤 시점에 트랜잭션이 생성되고 수행되는지 확인해야 한다.그림을 통해 먼저 확인해보자. 유저의 요청이 들어오면 Controller 에서 요청을 받아 Service Layer에서 request에서 받은 요청 또는 조회해서 반환할 내용을 DB에서 가져오게된다. 데이터의 변화가 발생했다면 @Transactional은 영속성 컨텍스트에 있는 1차 캐시(한 번 이미 조회하여 데이터가 있다고 가정)와 Snapshot을 비교하게 되는데 이때 더티체킹을 하여 변화가 있다면 Update 구문을 발생하게 된다. 이 쿼리는 메서드가 끝나는 시점에 트랜잭션이 수행되고 DB에 커밋되게 ..
정리, 공부해야할 것들 리스트
·
카테고리 없음
Kafka 그룹 설정은 언제 필요한가? 사용 시 장/단점Kafka 그룹(Consumer Group)은 하나의 토픽을 여러 개의 컨슈머가 병렬로 처리할 때 필요하다. 특정한 메시지를 한 번만 처리해야 하거나, 부하 분산이 필요할 때 사용한다.✅ 사용해야 하는 경우• 부하 분산이 필요한 경우 (여러 개의 컨슈머가 병렬로 메시지를 소비)• 메시지를 중복 처리하면 안 되는 경우 (한 메시지는 하나의 컨슈머에게만 전달)• 메시지의 처리가 지연될 가능성이 있는 경우 (컨슈머 추가로 성능 확장 가능)⚖️ 장점• 수평 확장 가능: 컨슈머를 추가하면 부하 분산이 가능해 처리 속도를 높일 수 있다.• 중복 소비 방지: 같은 Consumer Group 내 컨슈머들이 메시지를 분할해서 처리하므로, 동일 메시지가 여러 번 처리..
[Spring/Serialization-Deserialization] Date, LocalDate, LocalDateTime 형변환 방법, 직렬화/역직렬화 문제 해결하기
·
Spring
평소에 Token을 만들때 IssuedAt에 Date 타입을 User의 LocalDateTime 타입으로 전환하려고 할때  또는 LocalDateTime을 사용해서 Date 타입의 필드에 넣으려고 할 때 항상 애를 먹었다.그래서 타입 변환에 필요한 메서드들을 다음번엔 이 글을 보고 바로 처리할 수 있게 차례대로 정리해 두려고 한다.또한 직렬화/역직렬화에서 생겼던 문제를 다뤄볼것이다. 1. Date → LocalDate, LocalDateTime 변환  1-1. Date → LocalDate 변환 Date 객체를 LocalDate로 변환하려면, 먼저 Instant로 변환한 후 ZoneId를 지정하여 ZonedDateTime으로 변환한 뒤 toLocalDate()를 호출한다. 코드 예제import java...