패키지구조) 계층중심 & 도메인중심

35 Isaiah·2025년 6월 20일

스프링부트

목록 보기
4/12
post-thumbnail

패키지 구조

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 패키지에 응집

👍변경에 유연하고 가독성이 높아진다

요새는 서비스 특성에 맞는 계층구조를 선택한다고 한다.

profile
개발자 지망생

0개의 댓글