📌 김영한 선생님의 스프링 핵심 원리 - 기본편 강의를 들으면서 공부한 내용을 정리한 게시물입니다.
오늘은 순수 자바로 예제를 만들면서 스프링의 핵심 원리를 이해해보자!
다음과 같이 비즈니스 요구사항이 주어졌을 때 설계를 해보자.
📌 회원
- 회원을 가입하고 조회할 수 있다.
- 회원은 일반과 VIP 두 가지 등급이 있다.
- 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)
📌 주문과 할인 정책
- 회원은 상품을 주문할 수 있다.
- 회원 등급에 따라 할인 정책을 적용할 수 있다.
- 할인 정책은 모든 VIP는 1,000원을 할인해주는 고정 금액 할인을 적용해달라.
(나중에 변경될 수 있다.)- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했으며,
최악의 경우 할인을 적용하지 않을 수도 있다. (미확정)
요구사항을 보면 회원 데이터 부분이나 할인 정책 부분은 나중에 변경될 가능성이 있다.
하지만 이러한 부분이 결정될 때까지 언제까지나 개발을 미룰 수는 없다.
이럴 경우 객체 지향 설계 방법을 활용하여 인터페이스를 만들고 구현체를 언제든지 갈아끼울 수 있도록 설계하면 된다!
📌 참고 사항
지금부터는 순수 자바로 개발하지만 기본 세팅을 편하게 하기 위해서 스프링 부트를 사용한다!
MemberService
역할을 인터페이스로 만들고, 그 구현을 MemberServiceImpl
에서 한다.MemberRepository
역할을 인터페이스로 만들고, 그 구현을 MemoryMemberRepository
나 DbMemberRepository
에서 한다.실습 내용은 github에 올려두었다. (core
폴더)
위의 설계서 내용을 따라서 자바 코드로 실습까지 마쳤는데 문제점이 발견된다!
OCP
,DIP
가 잘 지켜지고 있는지에 대한 의문을 갖게 된다.
MemoryMemberRepositoy
를 사용하고 있는데, 아직 미확정인 부분이기 때문에 이를 변경할 때 OCP
원칙이 지켜질 수 있을까?→ 이 문제들은 설계를 해가면서 해결해나갈 것이다.
📌 주문과 할인 정책 요구사항
- 회원은 상품을 주문할 수 있다.
- 회원 등급에 따라 할인 정책을 적용할 수 있다.
- 할인 정책은 모든 VIP는 1,000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경될 수 있다.)
- 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다.
주문을 하는 동작은 다음과 같다.
findById
를 이용해서 조회한다.역할과 구현까지 그린 그림이다.
계~속 강조했던 역할과 구현을 분리해서 객체를 자유롭게 조립할 수 있게 설계했다.
이로 인해 미확정된 부분들에 대해 유연하게 대처할 수 있게 되었다.
주문 도메인 정책을 클래스 다이어그램을 나타낸 그림이다.
회원을 메모리에서 조회하고, 정액 할인 정책(고정 금액)을 지원해도 주문 서비스를 변경하지 않아도 된다.
회원을 메모리가 아닌 실제 DB에서 조회하고, 정률 할인 정책(주문 금액에 따라 % 할인)을 지원해도 주문 서비스를 변경하지 않아도 된다.
⭐ 각각 역할 간의 협력 관계는 그대로 유지된다.
실습 내용은 github에 올려두었다. (core
폴더)
다음 시간에도 예제를 마저 실습해볼 것이다!