# Spring Boot 구축 과정

**설치 및 구축 과정은**

[**https://wikidocs.net/160023**](https://wikidocs.net/160023) **를 참고합니다.**

# 01. 스프링 부트 설치

## 01. JDK 설치

<p class="callout info">- 자바로 만든 웹 프레임 워크이기 때문에 자바 설치가 필요</p>

**설치 링크 :** [**https://www.oracle.com/java/technologies/downloads/#jdk24-windows**](https://www.oracle.com/java/technologies/downloads/#jdk24-windows "JDK 설치")

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/fdt51AU7eAgRl7Fq-image.png)

<span style="background-color:rgb(251,238,184);">- 필자는 Windows에서 x64 installer 를 선택했다.</span>

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/i3XUz5AUZNzZ4MtC-image.png)

<p class="callout info">- 설치진행</p>

**설치 경로 :  C:\\Program Files\\Java\\jdk-24**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/GnK6IE8iui8nqAkb-image.png)

## 02. STS 설치 (Spring Tool Suite)

<p class="callout info">- 스프링 부트 프로그램을 작성할 수 있도록 도와주는 도구인 STS 설치</p>

**설치 링크 :** [**https://spring.io/tools**](https://spring.io/tools "설치 링크")

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/CcA7Lx0AwZbsFwjZ-image.png)

**위의 링크에서 해당되는 버전 다운로드**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/Hj4jmvd38iglVHwi-image.png)

**파일 다운로드 후 압축을 해제했다.**

**압축 해제 중에 경로를 찾을 수 없다면서 파일 몇개 오류가 발생했는데 그냥 무시해도 실행은 가능하다.**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/gdfUw3HjvPDXnDt2-image.png)

**설치 후 기본화면은 다음과 같다.**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/2vWZmrPkKamBFMhT-image.png)

**Create new Spring Starter Project 선택**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/YE5G5z2W6Zshhi06-image.png)

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/nWkp9yXm3LeHEUT9-image.png)

**다음으로 스프링부트의 버전을 선택한다.**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/P7hO6ur1itbuxwVs-image.png)

**위 설정을 마치면 우측 하단에 무언가를 import 한다는 로딩바가 생기고 프로젝트 생성이 완료된다.**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/zrgAfmXW1owc3nnz-image.png)

**데모 프로젝트가 생성됐다.**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/YdEPERaDdXGILZgo-image.png)

**하단의 오류 확인**<span style="white-space:pre-wrap;"> </span>**-&gt; 오류 구문 오른쪽클릭 -&gt; Quick Fix 선택**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/1e38NthSGLvRlymt-image.png)

**Finish를 선택하면 자동으로 문제 해결**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/EL8EaEoOCXyToDR6-image.png)

<p class="callout info">프로젝트의 기본 구조</p>

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/fhZXYQyWj5Qazqqb-image.png)

# 02. Controller 만들기

## <span style="white-space:pre-wrap;">01. 컨트롤러 만들기 </span>

**프로젝트를 생성했으니 이제 예시로 페이지를 만들어 보려한다.**

**http://localhost:8080/hello 라는 URL을 만들어 테스트할 것이며,**

**해당 요청을 받기 위해선 컨트롤러를 만들어서 사용하여야 한다.**

**\* 컨트롤러는 클라이언트에서 받은 요청을 관리하는 자바의 클래스이다.**  
  
  
**프로젝트의 메인 파일을 우클릭하여 Class를 새로 만들어 준다**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/zM8OHUpxjGPEDbRE-image.png)

**컨트롤러 명을 입력 후 생성해준다.**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/lqu3bWfnZwJ8DGAu-image.png)

**정상적으로 컨트롤러 클래스가 생성됨을 확인**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/kaXkLWjJSCtlGTii-image.png)

**위 코드는 그냥 기본 템플릿이므로 아래와 같이 내용을 추가해주자**

```java
package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello World";
    }
}
```

**\* 파이썬만 해보고 자바를 아직 몰라서 조금 헷갈린다.**

**@ 표시가 java에선 무슨 의미일까**

**-&gt; 어노테이션이라고 한다.**

**-&gt; 컴파일러, 런타임, 프레임워크에 "이 코드에 이런 의미가 있다." 알려주는 것**

**-&gt; 주석과는 다른 개념, 어노테이션은 컴파일러, 프레임워크가 읽고 동작을 바꾸기도 함**

**@Controller**

