이 프로젝트는 항해플러스 백엔드 6기 코스의 1주차 과제입니다.
TDD(테스트 주도 개발)를 이용하여 포인트 관리 API를 구현합니다.
- 프로젝트에 첨부된 설정 파일은 수정하지 않습니다.
- 테스트 케이스 작성 및 작성 이유를 주석으로 작성합니다.
- 프로젝트 내의 주석을 참고하여 필요한 기능을 작성합니다.
- 분산 환경은 고려하지 않습니다.
point
패키지의 TODO와 테스트 코드를 작성해주세요.
- PATCH
/point/{id}/charge
: 포인트를 충전한다. - PATCH
/point/{id}/use
: 포인트를 사용한다. - GET
/point/{id}
: 포인트를 조회한다. - GET
/point/{id}/histories
: 포인트 내역을 조회한다.
- 잔고가 부족할 경우, 포인트 사용은 실패해야 합니다.
- 동시에 여러 건의 포인트 충전, 이용 요청이 들어올 경우 순차적으로 처리되어야 합니다.
/point
패키지 내에PointService
기본 기능 작성/database
패키지의 구현체는 수정하지 않고, 이를 활용해 기능을 구현- 각 기능에 대한 단위 테스트 작성
- 총 4가지 기본 기능 (포인트 조회, 포인트 충전/사용 내역 조회, 충전, 사용) 구현
- 포인트 충전, 사용에 대한 정책 추가 (잔고 부족, 최대 잔고 등)
- 동시에 여러 요청이 들어오더라도 순서대로 (혹은 한번에 하나의 요청씩만) 제어될 수 있도록 리팩토링
- 동시성 제어에 대한 통합 테스트 작성
- 동시성 제어 방식에 대한 분석 및 보고서 작성 (README.md에 포함)
동시성 제어 방식에 대한 상세한 분석 및 보고서는 CONCURRENCY_CONTROL.md 파일에서 확인할 수 있습니다.