본문 바로가기
SpringFramework/Spring 중요 개념

[Spring] 예제 만들기 (순수 Java)

by 쭈봉이 2021. 12. 13.

라이브러리는 하나도 쓰지 않는다
초기세팅을 IntelliJ로 빌드하는게 빠름

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

  • 회원
    • 회원을 가입하고 조회
    • 회원은 일반과 VIP 두 가지 등급이 있다.
    • 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수 있다. (미확정)
  • 주문과 할인 정책
    • 회원은 상품을 주문할 수 있다.
    • 회원 등급에 따라 할인 정책을 적용할 수 있다.
    • 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경될 수 있다.)
    • 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다.

회원 데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다. 

인터페이스를 만들고 구현체를 언제든지 갈아 끼울수 있도록 설계하면 된다.

 

2. 회원 도메인 설계

  • 회원 도메인 요구 사항
    • 회원을 가입하고 조회
    • 회원은 일반과 VIP 두 가지 등급이 있다.
    • 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수 있다. (미확정)

클라이언트 > 회원서비스 > 회원 저장소 (메모리 회원저장소, DB 회원저장소, 외부 시스템 연동 회원저장소)

 

회원 클래스 다이어그램

<<interface>>MemberService  <---- MemberServiceImpl ---> <<interface>>MemberServficeRepository (MembryMemberRepository, DbMemberRepository)

 

회원객체 다이어그램

클라이언트 -> 회원 서비스 -> 메모리 회원 저장소

 

- 회원 서비스: MemberServiceImpl

 

3. 회원 서비스 개발

단축키 찾기 ^^;

위 이미지를 보면 Service, Repository 역할을 하는 인터페이스와 클래스가 각각 하나씩 만들어져 있다.

그 이유는 Service 인터페이스를 통해 비즈니스의 변경이 있을 경우 다른 클래스를 갈아끼워 변형을 하기 위함이고,

Repository 인터페이스 역시 Repository 역할을 하는 구현체를 갈아 끼우기 위해 위와 같이 설계한 것 같다.

즉, 구현체의 변경 없이도 비즈니스를 변경할 수 있는 형태로 설계를 하는 것으로 이해했다.

 

Ctrl + Alt + V --> 변수 추출!!!! 까먹지 말자

 

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

  • 주문과 할인 정책
    • 회원은 상품을 주문할 수 있다.
    • 회원 등급에 따라 할인 정책을 적용할 수 있다.
    • 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경될 수 있다.)
    • 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다.

>> 주문 서비스의 역할

1. 주문 생성 : 회원 id, 상품명, 상품가격 -> 주문 서비스에 주문 생성을 요청

2. 회원 조회 : from 회원 저장소, 할인을 위해 회원 등급이 필요하므로 회원 저장소에서 회원을 조회

3. 할인 적용 : 할인 정책 역할, 회원등급에 따라 할인 여부를 할인 정책에 위임

4. 주문 결과 반환, 할인 결과를 포함한 주문 결과를 반환

 

https://github.com/JubongJung/SpringExample1

 

 

댓글