250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- springboot
- jvm
- 스파르타코딩클럽 #사전캠프
- 메모리구조
- 스터디카페
- 깃
- 사전캠프
- 레퍼클래스
- 네트워크
- 내일배움캠프
- 계층형
- 스프링부트
- Til
- 도메인별
- Spring
- 프레임워크
- Java
- 스파르타코딩클럽
- 함바그
- 깃헙
- 패키지구조
- 스파르타사전캠프
- HTTP
- 캡슐화
- optional
- til #데이터베이스 #sql
- 자바
- 키오스크
- static
- 스파르타코딩클럽 #개발자 #백엔드
Archives
- Today
- Total
John's Code Journey
[패키지 구조] Spring 프로젝트, 도메인별 vs 계층형 어떤 게 더 좋을까? 본문
728x90
📦 스프링 프로젝트, 패키지 구조는 도메인별? 계층형?
Spring Boot로 프로젝트를 만들다 보면 꼭 고민하게 되는 것 중 하나가 패키지 구조이다.
“Controller는 controller에, Entity는 entity에… 이렇게 하면 되는 거 아닌가요?”
처음엔 그렇게 시작해도 괜찮지만, 프로젝트가 커질수록 이 구조가 불편해질 수 있음
그래서 오늘은 대표적인 두 가지 구조인
✅ 계층형 구조(Layered Structure) 와
✅ 도메인별 구조(Domain-based Structure) 를 비교해서 정리해봄
🧱 1. 계층형 패키지 구조
🔍 구조 예시
com.example.project
├── controller
├── service
├── repository
├── dto
├── entity
└── config
📌 특징
- 역할 중심으로 나눈 구조
- 각각의 계층이 어떤 일을 하는지 명확함
✅ 장점
- 초보자도 이해하기 쉽고 익숙함
- 많은 예제, 강의, 튜토리얼에서 사용
- 구조가 단순해서 빠르게 개발 시작 가능
❌ 단점
- 기능 하나를 개발할 때 여러 폴더를 돌아다녀야 함
→ 유지보수가 점점 힘들어짐 - 관련 코드가 분산되어 있어서 응집도가 떨어짐
🧩 2. 도메인(기능)별 패키지 구조
🔍 구조 예시
com.example.project
├── user
│ ├── UserController
│ ├── UserService
│ ├── UserRepository
│ ├── dto
│ └── User.java
├── schedule
│ ├── ScheduleController
│ ├── ScheduleService
│ ├── ScheduleRepository
│ ├── dto
│ └── Schedule.java
└── common
├── exception
└── config
📌 특징
- 기능(도메인) 단위로 묶은 구조
- User, Schedule, Post 등 각 기능이 독립적으로 구성됨
✅ 장점
- 관련 코드가 한 폴더에 모여 있어서 관리, 테스트, 유지보수 용이
- 도메인별로 팀이 나뉘어 협업하기 좋음
- 나중에 마이크로서비스 구조로 전환하기도 쉬움
❌ 단점
- 처음 구조를 잡을 때 다소 복잡할 수 있음
- 공통 로직이 중복되거나 위치가 애매할 수 있음
🆚 비교 정리
항목 | 계층형 구조 | 도메인별 구조 |
기준 | 역할(계층) 중심 | 기능(도메인) 중심 |
예시 | controller, service 등 | user, schedule 등 |
장점 | 익숙하고 단순함 | 응집도 높고 유지보수 쉬움 |
단점 | 관련 코드가 분산됨 | 설계 초기 어려움 |
추천 프로젝트 | 학습용, 소규모 | 실무, 대규모, 협업 프로젝트 |
🎯 어떤 구조를 써야 할까?
상황 | 추천 구조 |
스프링을 처음 배우는 중이라면 | ✅ 계층형 |
개인 프로젝트지만 기능이 여러 개라면 | 🔄 계층형 → 도메인별로 점진적 전환 |
팀 프로젝트, 대규모 기능 추가 예정 | ✅ 도메인별 |
추후 마이크로서비스 전환 고려 | ✅ 도메인별 |
✏️ 마무리
작은 프로젝트일 땐 계층형이 편할 수 있지만,
프로젝트가 커질수록 도메인별 구조가 훨씬 유리합니다.
중요한 건 구조가 "정답"이 아니라
👉 "프로젝트와 팀에 맞는 방향을 선택하는 것" 이라는 점!
구조를 잘 잡으면 유지보수가 편하고,
나중에 기능 추가나 리팩토링할 때 진짜 큰 도움이 된다고 함 !!!

'IT공부 > Spring Boot' 카테고리의 다른 글
[Spring Boot] 개발 순서 가이드 (0) | 2025.05.09 |
---|---|
[Spring Boot] Validation 검증 (0) | 2025.04.28 |
[Spring Boot] Persistence Context 영속성 컨텍스트 (0) | 2025.04.17 |
[Spring Boot] 생성일 자동 설정 비교 (1) | 2025.04.08 |
[Spring Boot] IoC/DI (0) | 2025.04.02 |