스프링 부트로 만든 프로젝트의 기본 디렉토리 구조와, 각 파일의 역할을 알아보자 .
아래와 같은 아주 기본적인 프로젝트를 생성했다.
1. src/main/java
- Java 코드가 위치하는 디렉토리로, 아래와 같은 서브 패키지 구조로 구성된다. 지금은 간단하게 작성하여 나뉘어져있지 않지만, 실제 프로젝트에서 사용되는 구조에는 다음과 같은 것들이 있다.
- controller/: REST API 또는 MVC 컨트롤러 클래스.
- service/: 비즈니스 로직을 처리하는 서비스 계층.
- repository/: 데이터베이스와의 상호작용을 처리하는 인터페이스(JpaRepository, CrudRepository).
- domain/ (또는 model/): 데이터베이스 엔티티 클래스 및 DTO, VO 등이 위치.
- ProjectApplication.java: 메인 실행 클래스(스프링 부트 애플리케이션의 진입점)
여기서 중요한 것은
- ProjectApplication.java: 메인 실행 클래스(스프링 부트 애플리케이션의 진입점)
이다. 내가 demo로 프로젝트 명을 생성하였기 때문에 스프링에서 자동으로 DemoApplication.java 파일을 만들어주었는데, 이렇게 프로젝트명+Application.java 로 되어있는 파일이 바로 '스프링 부트로 만든 프로그램의 시작을 담당하는 파일' 이다.
// 이와 같은 파일이 자동으로 생성되어 있다.
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
이 프로젝트명 + Application 클래스에는 반드시 @SpringBootApplication 애너테이션이 적용되어 있어야 한다. @SpringBootApplication 애너테이션을 통해 스프링 부트 애플리케이션을 시작할 수 있기 때문이다.
2. src/main/resources
- static/
- 정적 리소스(HTML, CSS, JavaScript, 이미지 파일 등)가 위치한다.
- /static 디렉토리의 파일들은 기본적으로 / 경로로 매핑된다.
- templates/
- 서버 사이드 렌더링에 사용하는 템플릿 파일(예: Thymeleaf, Freemarker 등)이 위치한다.
- 주로 HTML 파일이 들어간다.
- @Controller와 함께 동작하며 뷰를 반환할 때 사용된다.
- application.properties
- 애플리케이션 설정 파일.
- 환경변수, 데이터베이스 연결, 서버 포트, 로깅 수준 등 여러 설정을 정의할 수 있다.
src/main/resources 디렉토리는 자바 파일을 제외한 HTML, CSS, 자바스크립트, 환경 파일 등을 저장하는 곳이다. 위에서 템플릿 파일이란 자바 코드를 삽입할 수 있는 HTML 형식의 파일을 뜻하는데, 스프링부트에서 생성한 자바 객체를 HTML 형태로 출력할 수 있다.
3. src/test/java
- 테스트 코드를 작성하는 디렉토리이다.
- 기본적으로 Spring Boot는 JUnit을 통해 테스트를 지원한다.
- DemoApplicationTests 같은 클래스가 자동 생성되어 스프링 컨텍스트가 제대로 로드되는지 확인하는 기본 테스트 코드가 포함된다.
4. 루트 디렉토리
- build.gradle
- Gradle 빌드 스크립트.
- 의존성과 빌드 설정을 정의한다.
- gradlew 및 gradlew.bat
- Gradle Wrapper 파일로, Gradle이 설치되지 않은 시스템에서도 Gradle 빌드 스크립트를 실행할 수 있도록 도와준다.
- .gitignore
- Git에서 버전 관리하지 않을 파일들을 정의한다(예: build/, .idea/ 등).
여기서 중요한 것은 그래들이다. build.gradle은 Gradle이라는 빌드 도구가 사용하는 설정 파일이다.
Gradle은 프로젝트를 만들고 실행하기 위해 필요한 일을 대신 처리해주는 도구라고 생각하면 편하다.
1. Gradle이란?
- Gradle은 프로그래밍 작업을 자동화해주는 도구.
- 소스 코드를 컴파일, 필요한 파일을 다운로드, 프로젝트를 패키징(묶기)하는 일을 도와준다.
- 이전에 많이 사용되던 Ant나 Maven보다 더 빠르고 유연하게 동작한다.
2. build.gradle 파일이 하는 일
- Gradle의 설정 파일로, 여기서 프로젝트에 필요한 것들을 적어둔다.
- 예를 들어:
- 플러그인 추가 (특별한 기능을 추가하는 도구)
- 라이브러리 설치 (프로젝트에 필요한 외부 기능)
plugins {
id 'java' // 자바 프로젝트라는 걸 알려줌
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web' // 웹 서버 라이브러리
}
3. Groovy란?
- Groovy는 Gradle의 스크립트를 작성하는 데 쓰는 간단한 언어.
- 문법이 간단하고 읽기 쉽기 때문에 개발자가 쉽게 설정을 쓸 수 있다.
4. 빌드 도구가 하는 일
빌드 도구는 코드를 실행 가능한 형태로 만드는 일을 자동화해준다.
예를 들어, Gradle은 다음을 자동으로 실행한다:
- 코드 컴파일: 우리가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 변환.
- 라이브러리 다운로드: 프로젝트에 필요한 외부 기능(라이브러리)을 인터넷에서 가져옴.
- 파일 묶기: 완성된 코드를 실행 파일(jar 파일)로 압축.
- 배포: 완성된 파일을 서버에 올려서 실행 준비.
5. 실생활 비유
Gradle은 요리사 이다:
- build.gradle 파일은 레시피에 해당한다.
- 어떤 재료(라이브러리)를 쓸지.
- 어떤 도구(플러그인)가 필요한지.
- Gradle이 이 레시피를 읽고 **요리(컴파일, 다운로드, 패키징)**를 만든다.
- 결과물은 우리가 서버에서 실행할 수 있는 **완성된 요리(jar 파일)**가 된다!
스프링 프로젝트의 흐름
- 클라이언트 요청
- 사용자가 API를 호출하면, BasicController에서 해당 요청을 처리한다.
- 예: @GetMapping("/hello") 같은 메서드를 통해 "Hello, World!"를 반환.
- 컨트롤러 역할
- BasicController는 요청을 처리하고 필요한 데이터를 반환하거나, 서비스 로직을 호출하여 결과를 전달한다.
- 뷰 렌더링 (옵션)
- templates/에 HTML 파일이 있다면, 컨트롤러에서 해당 파일을 뷰로 렌더링할 수 있다.
- 예: return "index";는 templates/index.html을 렌더링한다.
- 정적 리소스 제공
- static/ 디렉토리에 있는 파일은 /css/style.css와 같이 URL로 직접 접근할 수 있다.
'Java > SpringBoot' 카테고리의 다른 글
[SpringBoot] Maria DB 로컬 호스팅 및 JDBC, JPA, lombok // CamelCase 유지하기 (1) | 2025.01.05 |
---|---|
[SpringBoot] Spring Boot Devtools - auto represh (0) | 2024.12.29 |