[ 1주차 과제 ] 포인트 충전/사용에 대한 정책
2025. 3. 25. 14:09ㆍ향해99 8기
1주차 과제 : https://github.com/shinbumjun/hhplus-tdd-jvm/pull/1
✅ 포인트 충전 및 사용에 대한 정책
1. 포인트 충전 정책
- 충전 금액이 0보다 커야 한다: 사용자가 0 이하의 금액을 충전하려고 하면 예외를 발생시킵니다.
- 충전 금액은 100,000원을 초과할 수 없다: 비즈니스 규칙에 따라 한 번에 충전할 수 있는 최대 금액을 설정합니다.
- 누적 포인트가 100,000원을 초과할 수 없다: 충전 후 사용자가 보유한 포인트의 합이 최대 한도(100,000원)를 초과하지 않도록 제한합니다.
2. 포인트 사용 정책
- 사용 금액이 0보다 커야 한다: 사용하려는 포인트가 0 이하일 경우 예외를 발생시킵니다.
- 사용 금액은 보유 포인트 이하이어야 한다: 사용하려는 금액이 보유한 포인트보다 많으면 예외를 발생시킵니다.
- 잔액 부족 시 사용 불가: 사용자가 보유한 포인트가 부족하면 예외를 발생시킵니다.
✅ 검증 책임과 레이어 역할
- 형식/논리 검증
- 검증 예시: 사용 금액이 0 이하인 경우 예외 발생 (형식 및 논리적으로 잘못된 값 처리)
- 책임: Service (PointService): 서비스 로직 초반에 처리하여 잘못된 입력을 방지합니다.
- 정책적 검증
- 검증 예시: 충전 금액은 100,000원을 초과할 수 없고, 누적 포인트가 100,000원을 초과할 수 없도록 제한.
- 책임: Validator (PointValidator): 정책은 가변적이기 때문에 이 로직을 PointValidator에서 처리합니다. 정책이 변경될 경우, PointService는 수정하지 않고 PointValidator만 수정하면 됩니다.
- 도메인 불변성 검증
- 검증 예시: userId가 음수일 수 없고, 포인트는 음수일 수 없도록 검증합니다.
- 책임: Model (UserPoint): 객체 생성 시 필수 조건(불변성)을 강제하여 유효하지 않은 데이터로 인한 오류를 방지합니다.
'향해99 8기' 카테고리의 다른 글
| [ 3주차 과제 ] 이커머스 Clean + Layered Architecture 설계 (0) | 2025.04.05 |
|---|---|
| [ 2주차 과제 ] API명세, API에러 상황 정리, API에러 상황 정의 (0) | 2025.04.03 |
| [ 2주차 과제 ] 시퀀스 다이어그램, ERD (0) | 2025.04.01 |
| [ 2주차 과제 ] 스프린트 계획, 이커머스 요구사항 분석 (0) | 2025.03.29 |
| [ 1주차 과제 ] TDD 로 개발하기 Q&A (0) | 2025.03.24 |