티스토리 뷰

서론

- Spring의 기능을 쓰지 않고 순수한 Java로 프로젝트를 설계하기

- 순수 Java로 설계한 프로젝트에서 서비스를 확장해보기

- 이때, 객체지향의 원칙을 잘 준수 했는지 확인해보기

 


 

1. 프로젝트 생성

https://start.spring.io/

Dependency를 하나도 선택하지 않을 경우 기본으로 spring-boot-starter와 test 관련 라이브러리가 들어간다.

 

2. 비즈니스 요구사항

회원

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

주문과 할인 정책

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

 

3. 회원 도메인 설계

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

회원 도메인 협력 관계

기획자들도 볼수 있는 단계
서버를 실행하기 전에 볼 수 있는 단계

회원 객체 다이어그램

실제 인스턴스의 참조 관계. 회원 서비스: MemberServiceImpl

 

4. 회원 도메인 테스트 코드 작성

실행시 잘 작동하는것을 확인할 수 있다. 하지만 이 코드는 OCP의 원칙도, DIP의 원칙도 지키고 있지 않다.

MemberServiceImpl이 인터페이스(MemberRepository)와 구현체(MemoryMemberRepository)모두에 의존하기 때문이다. (DIP 위반)

 

일단 Spring의 기능을 안쓰고 순수 자바로 개발할 시, 객체지향의 원칙을 지키기 어렵다는 문제가 있다는것을 확인 했다. 

 

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

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

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

역할
역할+구현. 역할과 구현을 분리했기 때문에 구현 자유롭게 구현 객체를 조립할 수 있다.

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

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

객체 다이어그램은 클래스 다이어그램과 다르게 서비스를 실행 시, 실제로 New로 객체가 생성되서 동적으로 연관관계가 맺어지는 그림.

- 역할들의 협력관계를 그대로 재사용하므로 주문 서비스를 변경하지 않아도 된다.

 

5. 주문과 할인 도메인 테스트 코드 작성

테스트 실행 결과 잘 동작하는것을 확인했다.

 


 

꿀팁

- Interface의 구현체가 딱 1개 있을 경우 보통 뒤에 Impl을 붙인다. (OrderService -> OrderServiceImpl)

- 스프링이나 컨테이너의 도움없이 순수하게 자바코드로만 테스트하는것을 단위테스트라고 한다. 스프링을 키고, 데이터베이스에 접근하는 등의 복잡한 과정없이 진행하므로 속도가 훨씬 빠르다. 따라서 단위테스트를 잘 사용할 줄 알아야한다.

단위테스트(92ms)가 스프링테스트(295ms)보다 빠르다. 복잡해지면 속도 차이는 더 커질 것이다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함