스프링 핵심 원리 이해1 - 예제 만들기

1. 비즈니스 요구사항과 설계

  • 회원

    • 회원을 가입하고 조회할 수 있다.

    • 회원은 일반과 VIP 두 가지 등급이 있다.

    • 회원 데이터는 자체 DB 를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정..)

  • 주문 할인 정책

    • 회원은 상품을 주문할 수 있다.

    • 회원 등급에 따라서 할인 정책을 적용할 수 있다.

    • 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경될 수 있다.)

    • 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 있다. (미확정..)

요구사항을 보면 회원, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다. 그렇다고 이런 정책이 결정될 때까지 무기한 기다릴 수 도 없다. 우리는 앞에서 배운 객체 지향 설계 방법을 사용할 수 있다.

2. 회원 도메인 설계

  • 회원

    • 회원을 가입하고 조회할 수 있다.

    • 회원은 일반과 VIP 두 가지 등급이 있다.

    • 회원 데이터는 자체 DB 를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정..)

2. 회원 도메인 개발

회원 엔티티

회원 등급

회원 저장소

회원 저장소 인터페이스

메모리 회원 저장소 구현체

데이터베이스가 아직 확정이 안되었다. 그래도 개발은 진행해야 하니 가장 단순한, 메모리 회원 저장소를 구현해서 우선 개발을 진행하자.

회원 서비스

회원 서비스 인터페이스

회원 서비스 구현체

회원 도메인 - 회원 가입 테스트

회원 도메인 설계의 문제점

  • 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음

    • 주문까지 만들고나서 문제점과 해결 방안을 설명

3. 주문과 할인 도메인 설계

  • 주문과 할인 정책

    • 회원은 상품을 주문할 수 있다.

    • 회원 등급에 따라 할인 정책을 적용할 수 있다.

    • 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경될 수 있다.)

    • 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 있다. (미확정..)

주문 도메인 협력, 역할, 책임

주문 도메인 전체

  • 역할과 구현을 분리해서 자유롭게 구현 객체를 조립할 수 있게 설계했다. 덕분에 회원 저장소는 물론이고, 할인 정책도 유연하게 변경할 수 있다.

주문 도메인 클래스 다이어그램

주문 객체 다이어그램

3. 주문과 할인 도메인 개발

할인 정책

할인 정책 인터페이스

정액 할인 정책 구현체

VIP면 1000원 할인, 아니면 할인 없음

주문 엔티티

주문 서비스

주문 서비스 인터페이스

주문 서비스 구현체

주문 생성 요청이 오면, 회원 정보를 조회하고, 할인 정책을 적용한 다음 주문 객체를 생성해서 반환한다. 메모리 회원 레포지토리와, 고정 금액 할인 정책을 구현체로 사용한다.

주문과 할인 도메인 - 주문과 할인 정책 테스트

Last updated