Spring Boot는 빠르고 효율적인 웹 애플리케이션 개발을 위해 널리 사용되는 프레임워크입니다. 그러나 입문자나 프레임워크 전환을 고민하는 개발자에게는 Spring Boot 프로젝트의 디렉터리 구조가 다소 생소할 수 있습니다.
Spring Boot의 기본 프로젝트 구조를 상세히 설명하고, 각 디렉터리의 역할과 실무 팁을 함께 소개합니다.
1. 기본 프로젝트 구조 개요
Spring Initializr나 IntelliJ로 생성한 기본 구조는 다음과 같습니다.
src
└── main
├── java
│ └── com.example.demo
│ ├── DemoApplication.java
│ └── controller
│ └── service
│ └── repository
├── resources
│ ├── application.yml
│ ├── static
│ ├── templates
│ └── messages.properties
└── test
└── java
└── com.example.demo
└── DemoApplicationTests.java
이 구조는 Maven이나 Gradle 프로젝트에서도 거의 동일하게 유지됩니다. 각 폴더의 의미를 아래에서 자세히 살펴보겠습니다.
2. 주요 디렉터리 설명
2.1 src/main/java
Java 소스 코드가 위치하는 디렉터리입니다. 일반적으로 패키지 기준으로 도메인을 나누어 관리합니다.
- Application 클래스:
@SpringBootApplication
이 붙은 메인 클래스(DemoApplication.java)가 위치합니다. - Controller: REST API나 Web Controller를 담당하며,
@RestController
또는@Controller
를 사용합니다. - Service: 비즈니스 로직을 구현하는 레이어로, 보통
@Service
를 붙입니다. - Repository: JPA, MyBatis 등 DB 연동과 관련된 코드가 위치합니다.
@Repository
사용.
2.2 src/main/resources
설정 파일 및 정적 리소스, HTML 템플릿 등을 관리하는 디렉터리입니다.
- application.yml / application.properties: Spring Boot 설정 파일
- static: 정적 리소스(css, js, 이미지 등)
- templates: Thymeleaf, Mustache 등 템플릿 엔진이 HTML을 렌더링하는 곳
- messages.properties: 다국어 메시지를 관리하는 파일
2.3 src/test/java
테스트 코드가 들어가는 공간입니다. 기본적으로 JUnit 기반의 단위 테스트 또는 통합 테스트가 이곳에 작성됩니다.
@SpringBootTest
로 전체 애플리케이션 컨텍스트를 로딩한 통합 테스트 가능@MockBean
,@WebMvcTest
를 활용해 단위 테스트 분리 가능
3. 실무에서의 구조 확장 팁
기본 구조에서 프로젝트 규모가 커지면 다음과 같은 확장이 필요할 수 있습니다.
- 패키지 분리:
domain
,dto
,config
,exception
등의 패키지를 도입 - 모듈화: 멀티 모듈 구조로
core
,api
,batch
등을 분리 - API 버전 관리:
controller.v1
,controller.v2
등으로 REST 버전 구분
4. 구조를 이해하면 설계가 보인다
Spring Boot 프로젝트는 Convention over Configuration 철학에 따라 구조가 명확하게 정의되어 있습니다. 구조를 잘 이해하는 것이 유지보수성과 확장성에서 큰 차이를 만듭니다. 특히 팀 단위로 협업할 때는 구조를 표준화하는 것이 생산성을 높이는 핵심이 됩니다.
'개발 > JAVA' 카테고리의 다른 글
Spring Boot로 Hello World REST API 만들기 (0) | 2025.09.16 |
---|---|
application.properties와 application.yml 설정하기 - Spring Boot 설정 파일 완전 정복 (0) | 2025.09.14 |
Gradle vs Maven 빌드 도구 비교 및 설정 가이드 (1) | 2025.09.12 |
IntelliJ IDEA로 Spring Boot 프로젝트 시작하기: 실무 개발자의 노하우 정리 (0) | 2025.09.11 |
@RestController vs @Controller – Spring MVC에서의 차이 완전 정리 (0) | 2025.09.10 |