[SpringBoot] SpringBoot 프로젝트 구조

반응형

 

 

스프링 부트로 만든 프로젝트의 기본 디렉토리 구조와, 각 파일의 역할을 알아보자 .

아래와 같은 아주 기본적인 프로젝트를 생성했다.

 

 

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
    • 애플리케이션 설정 파일.
    • 환경변수, 데이터베이스 연결, 서버 포트, 로깅 수준 등 여러 설정을 정의할 수 있다.

 

resources 의 static에 index.html을 작성하였다.

 

 

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.gradleGradle이라는 빌드 도구가 사용하는 설정 파일이다.
Gradle은 프로젝트를 만들고 실행하기 위해 필요한 일을 대신 처리해주는 도구라고 생각하면 편하다.


1. Gradle이란?

  • Gradle은 프로그래밍 작업을 자동화해주는 도구.
  • 소스 코드를 컴파일, 필요한 파일을 다운로드, 프로젝트를 패키징(묶기)하는 일을 도와준다.
  • 이전에 많이 사용되던 AntMaven보다 더 빠르고 유연하게 동작한다.

2. build.gradle 파일이 하는 일

  • Gradle의 설정 파일로, 여기서 프로젝트에 필요한 것들을 적어둔다.
  • 예를 들어:
    • 플러그인 추가 (특별한 기능을 추가하는 도구)
    • 라이브러리 설치 (프로젝트에 필요한 외부 기능)
plugins {
    id 'java'  // 자바 프로젝트라는 걸 알려줌
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web' // 웹 서버 라이브러리
}

3. Groovy란?

  • Groovy는 Gradle의 스크립트를 작성하는 데 쓰는 간단한 언어.
  • 문법이 간단하고 읽기 쉽기 때문에 개발자가 쉽게 설정을 쓸 수 있다.

4. 빌드 도구가 하는 일

빌드 도구는 코드를 실행 가능한 형태로 만드는 일을 자동화해준다.
예를 들어, Gradle은 다음을 자동으로 실행한다:

  1. 코드 컴파일: 우리가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 변환.
  2. 라이브러리 다운로드: 프로젝트에 필요한 외부 기능(라이브러리)을 인터넷에서 가져옴.
  3. 파일 묶기: 완성된 코드를 실행 파일(jar 파일)로 압축.
  4. 배포: 완성된 파일을 서버에 올려서 실행 준비.

5. 실생활 비유

Gradle은 요리사 이다:

  • build.gradle 파일은 레시피에 해당한다.
    • 어떤 재료(라이브러리)를 쓸지.
    • 어떤 도구(플러그인)가 필요한지.
  • Gradle이 이 레시피를 읽고 **요리(컴파일, 다운로드, 패키징)**를 만든다.
  • 결과물은 우리가 서버에서 실행할 수 있는 **완성된 요리(jar 파일)**가 된다!

 

 


 

스프링 프로젝트의 흐름

  1. 클라이언트 요청
    • 사용자가 API를 호출하면, BasicController에서 해당 요청을 처리한다.
    • 예: @GetMapping("/hello") 같은 메서드를 통해 "Hello, World!"를 반환.
  2. 컨트롤러 역할
    • BasicController는 요청을 처리하고 필요한 데이터를 반환하거나, 서비스 로직을 호출하여 결과를 전달한다.
  3. 뷰 렌더링 (옵션)
    • templates/에 HTML 파일이 있다면, 컨트롤러에서 해당 파일을 뷰로 렌더링할 수 있다.
    • 예: return "index";는 templates/index.html을 렌더링한다.
  4. 정적 리소스 제공
    • static/ 디렉토리에 있는 파일은 /css/style.css와 같이 URL로 직접 접근할 수 있다.

 

반응형