스프링 부트 프로젝트 생성부터 실행까지 (Gradle vs Maven, 설정, 라이브러리 구조 완벽 정리!)

2025. 8. 4. 21:59Spring

1️⃣ 프로젝트 생성 (Spring Initializr)

스프링 부트 프로젝트는 https://start.spring.io/에서 생성합니다.

  • Project: Gradle (요즘은 Gradle이 더 많이 쓰임)
  • Language: Java
  • Spring Boot: 최신 버전 선택
  • Dependencies:
    • Spring Web (웹 애플리케이션 개발)
    • Thymeleaf (템플릿 엔진)

다운로드 후 압축을 풀고 IntelliJ IDEA에서 열어줍니다.


2️⃣ Gradle vs Maven (빌드 도구 차이)

스프링 부트 프로젝트를 만들 때 Gradle과 Maven 중 하나를 선택할 수 있습니다.

✅ Maven

  • XML 기반 설정 (pom.xml)
  • 오래된 표준, 안정적
  • 설정이 직관적이지만 코드가 길어짐

✅ Gradle

  • Groovy/Kotlin DSL 기반 (build.gradle)
  • 설정이 간결하고 속도 빠름
  • 멀티 모듈 프로젝트에서 관리 용이
  • 최근 스프링 부트에서는 Gradle이 더 많이 사용

👉 결론: 신규 프로젝트는 Gradle을 권장합니다.


3️⃣ IntelliJ 설정 (Gradle 대신 IDEA로 실행)

Gradle을 통해 실행하면 빌드 과정이 느릴 수 있습니다.

👉 빠른 실행을 위해 IntelliJ 자체 빌드로 변경:

  1. File → Settings → Build, Execution, Deployment → Build Tools → Gradle
    • 빌드 및 실행 → IntelliJ IDEA
    • 테스트 실행 → IntelliJ IDEA

이렇게 설정하면 Gradle을 거치지 않고 바로 실행되므로 속도가 빨라집니다.


4️⃣ 라이브러리 구조 이해하기 (External Libraries)

스프링 부트는 "스타터" 라이브러리를 제공해 개발자가 직접 하나하나 의존성을 추가하지 않아도 됩니다.

예를 들어, spring-boot-starter-web 하나를 추가하면 내부적으로 Tomcat, Spring MVC까지 자동으로 들어옵니다.

주요 스타터 라이브러리:

  • spring-boot-starter-web
    • Tomcat (웹 서버)
    • Spring Web MVC
  • spring-boot-starter-thymeleaf
    • Thymeleaf 템플릿 엔진
  • spring-boot-starter (공통)
    • 스프링 부트 + 스프링 코어 + 로깅 (Logback)
  • spring-boot-starter-test
    • JUnit, Mockito 등 테스트 라이브러리

즉, 우리가 직접 Tomcat을 설치할 필요 없이, Spring Web만 추가해도 자동 설정됩니다.


5️⃣ 정적 페이지 테스트 (index.html)

정상적으로 서버가 켜지는지 확인하기 위해 정적 페이지를 하나 추가합니다.

src/main/resources/static/index.html 파일을 만들고 아래 코드를 작성합니다.

 
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Document</title>
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>

 

서버를 실행하면 http://localhost:8080/에서 Hello와 하이퍼링크가 보이면 성공입니다.

📝 참고: static 폴더는 정적 리소스를 제공하는 폴더로, 단순 HTML/CSS/JS 파일 테스트용입니다.

 


6️⃣ Thymeleaf와 Controller 연결

이제 동적인 페이지를 위해 컨트롤러를 작성합니다.

package hello.hello_spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data", "hello!!");
        return "hello"; // templates/hello.html을 렌더링
    }
}

 

그리고 src/main/resources/templates/hello.html 파일을 만듭니다.

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
<p th:text="${data}">여기에 데이터 출력</p>
</body>
</html>

브라우저에서 http://localhost:8080/hello를 열면 hello!!가 출력됩니다.


7️⃣ 뷰 리졸버(View Resolver) 동작 원리

컨트롤러에서 문자열을 리턴하면 **뷰 리졸버(ViewResolver)**가 동작합니다.

bash
"hello" → templates/hello.html (렌더링)

스프링 부트는 기본적으로

bash
resources/templates/ + {ViewName} + .html

규칙으로 매핑합니다.


8️⃣ @GetMapping 어노테이션 역할

@GetMapping("hello")는 HTTP GET 요청을 매핑합니다.
예를 들어, 브라우저에서 /hello로 접근하면 해당 메서드가 실행됩니다.

  • @GetMapping → GET 요청 (조회)
  • @PostMapping → POST 요청 (등록)
  • @RequestMapping → GET, POST 등 다양한 요청 매핑 가능

9️⃣ JAR 파일로 서버 실행 (명령어 실행)

스프링 부트는 내장 Tomcat 서버가 포함된 실행 가능한 JAR 파일로 빌드됩니다.

빌드

bash
./gradlew clean build

실행 (cmd 또는 터미널에서)

bash
cd build/libs
java -jar hello-spring-0.0.1-SNAPSHOT.jar

Tomcat started on port 8080 메시지가 뜨면 정상 실행입니다.


 

📌 참고 자료