스프링 공부/인프런 김영한 스프링 핵심 원리 - 기본편 노트정리

2-6. 주문과 할인 도메인 설계

모항 2022. 9. 3. 21:47

저번 회차까지, 회원 정보를 어떻게 새로 저장하고 찾아올지와 관련된 구현 및 테스트를 했다.

 

지금부터는 할인 적용 기능에 대한 작업이 시작된다.

주문이 들어왔을 때 주문을 한 회원 정보 및 현재 이 회사의 할인 정책에 맞추어 할인 결과를 반환하는 시스템을 만들 것이다.

 

이번 회차에서는

아직 코드를 쓰지는 않고

이 기능을 구현하기 위한 도메인 설계만 해본다.

 

강의 영상과 자료에 이해를 돕는 다이어그램들이 있지만 이 게시글에 복붙하지는 않을 것이다. 복습 시에는 노트 정리와 강의자료를 함께 보자.

 

 

 

 

현재 상황

현재 상황을 한 마디로 설명하자면, 할인 정책이 언제 변경되어도 이상하지 않은 상황이다.

 

일반 회원과 VIP 회원 중 VIP 회원에게 1000원이라는 정액 할인을 적용할 것이라고

일단 이야기하고는! 있으나

확정되지 않은 상황이다.

 

정액 할인이 아닌

비율로 따지는 정률 할인으로 정책이 바뀔 수 있다.

 

그리고 할인을 아예 안 하게 될 수도 있다.

 

그러므로 우리는 어느 쪽으로 정책이 바뀌든 손쉽게 프로그램을 변경할 수 있도록

객체지향적으로 설계해야 한다.

 

 

 

 

 

도메인의 구성

우리가 구현할 도메인은 매우 간단하다.

구성요소를 크게 나누어보면

 

클라이언트

주문 서비스

회원 정보 관리 역할을 하는 요소

할인 정책 관리 역할을 하는 요소

 

이렇게 네 가지가 있다.

 

할인 정책 관리 요소의 경우,

인터페이스에 기본적인 구성만 정해놓고,

어떤 방식의 할인 정책이 적용될지는 구현체에 따라 달라지도록 설계한다.

회원 정보 관리 요소가 데이터 저장 위치에 따라(로컬 메모리 혹은 실제 DB) 구현체가 달라지는 것과 같은 방식이다.

 

실제 쇼핑몰을 운영할 때에는

회원, 할인 정책 뿐만 아니라

각각의 상품 정보와 주문 정보까지 객체로 저장하고 관리해야 한다.

그러나 일단 지금은 연습을 위해 간단한 예제를 만드는 상황이므로 그것은 생략하기로 한다.

 

 

 

 

 

각 요소의 역할

클라이언트가 주문에 관한 정보를 주문 서비스에 전달한다.

이 정보에는 회원 id, 상품명, 상품 가격이 포함된다.

 

그럼 서비스는 회원 정보 관리 역할을 하는 요소에게 가서

이 id에 해당하는 회원의 정보를 가져온다.

회원의 등급이 할인에 영향을 끼치기 때문이다.

 

그리고 서비스는 할인 정책 관리 역할을 하는 요소에게 가서

현재 할인 정책에 따른 할인 적용을 맡긴다.

 

그러면 할인 적용을 했을 때의 가격이 결정된다.

이 결과를 클라이언트에게 반환해준다.

 

 

실제 쇼핑몰이었다면 클라이언트에서 전송하는 데이터가 조금 더 복잡하고 구조화되었을 것이다.

그리고 마무리 작업도 좀 더 복잡했을 것이다.

결과값을 클라이언트에게 반환하고 끝나는 것이 아니라, 이를 DB에 저장하는 등의 작업이 추가되어야 한다.

 

그러나 역시 우리는 그냥 공부를 위해 예제를 만들어보는 것이므로 쉽게쉽게 간다.

 

 

 

 

 

 

다음 회차에서는 오늘 한 설계에 맞게 코딩을 시작한다.