📌 문제 상황

<그림1. 즉시 이체 처리 순차 다이어그램>

<그림1. 즉시 이체 처리 순차 다이어그램>

  1. 즉각 요청-응답 프로세스는 외부 서비스와의 connection을 유지한 채 비관 lock을 잡기에, lock으로 인한 다양한 이슈가 외부 서비스로 전파될 위험 존재(ex. deadlock 발생시 connection도 대기)
  2. 즉각 요청-응답 프로세스는 타행 이체(은행A→은행B 이체)를 2개의 API(이체 입금 요청 API, 이체 입금 완료 응답 API)로 구현하자는 은행 간 약속(프로토콜)을 무시하는 방법임.

📌 접근 방법과 해결과정

원인 분석

<그림2. 이체 입금 요청 비동기 처리 순차 다이어그램>

<그림2. 이체 입금 요청 비동기 처리 순차 다이어그램>

측정

<그림3. Elastic stack으로 확인한 병목 구간. 비관 lock>

<그림3. Elastic stack으로 확인한 병목 구간. 비관 lock>

해결 방법-1

  1. 다른 트랜잭션에서 외부 API 호출하는 방법엔 2가지가 있었음. 서버 다운 상황에서 ‘이체 입금 완료 응답 API’ 호출을 보장하지 않는 방법과 보장하는 방법이 있었음.
  2. 돈과 관련된 기능이기에 사용자 입장에선 어떻게든 빠른 시간 안에 이체 입금 완료 응답을 받는 것이 중요하다고 판단했고 이에 ‘이체 입금 완료 응답 API’ 호출을 보장하기로 결정함.