종료된 팀 프로젝트 디벨롭하기...🔥
- 이체 기능
- 원화 및 외화 계좌 제공 (원화, 외화 간 거래에 실시간 환율 데이터 사용)
- 결제 관련 Open API 제공
- 무중단 데이터 정합성 체크 기능
- 실시간 여러 환율 페이지 제공
- 이슈 발생: 상대방 계좌 & 이체 내역 접근 가능
- 해결 방법
- 중복을 허용한 데이터 설계
- JWT 기반 인증 강화 (Bearer Auth)
- Account 접근 제한
- 기대: 민감한 정보 보호
- Account & User 엔티티 접근 제한 (거래 당사자는 상대 정보 일부 접근 가능)
- 이슈 발생: 한 트랜잭션에서 많은 락 점유 → 데드락 및 응답 지연 발생
- 해결 방법: 트랜잭션 분리해 락 점유율 감소
- 기대: 데드락 해결 및 NIO 스레드 응답 속도 개선
- @Async 트랜잭션 분리해 Deadlock 해결
- 트랜잭션 보장하기 위해 CallerRunsPolicy 설정 → NIO 스레드 지연 발생, MQ 해결 예정
- @Async 트랜잭션(입금) 실패 시 Sync 트랜잭션(출금) 되돌리기 위해 보상 트랜잭션 생성 (choreography, kafka 사용)
- 이벤트 기반 트랜잭션 분리 (CDC로 분리된 트랜잭션 보장 예정)
- 싱글 트랜잭션에 Ordered Locking 적용해 데드락 방지
- 이슈 발생: 수많은 스레드의 상태 전환 문제 (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 작업만 5m 23s 소요
- 해결 방법: CI/CD 파이프라인 개선
- 기대: 코드 증가에도 빠른 CI/CD 가능
- Gradle 캐싱
- Docker Layer 캐싱
- 파이프라인 병렬화
- Docker Hub → AWS ECR 전환