Spring Boot 구축 과정

설치 및 구축 과정은

https://wikidocs.net/160023 를 참고합니다.

01. 스프링 부트 설치

01. JDK 설치

- 자바로 만든 웹 프레임 워크이기 때문에 자바 설치가 필요

설치 링크 : https://www.oracle.com/java/technologies/downloads/#jdk24-windows

image.png

- 필자는 Windows에서 x64 installer 를 선택했다.

image.png

- 설치진행

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

image.png


02. STS 설치 (Spring Tool Suite)

- 스프링 부트 프로그램을 작성할 수 있도록 도와주는 도구인 STS 설치

설치 링크 : https://spring.io/tools

image.png

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

image.png

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

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

image.png

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

image.png

Create new Spring Starter Project 선택

image.png


image.png

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

image.png

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

image.png

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

image.png

하단의 오류 확인 -> 오류 구문 오른쪽클릭 -> Quick Fix 선택

image.png

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

image.png

프로젝트의 기본 구조

image.png



02. Controller 만들기

01. 컨트롤러 만들기

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

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

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

* 컨트롤러는 클라이언트에서 받은 요청을 관리하는 자바의 클래스이다.


프로젝트의 메인 파일을 우클릭하여 Class를 새로 만들어 준다

image.png

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

image.png

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

image.png

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


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에선 무슨 의미일까

-> 어노테이션이라고 한다.

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

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

@Controller

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

@GetMapping("/hello")

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

-> Get 방식의 URL 요청을 사용 -> @GetMapping 사용

-> Post 방식의 URL 요청을 사용 -> @PostMapping 사용

@ResponseBody

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

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

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

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

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



02. 로컬 서버 실행하기

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

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

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

image.png

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

image.png

이제 테스트를 위해 브라우저를 열고 http://localhost:8080/hello 로 진입해보자

image.png

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




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

스프링 부트 라이브러리 설치

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

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

01 . Srping Boot Devtools 설치

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

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

예시

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

image.png

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

image.png

Devtools 설치

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

developmentOnly 'org.springframework.boot:spring-boot-devtools'
image.png

02. Refresh Gradle Project 를 선택하여 새로고침

image.png

03.재실행을 통해 devtool 적용

image.png

04. 코드 변경 후 저장하면 재실행 없이 적용됨을 확인image.png

02. Lombok(롬복) 설치

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

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

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

설치 과정

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

설치 링크 : https://projectlombok.org/download

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

image.png

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

image.png

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

image.png

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

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

image.png

06. 설치 성공

image.png

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

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

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

해결법

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

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

라는 의견을 받았다 (grok)

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 부분의 lombok.jar 경로를 상대경로로 변경

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

변경 후 : -javaagent:lombok.jar

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

Lombok 설치 확인

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

image.png

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

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

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

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


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

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을 사용했을 때의 코드

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 - 해당 속성을 필요로하는 생성자가 롬복에 의해 자동으로 생성