우리 프로젝트는 Spring Kafka를 사용하여 서비스 간 비동기 통신을 처리합니다.
복잡한 직렬화/역직렬화 설정은 공통 설정(application.yml)에 의해 자동으로 처리되므로, 개발자는 이벤트 정의, 발행(Send), 수신(Listen) 세 가지 단계만 신경 쓰면 됩니다.
application.yml에 정의된 주요 설정입니다.
| 구분 | 설정 항목 | 설정값 (Class/Value) | 설명 (Why?) |
|---|---|---|---|
| 공통 | bootstrap-servers |
localhost:29092 |
Kafka 브로커 주소입니다. (환경 변수로 주입 - 기본값 localhost:29092) |
| Producer | value-serializer |
JacksonJsonSerializer |
객체(DTO)를 보낼 때 자동으로 JSON 문자열로 변환하여 전송합니다. |
| Consumer | value-deserializer |
JacksonJsonDeserializer |
들어온 JSON 메시지를 자동으로 Java 객체(DTO)로 매핑합니다. |
| Consumer | group-id |
${spring.application.name}-group |
향후 서비스(모듈)가 쪼개져도 설정 파일 수정 없이 그룹 ID 충돌을 방지합니다. |
| Consumer | auto-offset-reset |
earliest |
서버가 새로 뜨거나 그룹이 바뀌었을 때, 과거에 쌓인 중요한(결제, 경매) 이벤트를 놓치지 않고 다 읽어옵니다. |
| Listener | ack-mode |
batch |
성능 향상을 위해 메시지를 하나씩 처리하지 않고 배치 단위로 처리 후 커밋합니다. |
Kafka의 auto-offset-reset 설정은 “컨슈머 그룹이 처음 생겼거나, 저장된 위치(Offset) 정보가 날아갔을 때 어디서부터 읽을 것인가?"를 결정하는 중요한 옵션입니다.
latest (기본값)"과거는 잊고, 지금부터 들어오는 것만 처리하자!"
earliest (우리 설정)"처음부터 빠짐없이 다 읽자!"
우리 프로젝트는 도메인 로직의 순수성과 데이터 일관성을 위해 Spring Event와 Kafka Bridge를 조합하여 사용합니다.