빈페이로 결제하게 된 이유

내부 결제 로직과 외부 API 충전 기능을 분리함으로써 외부 API 장애 시 영향을 최소화합니다.
결제를 진행하는 중에는 외부API를 연동하지 않기 때문에 사용자의 경험을 향상시키고 결제 프로세스를 간소화할 수 있습니다.
서비스 자체 포인트인 빈페이 관리 방법 비교
방안 1: 유저 MSA에 beanpay 컬럼 추가
결제 MSA에서 유저 MSA로 API 요청하여 관리.
문제점:
- 단일 트랜잭션 구현의 어려움
- 수동 롤백 처리 필요
- 비관적 락을 사용하거나 분산락을 사용하게 되면 회원의 읽기 성능도 떨어지게 됩니다.
방안 2: 결제 MSA에 관리 (선택)
결제 MSA 내 BeanPay 테이블 및 상세 테이블로 관리.
선택 이유:
- 회원 조회 처리량 보존
- 데이터베이스 트랜잭션 활용 가능
- 결제 파트에서 금액 관리로 응집성 향상
- API 호출 최소화
- 단일 트랜잭션 처리 가능, 높은 일관성 보장
데이터 정합성 유지 방법
Redis 분산락 활용
- 단일 스레드 특성으로 동시성 문제 회피 가능
- 다중 데이터베이스 환경에서도 구현 가능
- 락 획득/해제 및 예외 처리는 수동 작성 필요
데이터베이스 Lock 선택지
| 방식 | 적합성 | 이유 |
|---|---|---|
| 비관적 락 | 적합 | 결제 파트에 적합 (높은 정합성 우선) |
| 낙관적 락 | 부적합 | 동시 변경 빈도가 높아 부적합 |
| DB 샤딩 | 어려움 | 수평 확장 시 락 구현 어려움 |
최종 선택: Redis 분산락

분산환경일 때 분산락을 적용하면 각 서버가 동일한 락을 공유하고 상호 배제적으로 작업할 수 있기 때문입니다.
프로젝트: Team-Koreano/Koreano