트랜잭션관리(2)
-
호텔 데이터 마이그레이션 최적화 - 인덱스 & UPSERT
들어가며: 호텔 표준 데이터 최신화의 시작"36GB의 호텔 데이터 마이그레이션 해주세요."호텔 표준 데이터 최신화 프로젝트에서 마주한 첫 번째 과제였습니다. 호텔 데이터는 단순한 flat한 구조가 아닌, 6개의 테이블로 분산되어 저장되어야 했습니다:제가 생각한 이 마이그레이션의 핵심 요구사항은 "데이터 정합성"이었습니다. 하나의 호텔 데이터가 이 6개 테이블에 모두 성공적으로 저장되거나, 아니면 전혀 저장되지 않아야 했습니다("All or Nothing").또한 기존 데이터가 있을 수 있어 INSERT가 아닌 UPSERT를 사용해야 했죠.메모리 한계를 고려해 batch size를 100으로 설정했습니다. 36GB 전체를 한 번에 처리하는 것은 현실적으로 불가능했고, 실패 시 복구도 용이해야 했기 때문입니..
2025.02.16 -
알림톡과 예약 시스템의 트랜잭션 분리 - 아웃박스 패턴 도입기
문제 상황시작은 이랬습니다.“앤디(영어이름), 서버에 알림톡 에러 났다는 버그가 있던데요?”“앤디, 항공권이 예약이 제대로 안 됐다는데 확인좀 부탁드려요.”이런 문의가 들어왔을 때 가장 먼저 확인하는 것이 예약 상태입니다.일반적으로는 예약 실패시 즉시 사용자에게 피드백이 가야하는데, 해당 건은 예약도 실패했고 알림도 실패한 상황이었죠.로그를 확인해보니 ApiPlex(카카오 알림톡 대행사)와의 통신 오류로 인해 알림톡 발송에 실패했고, 이 실패가 예약 트랜잭션을 롤백시킨 것이었습니다.더 큰 문제는 사용자는 예약을 시도했다가 실패했다는 것조차 알 수 없었다는 점입니다.이는 출장 예약 시스템에서는 심각한 문제였습니다.항공권이나 호텔의 경우 실시간 재고(좌석, 객실)가 중요한데, 알림톡 장애로 인해 예약이 실패..
2025.01.29