
<aside>
계정의 잔액과 포인트에 대한 동시성 handling 필요
- 계정 잔액 및 포인트 사용 검증 → 분산락 적용
- IF. 분산락 적용(redis) 어려움 → 적절한 DB(transaction) row 잡아 pessimistic lock 적용
- 단, transaction 크기 줄여서 가져갈 것
- 첫 요청에서
PENDING
/SUCCESS
→ 다시 결제 요청 X ⇒ validation 필요
- 계정 잔액, 포인트 사용, 트랜잭션 상태 검증
- 트랜잭션 상태 업데이트하는 주체 명확한 표현 필요 ⇒ 주체 명확하게 나뉜 후 결과 응답하는 방식
- 트랜잭션 상태 “성공” 업데이트 → 수신하는 쪽
- 결제: paySystem 업데이트
- 환불: RefundService 업데이트
</aside>
<aside>
카프카를 활용한 MSA → 패턴 2가지: 코레오그래피 사가/오케스트레이션 사가
Trigger & Procedure / Saga & Event-Driven Architecture / 2PC
트랜잭션_관리_SAGA_4장.pdf
</aside>
프로젝트에서 사용하는 것
분산 락 + 2PC
- Prepare 단계
- 분산 락 사용 → 리소스 보호
- 준비 완료 → (락 유지) 준비 완료(Ready) 반환
- Commit or Rollback 단계
- Commit
- Coordinator가 모든 참여 서비스에 commit 명령
- 각 서비스 데이터 커밋 + 분산 락 해제
- Rollback
- 하나의 서비스라도 실패 → rollback 명령
- 서비스 변경된 내용 되돌림 + 분산 락 해제
시퀀스 다이어그램
간단한 텍스트를 이용하여 멋진 UML 다이어그램을 만들 수 있는 오픈소스 도구입니다.
Client: 결제 요청 → Server: 결제 생성 → Client: 성공 URL 반환 →
Client: 성공 URL 접근 → Server: 결제 승인/실패 처리 → 상태 반환
결제 요청 흐름
- 트랜잭션 상태 “성공” → Settlement, Notification, Schedule 서비스에 Kafka로 전달
5분 동안 결제 X (transaction Pending) → Status FAILED

취소 요청 흐름

환불 요청 흐름