스프링 부트(Spring Boot)는 스프링 프레임워크의 복잡한 설정을 간소화하고, 빠르게 애플리케이션을 개발할 수 있도록 도와주는 프레임워크입니다. 스프링 부트 프로젝트의 기본 구조는 유지보수와 확장성을 고려한 계층형 구조(Hierarchical Structure)를 따르며, 일반적으로 다음과 같은 형태로 구성됩니다.
1. 프로젝트 루트 디렉토리
- pom.xml 또는 build.gradle: Maven 또는 Gradle 빌드 설정 파일로, 의존성 관리, 빌드 설정 등을 정의합니다.
- src/main/java: 실제 Java 코드가 위치하는 디렉토리입니다.
- src/main/resources: 설정 파일과 정적 리소스(html, css, js 등)를 포함합니다.
- src/test/java: 테스트 코드를 작성하는 디렉토리입니다.
2. 패키지 구조 (Java 코드)
스프링 부트는 관례에 따라 **애플리케이션 시작 클래스(Application Class)**가 최상위 패키지에 위치하며, 그 하위에 기능별로 패키지를 나누어 구성하는 것이 일반적입니다.
예시 구조:
com.example.project
│
├── ProjectApplication.java // 스프링 부트 메인 클래스 (@SpringBootApplication) │
├── controller // 웹 요청을 처리하는 클래스 (@RestController 또는 @Controller)
├── service // 비즈니스 로직을 처리하는 클래스 (@Service)
├── repository // 데이터베이스 접근을 처리하는 클래스 (@Repository, JpaRepository 등)
├── domain // 엔티티 클래스 (DB 테이블과 매핑) (@Entity)
├── dto // 계층 간 데이터 전달을 위한 객체 (Data Transfer Object)
├── config // 설정 관련 클래스 (Security, WebMvc 설정 등)
└── exception // 예외 처리 클래스 (@ControllerAdvice 등)
3. 리소스 디렉토리 (src/main/resources)
- application.properties 또는 application.yml: 애플리케이션의 설정 정보를 담습니다 (포트 번호, DB 연결정보, 로그 설정 등).
- static/: 정적 리소스(html, js, css 등)가 위치하는 곳입니다.
- templates/: Thymeleaf, Mustache 등 템플릿 엔진이 사용하는 뷰 파일들이 위치합니다.
- messages.properties: 국제화(i18n)를 위한 메시지 파일입니다.
4. 기본 실행 흐름
- 요청 수신: @RestController가 HTTP 요청을 받습니다.
- 서비스 호출: 컨트롤러는 비즈니스 로직을 @Service 클래스에 위임합니다.
- 데이터 처리: 서비스는 필요에 따라 @Repository를 통해 DB에 접근하거나, 외부 API 호출, 로직을 처리합니다.
- 응답 반환: 최종 결과를 DTO로 가공해 클라이언트에 응답합니다.
5. 특징
- 구조가 명확하여 역할 분담이 쉽고 유지보수가 용이합니다.
- 기능별로 패키지를 나누면 규모가 커져도 관리하기 좋습니다.
- Spring Boot의 자동 설정 기능 덕분에 빠르게 실행 가능한 애플리케이션을 만들 수 있습니다.
이러한 구조는 팀 협업, 코드 테스트, 유지보수, 확장성 측면에서 많은 이점을 제공하며, 스프링 부트를 사용하는 대부분의 기업이나 프로젝트에서 표준으로 채택하고 있습니다.