[ 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 이하일 경우 예외를 발생시킵니다.
  • 사용 금액은 보유 포인트 이하이어야 한다: 사용하려는 금액이 보유한 포인트보다 많으면 예외를 발생시킵니다.
  • 잔액 부족 시 사용 불가: 사용자가 보유한 포인트가 부족하면 예외를 발생시킵니다.

검증 책임과 레이어 역할

  1. 형식/논리 검증
    • 검증 예시: 사용 금액이 0 이하인 경우 예외 발생 (형식 및 논리적으로 잘못된 값 처리)
    • 책임: Service (PointService): 서비스 로직 초반에 처리하여 잘못된 입력을 방지합니다.
  2. 정책적 검증
    • 검증 예시: 충전 금액은 100,000원을 초과할 수 없고, 누적 포인트가 100,000원을 초과할 수 없도록 제한.
    • 책임: Validator (PointValidator): 정책은 가변적이기 때문에 이 로직을 PointValidator에서 처리합니다. 정책이 변경될 경우, PointService는 수정하지 않고 PointValidator만 수정하면 됩니다.
  3. 도메인 불변성 검증
    • 검증 예시: userId가 음수일 수 없고, 포인트는 음수일 수 없도록 검증합니다.
    • 책임: Model (UserPoint): 객체 생성 시 필수 조건(불변성)을 강제하여 유효하지 않은 데이터로 인한 오류를 방지합니다.