Package Structure
개발에서 코드를 구성하고 관리하기 위한 방법론
Layered Architecture
엔티티 / 서비스 / 레파지토리 / DTO
V1: 계층 중심 패키지 구조
com.tenco.blog
├── controller/ # 계층별 분리
│ ├── BoardController
│ └── UserController
├── model/ # 모든 엔티티가 한 곳에
│ ├── Board
│ └── User
├── service/ # 모든 서비스 클래스가 한 곳에
│ ├── BoardService
├── repository/ # 모든 레파지토리가 한 곳에
│ ├── BoardNativeRepository
│ └── UserRepository
├── dto/ # 모든 DTO가 한 곳에
│ ├── BoardRequest
│ └── UserRequest
└── util/
└── MyDateUtil
// 문제점: Board 관련 파일들이 여러 패키지에 흩어져 있음
👍 각 계층의 독립성이 높아져 유지 보수가 용이
💀 계층 간 의존성이 높다 프로젝트 규모가 커지면 구조가 복잡해질 수 있다
전통적인 방법이지만 이렇게 해도 메인에 모아놓은 것보다는 우월하다고 볼 수 있다 현장에서는 계층중심구조를 많이 만나볼 수 있다고 한다
DDD, Domain Driven Design
도메인이란 문제영역 혹은 비즈니스 영역을 뜻한다
게시글 / 사용자 / 댓글 / 카테고리
V2. 도메인 중심 패키지 구조
com.tenco.blog
├── board/ # Board 도메인의 모든 것이 한 곳에
│ ├── Board # 엔티티
│ ├── BoardController # 컨트롤러
│ ├── BoardPersistRepository # 레파지토리
│ └── BoardRequest # DTO
├── user/ # User 도메인의 모든 것이 한 곳에
│ ├── User
│ ├── UserController
│ ├── UserRepository
│ └── UserRequest
└── utils/ # 공통 기능
└── MyDateUtil
// 장점: Board 관련된 모든 클래스가 board 패키지에 응집
👍변경에 유연하고 가독성이 높아진다
요새는 서비스 특성에 맞는 계층구조를 선택한다고 한다.