Skip to content

Async 트랜잭션 분리 및 CompletableFuture 기반 Open API 설계

Notifications You must be signed in to change notification settings

nayoung238/Banking-API

Repository files navigation

💰 Banking 서비스

종료된 팀 프로젝트 디벨롭하기...🔥

기능

  • 이체 기능
  • 원화 및 외화 계좌 제공 (원화, 외화 간 거래에 실시간 환율 데이터 사용)
  • 결제 관련 Open API 제공
  • 무중단 데이터 정합성 체크 기능
  • 실시간 여러 환율 페이지 제공

📚 List of Refactoring Tasks

IDOR (Insecure Direct Object Reference) 해결

  • 이슈 발생: 상대방 계좌 & 이체 내역 접근 가능
  • 해결 방법
    • 중복을 허용한 데이터 설계
    • JWT 기반 인증 강화 (Bearer Auth)
    • Account 접근 제한
  • 기대: 민감한 정보 보호
  • Account & User 엔티티 접근 제한 (거래 당사자는 상대 정보 일부 접근 가능)

트랜잭션 분리 & Saga 패턴 (choreography)

  • 이슈 발생: 한 트랜잭션에서 많은 락 점유 → 데드락 및 응답 지연 발생
  • 해결 방법: 트랜잭션 분리해 락 점유율 감소
  • 기대: 데드락 해결 및 NIO 스레드 응답 속도 개선
  • @Async 트랜잭션 분리해 Deadlock 해결
    • 트랜잭션 보장하기 위해 CallerRunsPolicy 설정 → NIO 스레드 지연 발생, MQ 해결 예정
    • @Async 트랜잭션(입금) 실패 시 Sync 트랜잭션(출금) 되돌리기 위해 보상 트랜잭션 생성 (choreography, kafka 사용)
  • 이벤트 기반 트랜잭션 분리 (CDC로 분리된 트랜잭션 보장 예정)
  • 싱글 트랜잭션에 Ordered Locking 적용해 데드락 방지

CompletableFuture 기반 Open API 설계

  • 이슈 발생: 수많은 스레드의 상태 전환 문제 (Context Switching 비용)
  • 해결 방법: 락을 최대한 배제할 수 있는 방법 & RPS 큰 방식 채택
  • 기대: 효율적인 CPU 사용
  • ReentrantLock으로 Open API 호출 제한 → 네트워크 비용 절감 & Forbidden 오류 코드 대비
  • CompletableFuture 기반 환율 Open API 설계 (Lock 사용 최소화)
  • Timeout 동적 설정
  • Spin Lock vs Sleep 방식 CPU usage & RPS 모니터링
  • 분산 환경 고려 (현재 딘일 서버 기준으로 구현됨)
  • 테스트 코드 Timeout 설정 (외부 API 오류 시 테스트 코드에서 timeout 발생)

데이터 보안

  • 이슈 발생: AES 256 알고리즘으로 암호화했지만, 암호화를 위해 여러 데이터를 여러 서비스가 공유해야 하는 문제점
  • 해결 방법: SSL 전환
  • AES 256 암호화
  • SSL 전환

CI/CD 파이프라인

  • 이슈 발생: 코드 증가로 CI 작업만 5m 23s 소요
  • 해결 방법: CI/CD 파이프라인 개선
  • 기대: 코드 증가에도 빠른 CI/CD 가능
  • Gradle 캐싱
  • Docker Layer 캐싱
  • 파이프라인 병렬화
  • Docker Hub → AWS ECR 전환

About

Async 트랜잭션 분리 및 CompletableFuture 기반 Open API 설계

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published