Back-End/Inflearn

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

남쫑 2024. 10. 31. 20:52

비즈니스 요구사항과 설계

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

고려해야 할 부분: 아직 확정되지 않은 회원 데이터, 할인 정책 같은 부분은 당장 결정해서 개발하기 어렵다.

 -> 인터페이스를 통해 추상화하여 구현체를 갈아끼우면 바뀌도록 객체지향적으로 설계하면 된다!

 

 

회원 도메인 설계

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

회원 도메인 협력 관계
회원 클래스 다이어그램
회원 객체 다이어그램

*회원 서비스 구현체: MemberService.Impl

 

 

회원 도메인 개발

  • 회원 등급: enum(BASIC, VIP)
  • Member: 회원 엔티티
  • MemberRepository: 회원 저장소 인터페이스
    • 구현: MemoryMemberRepository - 메모리 회원 저장소 구현체 (DB가 아직 확정이 안되었지만, 개발은 진행해야 하니 우선 가장 간단한 메모리 회원 저장소로 구현)
  • MemberService: 회원 서비스 인터페이스
    • 구현: MemberServiceImpl - 회원 서비스 구현체

 

회원 도메인 실행과 테스트

# keymap을 검색하여 단축키 설정 가능

# command + N: 생성자, getter, setter 단축키

# 구현체가 하나만 있을 때는 구현체 뒤에 Impl을 붙이는 것이 관례

# 객체 선언 시 command + shift + enter를 사용하면 ;까지 자동으로 완성

# psvm + enter: main메서드 자동생성

# command + option + v: 객체 자동 선언

 

주문과 할인 도메인 설계  

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

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

 

1. 주문 생성: 클라이언트는 주문 서비스에 따른 주문 생성을 요청한다.

2. 회원 조회: 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다.

3. 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다.

4. 주문 결과 반환: 주문 서비스는 할인 결과를 포함한 주문 결과를 반환한다.

 

주문 도메인 클래스 다이어그램
주문 도메인 객체 다이어그램1
주문 도메인 객체 다이어그램2

 

 

주문과 할인 도메인 개발

  • DiscountPolicy: 할인 정책 인터페이스 (추상화)
    • 구현: FixDiscountPolicy - 정액 할인 정책 구현체
  • Order: 주문 엔티티
  • OrderService: 주문 서비스 인터페이스
    • 구현: OrderServiceImpl - 주문 서비스 구현체

 

 

주문과 할인 도메인 실행과 테스트

# long은 null이 못 들어가고 Long은 들어갈 수 있음

 

 

 

참고 강의: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

 

스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런

김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보

www.inflearn.com