목록 보기
컬리의 입고 시스템이 외부 인입 데이터를 안전하게 동기화하는 방법
백엔드

컬리의 입고 시스템이 외부 인입 데이터를 안전하게 동기화하는 방법

마켓컬리
마켓컬리
2026년 1월 11일

두줄요약

외부 입고 데이터 동기화에서 DB와 Kafka 간 원자성 문제를 아웃박스 패턴으로 보완했습니다.\nSpring Kafka 재시도 토픽으로 선행 정보 지연에 따른 실패를 자동 복구하도록 구성했습니다.

문제 상황

  • 3PL 사업 확장으로 외부 채널의 다양한 입고 예정 정보 수신 및 동기화 필요
  • DB 커밋 실패 후 Kafka 메시지만 발행되는 원자성 붕괴 위험
  • 선행 파트너·상품 정보 지연으로 인한 컨슈머 처리 실패와 수동 재발행 부담

구조와 흐름

  • 인터페이스 데이터와 발행 메시지를 동일 트랜잭션에서 아웃박스 테이블에 저장
  • Namastack Outbox 폴러가 미처리 레코드를 Kafka로 발행하고 성공 상태·재시도 횟수 관리
  • Spring Kafka @RetryableTopic으로 실패 메시지를 10분 간격, 최대 24시간 재처리 후 DLT 이관

선택 이유

  • 아웃박스 테이블 관리, 폴링, 백오프, 인스턴스 상태 관리의 라이브러리 위임
  • 발행부 저장소에 수신부가 직접 의존하지 않는 책임 분리
  • 단일 재시도 토픽 전략으로 다수 재시도 토픽 생성과 운영 복잡도 축소

주의할 점

  • 발행 성공과 아웃박스 완료 마킹 사이 장애에 대비한 Kafka 컨슈머 멱등성 보장 필요
  • 재시도 발행용 String 직렬화 KafkaTemplate 분리로 이중 직렬화 방지
  • 메인·재시도·DLT 토픽별 실패 및 성공 알림 정책 구분

다음 읽기

#Spring Boot 주제를 이어서 읽기

컬리의 입고 시스템이 외부 인입 데이터를 안전하게 동기화하는 방법

외부 채널 입고 정보를 안전하게 동기화하기 위해 아웃박스 패턴과 재시도 토픽을 적용한 사례를 소개했습니다. Spring Kafka와 Namastack Outbox로 원자성, 재시도, 실패 알림을 정리했습니다.

마켓컬리
마켓컬리
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...