# 계층형 구조 vs 도메인형 구조 비교
## ✅ 1. 계층형 구조 (Layered Architecture)
### 🔹 개념
- 기능(역할)을 기준으로 애플리케이션을 나누는 구조
- 일반적으로 아래와 같은 계층으로 구성:
- Controller (요청 처리)
- Service (비즈니스 로직)
- Repository (데이터 접근)
- Entity / DTO (모델, 데이터 전달)
### 📁 예시 디렉터리 구조
com.example.project
├── controller/
│ └── UserController.java
├── service/
│ └── UserService.java
├── repository/
│ └── UserRepository.java
├── entity/
│ └── User.java
└── dto/
└── UserDto.java
### ✅ 장점
- 단순하고 익숙한 구조
- 빠르게 개발 가능
- 역할이 명확하여 이해하기 쉬움
### ❌ 단점
- 도메인별 코드가 분산되어 응집도 낮음
- 협업 시 충돌이 자주 발생할 수 있음
- 프로젝트가 커질수록 유지보수 어려움
---
## ✅ 2. 도메인형 구조 (Domain-Centric Architecture)
### 🔹 개념
- 비즈니스 도메인(업무 영역)을 중심으로 구조를 구성
- 하나의 도메인 폴더에 관련된 모든 구성요소 포함
- 계층을 유지하면서도 도메인 단위로 응집도 높은 구조 설계
### 📁 예시 디렉터리 구조
com.example.project
└── user/
├── domain/
├── User.java
├── UserRepository.java
└── UserDomainService.java
├ application/
│ └── UserService.java
├ui/
│ └── UserController.java
├ infra/
│ └── JpaUserRepository.java
├dto/
├── UserRequestDto.java
└── UserResponseDto.java
### ✅ 장점
- 높은 응집도 (관련 로직이 한 폴더 안에 모임)
- 도메인 단위로 협업 가능 → 충돌 적음
- 유지보수, 테스트 용이
- 마이크로서비스 구조로의 확장 용이
### ❌ 단점
- 초반 설계 복잡도 ↑
- 작은 프로젝트에서는 과한 구조일 수 있음
- 익숙하지 않으면 진입장벽 있음
---
## 🔁 구조 비교 요약
| 항목 | 계층형 구조 | 도메인형 구조 |
|------|--------------|------------------|
| 기준 | 역할 중심 (기능 중심) | 도메인 중심 (업무 중심) |
| 구조 | 수평적 (Controller, Service 등) | 수직적 (User, Order 등 도메인 중심) |
| 코드 응집도 | 낮음 | 높음 |
| 협업 효율 | 낮음 (충돌 자주 발생) | 높음 (도메인 단위 분업 가능) |
| 유지보수 | 구조 커지면 복잡 | 구조가 커져도 관리 쉬움 |
| 테스트 | 단순 테스트 쉬움 | 도메인 단위 테스트 가능 |
| 추천 상황 | 단순 CRUD, 소규모 프로젝트 | 복잡한 로직, 협업 많은 대규모 프로젝트 |
---
## 🎯 결론
- **계층형 구조**는 빠르게 만들 수 있고 소규모 프로젝트나 CRUD 중심 로직에 적합하다.
- **도메인형 구조**는 도메인 응집도와 협업 효율을 높여주며, 복잡한 서비스나 대규모 팀 개발에 적합하다.
'스프링' 카테고리의 다른 글
뉴스피드 프로젝트 친구설정 (0) | 2025.04.08 |
---|---|
뉴스피드 프로젝트 친구 목록 정렬 정리 (0) | 2025.04.08 |
Spring Boot JPA @Column(name)으로 인한 user_name & userName 문제 해결 (0) | 2025.04.03 |
스케쥴 프로젝트 properties 와 gradle 설정 (0) | 2025.04.03 |
예외처리 (0) | 2025.04.03 |