[ 8주차 과제 ] 대용량 트래픽&데이터 처리
2025. 5. 19. 21:55ㆍ향해99 8기
1. 기존 문제점
- 모든 로직이 한 트랜잭션 안에서 실행
- 포인트 차감 ▶ 결제 저장 ▶ 주문 상태 변경 ▶ 주문 정보 전달
- 부가 작업(주문 정보 전달)이 느리거나 실패하면
→ 결제 전체가 통째로 실패
2. 개선 방안: 핵심 VS 부가 로직 분리
- 핵심 로직(한 트랜잭션)
- 유저 포인트 차감
- 결제 정보 저장
- 주문 상태 변경
- 부가 로직(트랜잭션 바깥, 비동기)
- 결제 완료 이벤트 발행 (AFTER_COMMIT)
- 이벤트 리스너에서 비동기로 주문 정보 전달
- 알림톡 발송 등
핵심 결제에는 영향 없이, 부가 기능만 따로 실행하도록 분리
3. 새로운 고민: 분산 트랜잭션
- 여러 서비스·트랜잭션을 동시에 실행하다가 하나라도 실패하면?
→ 전체를 원자적으로 롤백하는 건 거의 불가능 - 해결 키워드:
- 보상 트랜잭션(실패 시 역으로 처리)
- 2PC(Two-Phase Commit)
- SAGA 패턴(작업 단계를 쪼개고, 실패 시 보상 단계 실행)
4. 쿠폰 비동기 발급 예시
- 발급 요청 API
- 응답으로 “발급 요청 ID”만 돌려줌
- 별도 워커 스레드가 실제 발급 처리
- 상태 조회 API로 클라이언트가 발급 성공/실패 여부 확인
“발급 완료”가 아니라 “요청 접수” → 나중에 상태 확인
이렇게 핵심만 짚으면,
- 중요 로직(결제) 과 2) 부가 로직(정보 전달·알림·쿠폰) 을 분리해 안정성을 높이고
- 분산 환경에서는 SAGA 같은 패턴을 고민해야 한다는 점이 한눈에 들어옵니다.
'향해99 8기' 카테고리의 다른 글
| [ 10주차 과제 ] 장애대응 (0) | 2025.06.04 |
|---|---|
| [ 9주차 과제 ] 대용량 트래픽&데이터 처리 (0) | 2025.05.24 |
| [ 7주차 과제 ] 대용량 트래픽&데이터 처리 (0) | 2025.05.19 |
| [ 6주차 과제 ] 대용량 트래픽&데이터 처리 - 피드백 (0) | 2025.05.12 |
| [ 6주차 과제 ] 대용량 트래픽&데이터 처리 - 정리 (0) | 2025.04.29 |