스프링캠프 2025 [Track 1] 4. 실전! MSA 트랜잭션 개발 가이드 (김용욱)
- MSA 환경에서 트랜잭션 관리는 서비스 간 데이터베이스 분리로 인해 복잡해지며, 분산 트랜잭션 프레임워크(2PC)는 권장되지 않음 🚫.
- 데이터 오너십을 명확히 하고, 데이터 변경은 해당 서비스를 통해서만 이루어지도록 해야 함 🔑.
- 실패한 트랜잭션 처리를 위해, 짧은 트랜잭션은 DB 롤백을, 긴 트랜잭션은 보상 트랜잭션 및 재시도 로직을 어플리케이션 레벨에서 구현해야 함 🔄.
- 피벗 트랜잭션 개념을 활용하여 업무적 성공 여부를 판단하고, 이후 작업은 이벤트 기반으로 처리하여 시스템 복잡성을 줄일 수 있음 🎯.
- 서비스 간 트랜잭션 격리 수준이 낮아짐에 따라 발생할 수 있는 데이터 불일치 문제를 시멘틱 락, TCC, 오프라인 락 등의 패턴으로 보완해야 함 🔒.
- 네트워크를 통한 데이터 쓰기 시, 트랜잭션 아웃박스 패턴을 사용하여 데이터와 이벤트의 정합성을 보장해야 함 📤.
- API 호출 실패 시, 실제 실패와 가짜 실패를 구분하고, 가짜 실패의 경우 재시도 또는 데이터 조회를 통해 복구해야 함 🔍.
- 셀렉트 4 업데이트를 대체하기 위해 어플리케이션 레벨에서 락 테이블을 관리하여 데이터의 동시 접근을 제어할 수 있음 🎛️.
- 데이터 저장과 이벤트 발송 순서에 따른 문제점을 해결하기 위해 트랜잭션 아웃박스 패턴을 적용해야 함 📦.
- 네트워크 통신 실패 시, 실제 실패와 가짜 실패를 구분하고, 가짜 실패의 경우 재시도 또는 데이터 조회를 통해 복구해야 함 🛠️.
- API 요청 전 요청 정보를 저장하여 유실을 방지하고, 요청 후 결과를 업데이트하여 데이터 정합성을 유지해야 함 💾.
- MSA 환경에서 트랜잭션 관리는 복잡하지만, 다양한 패턴과 전략을 통해 안정적인 시스템을 구축할 수 있음 💪.