**-&gt; HelloController 클래스가 컨트롤러의 기능을 수행한다고 알려줌**

**@GetMapping("/hello")**

**-&gt; URL 요청이 발생하면 hello 메서드가 실행됨을 의미**

**-&gt; Get 방식의 URL 요청을 사용 -&gt; @GetMapping 사용**

**-&gt; Post 방식의 URL 요청을 사용 -&gt; @PostMapping 사용**

**@ResponseBody**

**-&gt; 메서드의 출력 결과가 문자열 그 자체임을 나타냄**

**-&gt; 해당 어노테이션이 없으면 "hello World"라는 html파일을 찾음**

**-&gt; 해당 어노테이션을 사용해 "hello World"라는 문자열 자체를 출력 (명령어로써 동작하지 않도록)**

**-&gt; 반대되는 예로 위의 "/hello" 는 @ResponseBody어노테이션이 적용되어 있지 않기 때문에 /hello 라는 html 파일을 찾아 '매핑'한다.**

**-&gt; 매핑한다. = 특정 URL 경로를 서버의 특정 메서드와 연결**

## 02. 로컬 서버 실행하기

**앞에서 사용자 요청을 철히하는 컨트롤러를 만들었으니 제대로 작동하는지 확인해보자**

**그러기 위해선 로컬 서버를 실행하여야 한다.**

**Boot Dashboard 기능에서 프로젝트를 선택한 후 재생버튼을 눌러주자.**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/54E0GX1JRadjomvr-image.png)

**로딩 마크가 돌아가면서 서버가 실행됨을 확인**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/WdlDntnlFGWsdvhK-image.png)

**이제 테스트를 위해 브라우저를 열고** [**http://localhost:8080/hello**](http://localhost:8080/hello "로컬호스트") **로 진입해보자**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-08/scaled-1680-/QjXGElKESTUFVfZR-image.png)

**정상적으로 웹서버가 구동되어, 접근이 가능함을 확인**

# 03. 스프링부트 도구 설치하기

<p class="callout info">**스프링 부트 라이브러리 설치**</p>

**웹 개발을 도와주는 스프링 부트의 도구(라이브러리)를 설치해보자**

**라이브러리 = 개발 시 자주 사용하는 코드를 모아 둔 것이라고 할 수 있다.**

## **01 . Srping Boot Devtools 설치**

**스프링 부트 Devtools 라이브러리를 설치하면 서버를 매번 재시작 하지 않고도 수정한 내용이 반영된다.**

**\* 보통은 서버코드를 수정할 경우 재시작을 하여야한다.**

<p class="callout success">예시</p>

**01. 운영 중인 웹 서비스에서 코드를 변경**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/NFx2EkkPscT8Oxzh-image.png)

**02. 코드 변경 후 웹 페이지 진입 시 변경사항이 적용되지 않음을 확인**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/yuHx4yLPDfW2xTL1-image.png)

<p class="callout info">Devtools 설치</p>

**01. 좌측 리스트에서 build.gradle에 진입 후 관련 Devtool 코드 삽입**

```java
developmentOnly 'org.springframework.boot:spring-boot-devtools'
```

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/BqQ5TNwtu1mtemma-image.png)**02. Refresh Gradle Project 를 선택하여 새로고침**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/CsuVvXyvZCGTAP7x-image.png)

**03.재실행을 통해 devtool 적용**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/3VOcIEsBTwPhEs0p-image.png)

**04. 코드 변경 후 저장하면 재실행 없이 적용됨을 확인**![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/bwQrHQ5bYBWW0Fap-image.png)

## **02. Lombok(롬복) 설치**

**프로그램을 만들면서 게시물과 관련된 데이터를 처리하기 위해 엔티티 클래스나 DTO 클래스를 사용하여야 하는데**

**그러기 위해서는 먼저 클래스들의 속성값을 읽고 저장하는 Getter, Setter 메서드를 만들어야함**

**직접 작성해도 무방하나 롬복을 사용하면 짧고 깔끔한 소스 코드 생성이 가능**

<p class="callout info">설치 과정</p>

**01. 설치 링크에서 롬복을 다운로드한다.**

**설치 링크 :** [https://projectlombok.org/download](https://projectlombok.org/download)

**02. 다운로드한 롬복.jar 의 경로를 복사**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/zsNPrIjxiMqlHG5A-image.png)

**03. win + r 키를 누르고 cmd 진입**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/J6P2RbT8NDOKOFVr-image.png)

