이번 노트부터는 Spring core만을 사용하여(즉, 순수 자바만을 이용하여) 프로젝트를 만들고, 객체지향적으로 리팩토링하는 것에 이어 스프링으로까지 리팩토링해본다.

SpringBoot 설정은 아래와 같이 어떠한 Dependencies도 들어가지 않는다.

Untitled

만약 스프링 부트 3.0을 선택하려면, 1. Java 17 이상을 사용해야 한다. 2. 오라클과 자바 라이센스 문제로 모든 javax 패키지 이름을 jakarta로 변경해야 한다.


비즈니스 요구사항<회원>과 설계

요구사항

회원

요구사항을 보면 회원 데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다. 그렇다고 이런 정책이 결정될 때까지 개발을 무기한 기다릴 수 도 없다. 따라서 인터페이스를 만들고 구현체를 언제든지 갈아끼울 수 있도록 설계하면 된다.

설계

설계는 크게 세 가지로 그려진다.

회원 도메인 협력 관계

협력 관계 다이어그램은 기획자들도 참고할 수 있다.

Untitled

클라이언트가 서비스를 호출하고, 서비스가 리포지토리를 호출한다.

서비스의 역할은 회원가입과 회원조회이고, 회원 저장소는 회원 데이터를 저장하는데, 회원의 요구사항에 따르면 회원 데이터는 자체 DB를 구축할 수도 있고, 나중에 외부 시스템과 연동할 수도 있는 등 미확정 상태이므로, 회원 저장소 계층을 인터페이스와 구현으로 나누어야 한다. 또한, 아직은 확정된 DB가 없는데 당장의 개발을 위해서는 DB를 구현해야 하므로 [메모리 회원 저장소]를 구현하고 나중에 구현체를 갈아끼우는 식으로 진행하도록 한다.