- 💼 프로젝트 과제 예제: “은행 계좌 관리 시스템”2025년 05월 21일 15시 59분 22초에 업로드 된 글입니다.작성자: do_hyuk728x90반응형
다음은 GPT를 통해 계좌 시스템에 관련되어 토이 프로젝트를 구현해보기 위해 요구한 과제 개요이다.
서비스 설계 및 개발 역량을 기르기 위한 계좌 관리 시뮬레이션 예제입니다.
특히 동시성 문제, 락 처리, 트랜잭션 일관성 등 백엔드 핵심 개념을 직접 다뤄볼 수 있도록 구성했습니다.
🧩 요구사항
📌 기능 설명
- GET /wallet/{id}/balance
→ 특정 사용자 계좌의 현재 잔액을 조회합니다. - POST /wallet/{id}/credit
→ 계좌에 금액을 입금합니다. 입금 처리 로직을 완성하세요. - POST /wallet/{id}/debit
→ 계좌에서 금액을 출금합니다.
출금 요청 금액이 현재 잔액보다 클 경우 실패 처리되어야 합니다.
⚙️ 동시성 제약 조건
- ✅ 동일 사용자에게 동시에 2개 이상의 입금 요청이 들어올 경우
→ 충돌로 간주하여 모두 실패 처리합니다.
예) 409 Conflict, 커스텀 오류 코드 등 - ✅ 동일 사용자에게 입금과 출금 요청이 동시에 들어올 경우
→ 정확한 금액 계산이 이루어져야 합니다.
→ 락 또는 동기화로 구현 - ✅ 동일 사용자에게 출금 요청이 동시에 2개 이상 들어올 경우
→ 순차적으로 하나씩 처리되어야 합니다.
→ 예: 동기 큐, 사용자별 락 처리 등
🧪 테스트 요구사항
아래 시나리오를 기반으로 동시성 테스트 코드를 작성하세요.
테스트 시나리오
- 입금 요청이 동시에 2건 들어올 때 → 둘 다 실패하는지 확인
- 입금과 출금 요청이 동시에 들어올 때 → 최종 잔액 정확히 계산되는지 확인
- 출금 요청이 동시에 2건 들어올 때 → 순차적으로 처리되고, 잔액이 정확히 반영되는지 확인
테스트 방식은 자유입니다.
예: @SpringBootTest 환경에서 ExecutorService, CountDownLatch 등을 사용한 멀티스레드 테스트
🧠 보너스 미션 (선택)
- 사용자별 락 처리 로직을 커스텀 구현해보세요.
→ Java ConcurrentHashMap<UUID, ReentrantLock> 등으로 구현 가능 - 서비스 계층과 예외 처리를 공통화하여 구조적인 설계를 적용해보세요.
🏁 목표
- 단순한 CRUD를 넘어 데이터 정합성, 락 처리, 트랜잭션 설계에 대한 감각 익히기
- 실제 금융 서비스에서 일어나는 동시성 이슈를 이해하고 대응하는 능력 기르기
- 기술 블로그 및 포트폴리오로 활용 가능한 수준의 구조 정리
728x90반응형댓글 - GET /wallet/{id}/balance