프로젝트 생성
- 프로젝트 설정 : Gradle, Java, Spring Boot 2.7.7
비즈니스 요구사항과 설계
회원
- 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
주문과 할인 정책
- 회원은 상품을 주문할 수 있다.
- 회원 등급에 따라 할인 정책을 적용할 수 있다.
- 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (미확정)
- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정)
미확정된 부분이 있는데 어떻게 기능개발을 할까?
- 미확정인 부분은 인터페이스를 만들고 구현체만 변경하면 동작할 수 있도록 설계한다
회원 도메인 설계
회원 도메인 개발
- 개발 코드는 업로드 x
- 회원 등급을 나타내는 Grade를 Enum으로 생성
- Member 도메인 생성
- Member 도메인을 사용하여 Repository를 만들건데 인터페이스를 사용하여 구현체를 변경해야 하므로 MemberRepository 인터페이스 생성 -> 회원을 저장해야 하므로 save 메소드 선언
- MemberRespository 인터페이스를 상속받은 MemoryMemberRepository 구현체 생성 -> Map에 회원 아이디와 멤버 정보를 저장하도록 구현
주문, 할인 도메인 설계
주문, 할인 도메인 개발
- 할인 인터페이스 생성
- 할인 구현체 생성 -> 할인 가격은 일단 1000원
- 주문 도메인 생성
- 주문 도메인을 가지고 주문 서비스 인터페이스 생성