프로젝트 생성
스프링 부트 스타터로 스프링 프로젝트 생성
-
https://start.spring.io/ 접속
-
설정

-
dependency를 추가하지 않는이유?
- core쪽 라이브러리만 가져와서 제일 간단하게 생성하려고
-
프로젝트 생성해서 다운받고, intelliJ로 build.gradle 열어주기
- 프로젝트를 처음 열 때는 라이브러리를 wget으로 다운받기 때문에 시간이 좀 걸린다!
- 다운 받은 후에는 gradle refresh를 통해서 동기화까지 해줘야 제대로 라이브러리가 적용됨
-
의존 관계 딱 두 개인 거 확인 가능
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
-
메인 파일을 실행시키면

비즈니스 요구사항과 설계
- 회원
- 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
- 주문과 할인 정책
- 회원은 상품을 주문할 수 있다.
- 회원 등급에 따라 할인 정책을 적용할 수 있다.
- 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 가능성 유)
- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다. (미확정)
⏩ 역할과 기능으로 나눈다!
인터페이스를 만들고 구현체를 언제든지 갈아끼울 수 있도록 설계하면 정책이 결정될 때까지 기다리지 않고 개발을 진행할 수 있다.
회원 도메인 설계
-
회원 도메인 요구사항
- 회원을 가입하고 조회할 수 있다. (회원 서비스)
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
<회원 도메인 협력 관계>

- 일단 메모리 회원 저장소를 만든다.
- 근데 재부팅하면 다 사라질것임 (메모리니까!) - 개발용으로만 사용
- 나중에 DB 회원 저장소로 메모리 회원 저장소를 갈아끼울 예정
- 기획자도 볼 수 있는 것
<회원 클래스 다이어그램>

- 인터페이스로 멤버 서비스를 만듦
- 회원 저장소를 memberRepository 인터페이스로 만듦
- 개발자가 도메인 협력 관계 그림을 바탕으로 구체화해서 만듦
<회원 객체 다이어그램>

- 서버가 뜰 때 동적으로 결정되는, 클라이언트가 실제로 사용하는 인스턴스를 표현해놓은 그림
- 객체 간 메모리 참조가 어떻게 되는지 표현함
- 클라이언트가 실제로 참조하는 것은 memberServiceImpl
- 회원 서비스: memberServiceImpl
- 개발자가 도메인 협력 관계 다이어그램을 바탕으로 구체화해서 만듦
회원 도메인 개발
package hello.core.member;
public enum Grade {
BASIC,
VIP
}