-
계층별, 기능별 패키지 구성JAVA/Java 2021. 12. 12. 17:45
프로젝트를 진행하다 보면 패키지를 어떻게 구성할 것인가에 고민이 생긴다.
프로젝트의 패키지 구성은 계층별, 기능별 구성으로 나눌 수 있다.
계층별 구성
자바 계층을 나누자면 web layer, service layer, repository layer로 나뉠 수 있다.
① Web Layer (Presentation Layer) : 컨트롤러와 뷰 템플릿 영역으로 외부 요청과 응답에 관한 영역
- 여기서 사용자에게 보여지는 영역과 정보를 주고 받기 위해서 DTO를 사용 한다.
② Service Layer (Business Layer) : 도메인모델과 요청의 적합성 검증 및 트랜잭션 관리 (비지니스 로직 구현 파트는 아니다)
- 상태와 행위를 갖는 Domain계층 에 메세지를 전달하는 역할을 수행한다.
- 프레젠테이션 영역과 데이터접근 영역이 직접적으로 통신하지 않도록 중간다리 역할을 해준다.
③ Repository Layer (Data Access Layer) : DB와 직접적인 관계를 맺고 정보를 가져온다.
├── 🗂backend
├── config├── controller
├── service
├── domain
├── dto
└── repository계층별로 나눈 프로젝트 패키지의 구조를 나타내면 위와 같다.
기능별 구성
클래스의 기능과 역할에 따라서 패키지를 구성하는 것이다. 예를 들어 User의 정보를 관여하는 패키지를 구성한다면, User패키지 안에 UserEntity, UserService, UserDTO, UserRepository가 포함되어 구성되게 된다. 프로젝트가 커질수록 패키지 안의 클래스 수가 증가하기 때문에 기능별 구성이 재사용성이 좋고 Package Principle을 잘 지키기는 이점이 있어 많이 사용된다.
├── 🗂backend
├── common├── user
| ├── User
| ├── UserController
| ├── UserService
| └── UserRepository
└── post
├── Post
├── PostController
├── PostService
└── PostRepository
클린코드 작성을 위한 패키지 구성 (기능별 + 계층별)
클린코드를 작성하기 위해서 기능별, 계층별 구조를 모두 합하여 작성하는 방법도 존재한다.
ⓐ 계층별로 나누고 기능별로 나누기
├── 🗂backend
├── domain| ├── user
| | └── User
| ├── post
| | └── Post
└── service
├── user
| └── UserService
├── post
└── PostService
ⓑ 기능별로 나누고 계층별로 나누기
├── 🗂backend
├── User| ├── domain
| | └── User
| ├── service
| | └── UserService
└── Post
├── domain
| └── Post
├── service
└── PostService
(참고한 사이트)
https://ssowonny.medium.com/package-by-feature-in-clean-architecture-projects-e14d25e3905e
https://devlog-wjdrbs96.tistory.com/209https://sehun-kim.github.io/sehun/tdd/
https://sehun-kim.github.io/sehun/tdd/
https://youngjinmo.github.io/2021/04/spring-web-layer/
https://cheese10yun.github.io/spring-guide-directory/
'JAVA > Java' 카테고리의 다른 글
Refactoring ① : 첫번째 예제 (0) 2021.12.17 DTO와 VO 그리고 Entity (0) 2021.12.13 Setter의 사용 금지 (0) 2021.12.13 객체지향 생활 체조 (0) 2021.12.12 Java Code Convention ( + Google Java Style Guide) (0) 2021.12.11