# 비즈니스 요구사항 정리
- 데이터 : 회원ID, 이름
- 기능 : 회원등록, 조회
- 아직 데이터 저장소가 선정되지 않음(가상의 시나리오)

---

## 일반적인 웹 어플리케이션 계층 구조
![일반적인-웹-어플리케이션-계층-구조](https://user-images.githubusercontent.com/68052095/102780119-beeafc00-43d8-11eb-9b8d-89b1c0c69c4a.PNG)

- 컨트롤러 : 웹 MVC의 컨트롤러 역할을 한다.
- 서비스 : 서비스 클래스의 핵심 비즈니스 로직을 구현한다(ex. 회원은 중복가입이 안된다거나..).
    - 서비스는 비즈니스 도메인 객체를 가지고 핵심 비즈니스 로직이 동작하도록 구현한 객체이다.
- 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리한다.
- 도메인 : 회원, 주문, 쿠폰 등등 주문 데이터베이스에 저장하고 관리되는 비즈니스 도메인 객체이다.

---

## 클래스 의존관계
![클래스-의존관계](https://user-images.githubusercontent.com/68052095/102780114-be526580-43d8-11eb-8bb1-d7ef7652a753.PNG)

- 회원 비즈니스 로직에는 회원 서비스가 있다.
- 회원 리포지토리는 인터페이스로 설계한다.
    - 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계한다.
    - 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 `메모리 기반의 데이터 저장소`를 사용한다(굉장히 단순하며 금방 만들 수 있다).
    - 이는 향후에 `RDB`, `JPA` 등의 구체적인 기술이 선정되고나면(현재는 다양한 저장소를 고려중인 상황이라고 가정) 바꿔끼운다(바꿔끼우기 위해서는 인터페이스가 필요하므로 리포지토리는 인터페이스로 설계한다).

---