본문 바로가기
Backend - Java Spring/Spring Core

[SpringCore 핵심원리] 설계

by VictorMeredith 2024. 2. 16.

1. 비즈니스 요구사항 

- 회원

  : 회원을 가입하고 조회할 수 있따.

  : 회원에는 일반과 VIP 두가지 등급이 있다.

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

 

- 주문과 할인 정책

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

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

  : VIP는 1000원 할인해주는 고정 금액 할인을 적용(TBD)

  : 할인정책은 변경 가능성이 높다.

 

2. 설계

- 회원 도메인 : 클라이언트 -> 회원서비스 -> 회원저장소(interface)

- 인터페이스 설계가 핵심

- Service에서 MemberRepository memberRepository = new MemoryMemberRepository(); 

- new ~ 부분이 DIP 위반이다. 구현체를 알아야하기 때문이다.

 

- 서비스가 주문생성 -> 회원조회(회원 저장소) -> 그걸 가지고 할인정책역할에 물어봄 -> 반환값을 가져다가 클라이언트에게 반환함

 

- 역할과 구현체를 제대로 구분해서 설계하면 역할들의 협력관계를 그대로 재사용 할 수 있다!

- 경험기반 : 오늘 개발한 React Component의 UI 중 DialogSelect -> Mui Native Select 로 변경하는 건이 있었는데, 인터페이스만 잘 유지된다면 역할은 어차피 Multi Select의 역할만 하는거니, 구현체를 Dialog에서 Native Select로 변경해도 부모컴포넌트의 사용으로부터 협력관계를 그대로 재사용할 수 있다는 거다! 물론 Dialog의 UiState들은 모두 zustand에 들어있어서 변경을 많이 하긴 해야했지만 어쨌든 개념은 그렇다. UI모듈의 인터페이스를 역할에 따라 잘 설계한다면 생김새나 구조가 바뀌더라도 인터페이스 기반으로 구현체인 UI모듈 그 자체만 변경하면 된다!

 

 

다음시간에 이어서

댓글