김영한 스프링 핵심 원리(기본편) - 예제 만들기

개발할래·4일 전
0

개발

목록 보기
12/14
post-thumbnail

앞 전에서 핵심 원리의 내용 중 인터페이스 예제를 구현해보자

1. 프로젝트 생성

  • 자바가 아닌 스프링 부트로 진행(상관 없음)
  • jdk-11이 아닌 jdk-17로 진행(인텔리제이[최신버전] java 17부터 설정 가능)

2. 비즈니스 요구사항 및 설계

  • 요구사항
    1) 회원 도메인
    • 회원 가입 및 조회
    • 회원 등급(일반, VIP)
    • 회원 데이터 자체DB 구축 또는 외부 시스템 연동 예정 -> 변동성 있음
    • 인터페이스 적용
    2) 주문과 할인정책
    • 상품 주문
    • 등급에 따른 할인 정책 적용
    • VIP는 할인 금액 1,000원 고정
    • 아직 할인 정책 확정난 부분 없음, 할인 적용 정책 폐지 가능성도
      있음 -> 변동성이 큼(인터페이스 적용)

3. 회원 도메인 설계

  • 회원 도메인 협력 관계

    • 클라이언트 : 회원 서비스 호출
    • 회원 서비스 기능 : 회원 가입, 회원 조회
    • 회원 저장소는 자체 DB를 사용할지, 외부 시스템과 연동할지
      정해 지지 않음 인터페이스를 만들어 역할과 구현을 분리
  • 회원 클래스 다이어그램

    • MemberService(인터페이스) : 역할, MemberServiceImpl(클래스) : 구현체
    • MemberRepository(인터페이스) : 역할 MemoryMemberRepository(클래스)/ DbMemberRepository(클래스) : 구현체
  • 회원 객체 다이어그램

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

_회원 도메인 설계의 문제점_ - MemberServiceImpl은 MemberRepository 인터페이스와 MemoryMemberRepository 구현체에도 의존 차후 변경 시 문제 발생 할 수 있음

4. 해결방안 제시

  • 주문과 할인 도메인 설계

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

    • 클라이언트 : 주문 생성(회원 id, 상품명, 상품 가격) 요청

    • 주문 서비스는 회원 저장소에서 회원을 조회

    • 주문 서비스는 회원 등급에 따른 할인 가능 여부를 할인 정책에 위임

    • 주문 서비스는 주문 결과를 반환

  • 주문 도메인 전체 설계

    • 역할과 구현을 분리하여 자유롭게 구현 객체를 조립 가능하도록 설계,
      회원 저장소 역할과 할인 정책 역할을 유연하게 변경 가능
  • 주문 도메인 클래스 다이어그램

    • OrderService: 주문 인터페이스
    • OrderServiceImpl: 주문 인터페이스 구현체
    • MemberRepository: 회원 저장소 인터페이스
    • MemoryMemberRepository: 회원 저장소 구현체 (메모리 저장소)
    • DbMemberRepository: 회원 저장소 구현체 (DB 저장소)
    • DiscountPolicy: 할인 정책 인터페이스
    • FixDiscountPolicy: 할인 정책 인터페이스 구현체 (정액 할인 정책)
    • RateDiscountPolicy: 할인 정책 인터페이스 구현체 (정률 할인 정책)
  • 주문 도메인 객체 다이어그램(메모리, 정액 할인)

  • 주문 도메인 객체 다이어그램(DB , 정률 할인)

5. 깃허브 내 코드 확인

https://github.com/JAVANOM/SPRING_CORE/tree/master

profile
내 인생부터 개발

0개의 댓글