**04. java -jar 명령어를 통해 롬복 설치 (cmd 창에서의 붙여넣기는 마우스 오른쪽 클릭)**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/WG3YHDvpe4xyrzH5-image.png)

**05. 롬복 설치 화면이 출력되며 이전에 설치한 STS가 설치된 경로를 탐색한다.**

**\*스캔이 끝나도 경로를 찾지 못할 시 Specify location을 통해 경로를 지정해준다.**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/uKKtXzmTKhF9AO6R-image.png)

**06. 설치 성공**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/OMwrIiddAbUoPuaM-image.png)

**07. STS 를 재실행 하고 build.gradle 파일 수정**

**을 해야하는데 STS 종료 후 다시 실행이 되지 않는다.**

**SpringToolSuite4.ini 파일에서 맨 마지막 줄의 lombok의 경로를 삭제하니 다시 실행이 되긴 하는데..**

<p class="callout success">해결법</p>

**.ini 파일에 --add-opens 플래그를 추가하여 Java 내부 모듈 접근을 허용하세요.**

**경로에 한글이 있으면 영어 경로로 변경하거나 상대 경로를 사용하세요. Lombok 버전이 Java 24를 지원하더라도 IDE 설정이 필요합니다.**

**라는 의견을 받았다 (grok)**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/Al4cRvEoXmaxIIPC-image.png)

**01. STS 설치경로의 ini 파일을 실행하여 -vmargs 부분과 -javaagent 부분을 수정한다.**

 **-vmargs 부분에 아래 두줄 추가**

**--add-opens=java.base/java.lang=ALL-UNNAMED**

**--add-opens=java.base/java.util=ALL-UNNAMED**

**-javaagent**<span style="white-space:pre-wrap;"> </span>**부분의 lombok.jar 경로를 상대경로로 변경**

**변경 전 : -javaagent:C:\\Users\\rkekw\\Desktop\\프로젝트\\개인 프로젝트\\2025-08-29 스프링부트 공부\\01.환경 구축\\02. STS - sts-4.31.0.RELEASE\\lombok.jar**

**변경 후 : -javaagent:lombok.jar**

**위의 두가지 항목을 변경해주면 정상적으로 실행이 가능하다.**

<p class="callout info">Lombok 설치 확인</p>

**01. com.example.demo 에서 클래스를 생성해준다.**

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/pYdLYlf1nL1jbsuf-image.png)

**02. 테스트용 코드를 넣고 실행한다.**

```java
package com.example.demo;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class HelloLombok {
    private String hello;
    private int lombok;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setHello("헬로");
        helloLombok.setLombok(5);

        System.out.println(helloLombok.getHello());
        System.out.println(helloLombok.getLombok());
    }
}
```

![image.png](https://www.ochidstudy.com/uploads/images/gallery/2025-09/scaled-1680-/PkE9LYkmpAOzfdX5-image.png)

**오류 없이 정상적으로 실행됨을 확인**

**\*Lombok이 설치되지 않으면 실행되지 않는 코드**

**Lombok을 사용하지 않았을 때의 코드**

```java
package com.example.demo;

public class HelloLombok {
    private String hello;
    private int lombok;

    public void setHello(String hello) {
        this.hello = hello;
    }

    public void setLombok(int lombok) {
        this.lombok = lombok;
    }

    public String getHello() {
        return this.hello;
    }

    public int getLombok() {
        return this.lombok;
    }

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setHello("헬로");
        helloLombok.setLombok(5);

        System.out.println(helloLombok.getHello());
        System.out.println(helloLombok.getLombok());
    }
}
```

**Lombok을 사용했을 때의 코드**

```java
package com.mysite.sbb; 
import lombok.Getter; 
import lombok.RequiredArgsConstructor; 

@RequiredArgsConstructor 
@Getter 
public class HelloLombok { 
    private final String hello; 
    private final int lombok; 

    public static void main(String[] args) { 
        HelloLombok helloLombok = new HelloLombok("헬로", 5); 
        System.out.println(helloLombok.getHello()); 
        System.out.println(helloLombok.getLombok()); 
    } 
}
```

**@Getter 와 RequiredArgsConstructor 어노테이션을 통해 코드를 간략하게 만들 수 있다.**

**@Getter - 선언한 변수를 가져오는 getter 메서드를 작성하지 않아도 컴파일 단계에서 처리**

**@RequiredArgsConstructor - 해당 속성을 필요로하는 생성자가 롬복에 의해 자동으로 생성**