프로젝트 초입에 프로젝트 패키지 구조에대한 논의를 하게됨.
계층구조냐 도메인구조냐 논의끝에 도메인구조로 하기로 결정함.
왜 도메인 구조를 선택하였냐면 기존 계층형구조에서는 웹을 계층으로 나누어 (controller, service, repository와 같은 층으로 나눔.)관리함.
하지만 이런식의 구조는 패키지에 너무많은 class파일들이 들어가기때문에 구분짓기가 쉽지 않음.
따라서 각 도메인별로 웹계층을 나누고 도메인 자체에 집중할 수있는 구조를 구현함.
.
├── java
│ └── com
│ └── nhnacademy
│ └── bookstorefront
│ ├── BookStoreFrontApplication.java
│ ├── global
│ │ └── config
│ │ └── FeignClientConfig.java
│ ├── coupon
│ │ ├── controller
│ │ │ └── CouponController.java
│ │ ├── domain
│ │ │ └── dto
│ │ │ ├── request
│ │ │ │ └── CouponCreateRequestDTO.java
│ │ │ └── response
│ │ │ └── CouponResponseDTO.java
│ │ ├── exception
│ │ ├── feignclient
│ │ │ └── CouponFeignClient.java
│ │ └── service
│ │ ├── CouponService.java
│ │ └── impl
│ │ └── CouponServiceImpl.java
│ ├── couponpolicy
│ │ ├── controller
│ │ │ └── CouponPolicyController.java
│ │ ├── domain
│ │ │ └── dto
│ │ │ ├── request
│ │ │ │ ├── CouponPolicyCreateRequestDTO.java
│ │ │ │ └── CouponPolicyUpdateRequestDTO.java
│ │ │ └── response
│ │ │ └── CouponPolicyResponseDTO.java
│ │ ├── exception
│ │ ├── feignclient
│ │ │ └── CouponPolicyServiceFeignClient.java
│ │ └── service
│ │ ├── CouponPolicyService.java
│ │ └── impl
│ │ └── CouponPolicyServiceImpl.java
구현된 패키지구조를 설명하자면 다음과 같음.
1. 구현된 패키지 구조에서 직관적으로 coupon과 couponpolicy도메인의 구성을 확인 할수 있음.
2. 도메인별로 디테일한 exception설정과 layer를 구성하여 기존에 계층형 패키지 구조보다 훨씬 보기쉽게 클래스파일관리가 가능함.
3. 최상위 폴더에서 도메인과 글로벌로 나누어서 글로벌에는 전체를 아우르는 config, exception, handler와 같은 설정을 해줄 수 있음.