minghxx.blog
  • [Spring] 스프링 핵심 원리 기본편 2) 스프링 핵심 원리 이해1
    2023년 10월 18일 12시 04분 00초에 업로드 된 글입니다.
    작성자: 민발자
    728x90

    스프링 핵심 원리 - 기본편

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

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

    1) 회원

    회원 가입하고 조회가능

    회원 등급은 일반과 VIP 두 가지

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

     

    2) 주문과 할인 정책

    회원은 상품 주문 가능

    회원 등급에 따라 할인 정책 적용 가능

    할인 정책은 VIP는 1000원 할인해 주는 고정 금액 할인 적용(나중에 변경될 수 있음)

    할인 정책은 변경 가능성 높음, 기본 할인정책 미정상태고 최악의 경우 할인을 적용하지 않을 수도 있음

     

    ▶ 할인 정책이 미정이기 때문에 인터페이스를 만들고 구현체로 언제든지 변경 가능하게 설계


    2.  회원 도메인 설계

    1) 회원 도메인 요구사항

    회원 가입하고 조회가능

    회원 등급은 일반과 VIP 두 가지

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

     

    2) 저장소 설계

    회원 도메인 협력 관계

    회원 데이터 저장 방식을 확정하지 않았기 때문에 저장소 역할과 구현을 나누어 설계

     

    3) 회원 클래스 다이어그램

    클래스 다이어그램 → 실행없이 클래스만 분석

    회원 클래스 다이어그램

    회원 서비스 MemberService 역할을 인터페이스로 만들고 구현체로 MemberServiceImpl 클래스 생성

    회원 리포지토리 MemberRepository 역할을 인터페이스로 만들고 구현체로 Memory와 DB 클래스 생성

     

    4) 회원 객체 다이어그램

    객체 다이어그램 → 객체간의 메모리 참조 관계를 표현

    클라이언트가 실제로 사용하는 인스턴스 객체를 표현한 다이어그램

    리포지토리는 메모리를 넣을지 DB를 넣을지 동적으로 결정된다.

    현재는 메모리로 사용


    3.  회원 도메인 실행과 테스트

    1) 회원 도메인 설계의 문제점

    -클라이언트 MemberServiceImpl이 인터페이스인 MemberRepository를 의존하고 있고 구현체를 클라이언트에서 생성

    구현체를 변경하면 클라이언트 코드도 변경 ▶ OCP 위반

    -MemberServiceImpl이 인터페이스인 MemberRepository와 구현체인 MemoryMemberRepository 모두 의존하고 있다

    의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존 ▶ DIP 위반


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

    1) 주문과 할인정책

    회원은 상품 주문 가능

    회원 등급에 따라 할인 정책 적용 가능

    할인 정책은 VIP는 1000원 할인해 주는 고정 금액 할인 적용(나중에 변경될 수 있음)

    할인 정책은 변경 가능성 높음, 기본 할인정책 미정상태고 최악의 경우 할인을 적용하지 않을 수도 있음

     

    3) 주문 도메인의 협력과 역할, 책임

     

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

    2. 회원 조회 : 할인을 위해서는 회원 등급 필요해 회원 저장소에서 회원 조회

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

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

     

    ▶ 역할과 구현을 분리해서 자유롭게 구현 객체 조립 가능하게 설계

     

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

    주문 서비스 OrderService 역할을 인터페이스로 만들고 구현체로 OrderServiceImpl 클래스 생성

    할인 정책 DiscountPolicy 역할을 인터페이스로 만들고 구현체로 Fix(정액할인), Rate(비율할인) 클래스 생성

     

    5) 주문 도메인 객체 다이어그램

    회원저장소, 할인 정책을 변경하더라도 주문 서비스는 수정할 필요가 없다.

    역할들의 협력관계를 그대로 재사용 가능

     

     

     

     

    728x90
    댓글