Spring 트랜잭션 동기화로 레거시 알림톡 발송 시스템 한계 극복
개요
올리브영 배송 스쿼드에서 레거시 알림톡 발송 시스템을 모던 아키텍처로 전환하며 겪었던 고민과 해결 과정을 공유합니다. 주문/결제/배송 등 핵심 소통 채널인 알림톡 시스템의 복잡성과 변화하는 요구사항 대응의 한계를 극복하기 위해 Kafka 메시지를 활용한 MSA 환경으로 전환했습니다.
전환 배경 및 필요성
1. 알림톡 플랫폼 변경 및 로직 분산
- 알림톡 발송 플랫폼 변경에 따른 기존 구조 수정 필요.
- 알림톡 발송 로직이 여러 비즈니스 코드에 흩어져 있어 유지보수 어려움.
2. 데이터 조회 기준 불일치
- 서비스 및 알림 유형별로 상이한 테이블 및 조건으로 데이터 조회.
- 데이터 조회 기준의 일관성 부족 및 모호성 발생.
3. 모던 아키텍처 전환 및 기능 일원화
- 레거시 시스템의 점진적 모던 아키텍처 전환 필요성.
- 발송 기능을 하나의 구조로 일원화하여 향후 확장성 확보.
전환 방법론
1. 트랜잭션 동기화 구현
- @TransactionalEventListener 제약: 레거시 시스템의 Spring 버전 문제로 직접 사용 불가.
- TransactionSynchronizationManager 활용: 트랜잭션 커밋 이후 콜백 메서드 실행을 보장받아 비즈니스 로직과 알림톡 발송 로직 분리.
- 안정성 강화: 메시지 발송 실패 시 DB 저장 후 별도 재처리 메커니즘 고려.
- Outbox Pattern 고려: 높은 안정성이 요구되는 환경에서 이벤트 DB 선저장 및 별도 발행 프로세스 고려.
2. MSA 환경에서의 알림톡 처리 흐름
- Kafka 메시지 기반 연동: 레거시 시스템은 Kafka 메시지 발행, MSA의 Delivery Consumer가 메시지 소비 및 발송 처리 전담.
- 알림톡 유형별 처리: 배송 유형(오늘드림, 일반배송 등)별로 분리하여 처리.
- 공통 쿼리 및 템플릿: 배송 유형 내 조건(일반, 교환 등)을 묶어 데이터 조회 및 공통 발송 API 활용.
- 역할 분리: 레거시는 발송 시점 결정, 컨슈머는 내용/방식/안정성 전담.
전환 과정에서의 배움
- 아키텍처 설계 중요성: 코드 작성 전 시스템 전체 흐름 이해의 중요성 체감.
- 철저한 테스트: 다양한 케이스 테스트를 통한 안정성 확보.
- MSA 비즈니스 흐름 이해: 분산 환경에서의 데이터 흐름 및 일관성 유지의 중요성 습득.
개선된 점
- 유지보수성 향상: 코드 집중화, 데이터 조회 기준 공통화, 영향 범위 파악 용이.
- 확장성 및 유연성 증가: 이벤트 기반 처리, 기능 독립 분리, 최소한의 변경으로 대응 가능.
- 공통 재시도 로직 구축: 운영 관점의 안정성 확보.