Skip to main content

1장 - 스프링부트 개발 준비!

About 4 minJavaSpringAWScrashcoursejavajdkjdk8streamspringspringframeworkspringbootawsaws-ec2

1장 - 스프링부트 개발 준비! 관련


1장 - 스프링부트 개발 준비!

점프 투 스프링부트 - WikiDocs

시작이 반이다.

여러분은 이미 스프링부트를 향해 첫걸음을 내디뎠으니 성공을 절반 이룬 셈이다. 축하한다. 이 책은 처음부터 끝까지 모든 내용이 이어진다. 따라서 이 책은 흐름이 중요하며 그중에서도 시작이 가장 중요하다. 이 장에서는 스프링부트를 본격적으로 개발하기 전에 준비해야 할 것을 알아보자.

스프링부트 개발을 시작하기 전에는 무엇을 설치해야 할까? 여기서는 자바와 STS(Spring Tool Suite) 에디터를 설치한다. STS 에디터는 스프링부트 개발을 한결 편리하게 만들어 주는 도구이다. 모든 준비를 마치면 새로운 스프링부트 프로젝트도 생성해 보자.

참고로 실습 코드가 너무 길어지면 절약과 가독성을 위해 코드 전체를 표시하지 않고 실습에 필요한 부분만 표시했다. 더불어 전체 코드를 참고하며 공부할 독자를 위해 각 장 도입부에 소스 보기 링크를 안내했다.

이 장의 목표

  • 자바와 STS를 설치하고 개발 환경을 준비한다.
  • 스프링부트 프로젝트를 만들어 첫 번째 프로그램을 만든다.
  • 스프링부트 서버를 실행하고 실행 결과를 확인한다.

01. 필자가 생각하는 스프링부트란?

스프링부트(Spring Boot)는 자바의 웹 프레임워크로 기존 스프링 프레임워크(Spring Framework)에 톰캣 서버를 내장하고 여러 편의 기능들을 추가하여 꾸준한 인기를 누리고 있는 프레임워크이다.

스프링부트는 웹 프로그램을 쉽고 빠르게 만들어 주는 웹 프레임워크다

스프링부트는 웹 프로그램을 쉽고 빠르게 만들 수 있도록 도와주는 웹 프레임워크이다. 웹 프레임워크라는 표현을 처음 듣는 사람을 위해 잠시 웹 프레임워크를 설명해 보겠다.

웹 프레임워크란?

웹 프로그램을 만들어 본 경험이 있는가? 만약 그런 경험이 있다면 웹 프로그램을 위해 얼마나 많은 기능을 만들어야 하는지 잘 알고 있을 것이다.

01_1
01_1

예를 들어 쿠키나 세션 처리, 로그인/로그아웃 처리, 권한 처리, 데이터베이스 처리 등 웹 프로그램을 위해 만들어야 할 기능이 정말 산더미처럼 많다. 하지만 웹 프레임워크를 사용하면 이런 기능들을 여러분이 일일이 만들 필요가 없다. 왜냐하면 웹 프레임워크에는 그런 기능들이 이미 만들어져 있기 때문이다. 그저 웹 프레임워크에 있는 기능을 익혀서 사용하기만 하면 된다. 쉽게 말해 웹 프레임워크는 웹 프로그램을 만들기 위한 스타터 키트라고 생각하면 된다. 그리고 자바로 만들어진 웹 프레임워크 중 하나가 바로 스프링부트이다.

얼마나 빨리 만들 수 있나?

[스프링부트의 빠른 개발 속도를 보여 주는 예]

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

스프링부트는 튼튼한 웹 프레임워크이다

개발자가 웹 프로그램을 만들 때 가장 어렵게 느끼는 기능 중 하나는 바로 보안 기능이다. 이 세상에는 기상천외한 방법으로 웹 사이트를 괴롭히는 사람들이 있다. 이런 공격에 개발자 홀로 신속하게 대응하기는 무척 어려운 일이다. 하지만 걱정할 필요는 없다. 스프링부트는 이런 보안 공격을 기본으로 아주 잘 막아 준다. 그만큼 스프링부트는 튼튼한 웹 프레임워크다. 예를 들어 SQL 인젝션, XSS(cross-site scripting), CSRF(cross-site request forgery), 클릭재킹(clickjacking)과 같은 보안 공격을 기본으로 막아 준다. 즉, 스프링부트를 사용하면 이런 보안 공격에 대한 코드를 여러분이 짤 필요가 없다.

  • SQL 인젝션은 악의적인 SQL을 주입하여 공격하는 방법이다.
  • XSS는 자바스크립트를 삽입해 공격하는 방법이다.
  • CSRF는 위조된 요청을 보내는 공격 방법이다.
  • 클릭재킹은 사용자의 의도하지 않은 클릭을 유도하는 공격 방법이다.

스프링부트에는 여러 기능이 준비되어 있다

스프링부트는 2012년에 등장하여 10년 이상의 세월을 감내한 베테랑 웹 프레임워크이다. 그동안 정말 무수히 많은 기능이 추가되고 또 다듬어졌다. 혹시 로그인 기능을 원하는가? 페이징 기능을 원하는가? 이미 스프링부트에 있다. 이미 있을 뿐 아니라 너무나도 잘 만들어져 있다. 한마디로 스프링부트에는 여러분이 필요로 하는 웹 프로그램 개발을 위한 도구와 기능이 대부분 준비되어 있다. 필자는 스프링부트를 공부할 여러분에게 '이미 만들어져 있는 기능을 새로 만드느라 애써 고생하지 말라'는 이야기를 꼭 해 주고 싶다.

01_2
01_2

스프링부트는 WAS가 따로 필요없다.

스프링부트 대신 스프링만 사용하여 웹 애플리케이션을 개발한다면 웹 애플리케이션을 실행할 수 있는 톰캣과 같은 WAS(Web Application Server)가 필요하다. WAS의 종류(Tomcat, Weblogic, WebSphere, JBoss, Jeus 등)는 매우 다양하며 설정 방식도 제각각이어서 WAS에 대해 공부해야할 내용도 상당하다. 하지만 스프링부트에는 톰캣 서버가 내장되어 있고 설정도 자동 적용되기 때문에 여러분은 WAS에 대해서 전혀 신경쓸 필요가 없다. 심지어 배포되는 jar 파일에도 톰캣서버가 내장되어 실행되므로 서로 다른 WAS들로 인해 발생되는 문제들도 사라진다.

스프링부트로 작성하더라도 톰캣 대신 다른 WAS를 사용할수 있다.

스프링부트는 설정이 쉽다.

스프링부트 이전에 스프링만을 사용하여 웹 애플리케이션을 만들어 보았다면 상당히 복잡한 설정들로 인해 많은 어려움을 겪었을 것이다. 심지어 한번 설정한 기능들이 스프링 버전업으로 인해 변경되고 없어지는 일도 비일비재 하였다. 하지만 스프링부트는 스프링의 복잡한 설정을 자동화하고 단순화 하여 누구나 스프링을 쉽게 사용할 수 있게 만들었다. 스프링으로 웹 애플리케이션을 만들 때 다른 언어로 작성된 프레임워크(Django[1], Rails[2] 등)의 간결함을 많이 부러워 했는데 스프링부트의 등장과 꾸준한 발전으로 인해 이제는 더이상 부러워할 이유가 없을듯 하다.

스프링부트는 재미있다

스프링부트로 웹 프로그램을 만드는 것이 게임을 하는 것보다 재밌다고 하면 믿겠는가? 약간 과장이긴 하지만 무언가에 홀린 듯이 코딩을 하고 있는 필자 자신을 발견할 때가 있었는데, 그때가 바로 웹 프로그램을 만들고 있을 때였다. 정말이니 의심하지 말고 지금 당장 스프링부트로 웹 프로그래밍을 시작해 보자.


02. 자바 설치하기

2. 자바 설치하기

앞에서 언급했듯이 스프링부트는 자바로 만들어진 웹 프레임워크이다. 그래서 스프링부트를 실행하기 위해서는 자바 설치가 필수이다.

JDK 설치

자바 프로그래밍을 하기 위해 필수적으로 필요한 JDK를 먼저 설치해 보자. JDK는 Java Development Kit의 약자이다. 자바 프로그램을 만들기 위해서는 누구나 이것을 설치해야 한다. 자바는 원래 썬 마이크로시스템즈에서 만들고 배포했지만 오라클이 썬을 인수하면서부터 라이센스가 좀 복잡하게 변경되었다. 하지만 공부를 위해 필요한 JDK는 온라인에서 무료로 다운로드하여 설치할 수 있다.

이 책에서는 여러분이 윈도우즈 또는 맥 운영체제를 사용한다고 가정하고 진행한다. (하지만 리눅스나 기타 다른 OS 사용자라도 설치를 제외하면 나머지 것들은 모두 동일하게 진행할 수 있을 것이다.)

JDK를 다운로드 할 수 있는 URL은 다음과 같다.

  • https://www.oracle.com/java/technologies/downloads/

만약 위 URL이 더이상 유효하지 않다면 구글 검색창에서 "JDK Download" 로 검색하고 들어가면 된다.

윈도우즈에 JDK 설치

윈도우즈의 경우 "Windows" 탭을 선택한 후 "x64 MSI Installer" JDK를 다운로드한다.

02_1
02_1

다른 일반 프로그램을 설치하는 것과 동일한 방법으로 더블 클릭하여 설치하면 된다. 설치를 위한 과정은 매우 쉬우므로 생략하겠다.

JDK는 디폴트로 설치 시 아마도 다음과 비슷한 디렉터리에 설치될 것이다.

C:\program files\java\jdk-17.0.2

※ JDK 설치 버전에 따라 디렉터리명이 다르다.

맥 OS에 JDK 설치

맥 OS의 경우 "macOS" 탭을 선택한 후 자신의 환경에 맞는 dmg 파일을 다운로드한다.

02_2
02_2

어떤 dmg 파일을 설치해야 하는지 잘 모르겠다면 터미널에서 다음 명령을 실행해 보자.

uname -p

만약 i386 또는 x86_64 이라고 출력되면 "x64 DMG Installer"를 다운로드하면 되고 arm64가 출력되면 "Arm 64 DMG Installer"를 다운로드하면 된다.

dmg 파일을 설치한 후 터미널에서 java -version 명령을 실행하여 자바가 잘 설치되었는지 확인해 보자.

java -version
# java version "17.0.2" (...  생략 ...)

03. 스프링부트 개발 환경 준비하기

이제 본격적으로 스프링부트 개발 환경을 준비해 보자.

JDK 설치가 완료되었다면 스프링부트 프로그램 작성을 도와주는 도구인 STS(Spring Tool Suite)를 설치해야 한다. 문서파일 작성을 도와주는 도구로 워드나 HWP가 있는 것처럼 프로그램 작성을 도와주는 툴들이 있다. 이러한 툴들을 IDE(Intergrated Development Environment), 통합개발환경이라고 부른다. 스프링부트 프로그래밍을 도와주는 IDE 중 가장 많이 추천되는 툴은 STS이다. STS는 스프링 개발에 최적화된 에디터로 이클립스 기반으로 제작되었다.

인텔리제이(IntelliJ)

스프링부트 IDE로 인텔리제이(IntelliJ)도 많이 사용한다. 인텔리제이는 스프링부트 개발을 위해서는 커뮤니티 버전보다는 얼티밋 버전을 사용할 것을 추천한다. 왜냐하면 커뮤니티 버전은 스프링부트에 대한 지원이 적기 때문이다. 만약 커뮤니티 버전으로 스프링부트 개발을 진행한다면 설정에 꽤나 많은 시간을 보내야 할 것이다. 하지만 얼티밋 버전은 무료가 아니다. 이러한 이유로 이 책에서는 무료이며 잘 안정화 되어 있는 STS를 사용할 것이다.

그래도 역시 인텔리제이 커뮤니티 버전을 사용하고 싶다면 다음을 참고하자.

인텔리제이 사용하기

STS 설치하기

STS는 다음 주소에 접속하면 내려받을 수 있다. (이 책을 작성하는 시점에는 버전 4가 최신 버전이다.)

STS 설치 파일 주소: https://spring.io/toolsopen in new window

설치할 때 특별히 주의할 점은 없으므로 끝까지 <Next>를 선택하여 설치하면 된다.

STS 실행하기

설치한 STS를 실행하면 가장먼저 다음과 같은 프롬프트 창이 나타난다.

03_1
03_1

STS의 작업공간(workspace) 디렉터리를 설정하라는 창이다. 앞으로 STS로 작성하는 모든 파일들이 이 디렉터리 하위에 만들어진다. 사용자 홈(Home) 디렉터리 하위에 workspace 디렉터리를 지정한후 "Launch"를 누른다. 참고로 맥 OS의 사용자 홈 디렉터리는 /Users/<사용자명>이고 윈도우즈의 사용자 홈 디렉터리는 C:/Users/<사용자명> 이다.

여기서 지정한 디렉터리는 앞으로 표시되는 파일들의 루트 디렉터리가 된다. 앞으로 이 책에서 파일명을 표시할 때는 루트 디렉터리 이하의 경로만 표시한다.

그러면 다음과 같이 STS가 실행된다.

03_2
03_2

스프링부트 프로젝트 생성하기

이제 해야 할일은 STS 좌측에 표시된 "Create new Spring Starter Project"를 눌러 스프링부트 프로젝트를 생성하는 것이다.

03_3
03_3

그러면 다음과 같은 설정 화면이 나타난다.

03_4
03_4

이 부분은 중요하므로 주의깊게 입력하자.

  • Name: 프로젝트의 이름에 해당된다. 여기서는 "Spring Boot Board"의 이니셜인 sbb를 사용했다.
  • Type: 프로젝트를 관리하는 도구를 선택하는 항목이다. 디폴트로 Maven이 설정되어 있지만 이 책에서는 Gradle을 사용할 것이다. Gradle은 Maven 보다 나중에 개발되었고 Maven보다 성능이 좋고 설정도 편리하다. 이 책은 Gradle 기반으로 설명되어 있으므로 여러분도 꼭 "Gradle - Groovy"를 선택하자.
  • Java Version: 17 버전을 선택한다.
  • Group, Artifact, ... 등은 다르게 설정해도 되지만 이후 예제를 수월하게 진행하기 위해 위와 동일하게 설정하는것을 추천한다.

이상과 같이 설정했으면 "Next"를 누르자. 그러면 다음과 같이 스프링부트 버전을 선택하는 화면이 나타난다.

03_8
03_8

이 책을 쓰는 시점의 최신 안정화 버전은 3.0.0 이다. 3.0.0 버전을 선택하고 Available 항목에서 web을 입력하여 "Spring Web" 항목을 찾아서 선택하자.

"Spring Web"을 선택하지 않고 지나치면 웹 기능을 사용할 수 없으니 실수하지 않도록 주의하자.

이어서 "Finish"를 눌러 프로젝트를 생성하자. 그러면 다음과 같이 STS가 실행된다.

03_6
03_6

좌측 상단에 sbb 프로젝트가 생성된 것을 확인할 수 있다. 그리고 우측 하단에 프로젝트에 필요한 프로그램들이 다운로드 되는 것도 확인할 수 있다. 조금 기다리면 다운로드가 완료될 것이다.


04. 스프링부트 맛보기

`pahkey/sbb3` - 1-04`open in new window

이번에는 브라우저 주소창에 http://localhost:8080/hello 라는 URL을 입력했을 때 브라우저 화면에 "Hello World"라는 문구를 출력하는 웹 프로그램을 작성해 볼 것이다.

이 프로그램이 동작하기 위해서는 여러분의 컴퓨터(localhost)가 웹 서버가 되어 8080 포트에서 실행되어야 하고 http://localhost:8080/hello 라는 URL을 통해 서버에 요청이 발생하면 "Hello World" 라는 문구를 브라우저 화면으로 출력해야 한다.

스프링부트로 얼마나 간편하게 할 수 있는지 지금부터 알아보자.

HelloController

http://localhost:8080/hello 와 같은 브라우저의 요청을 처리하기 위해서는 컨트롤러(Controller)가 필요하다. 컨트롤러는 서버에 전달된 클라이언트의 요청(URL과 전달된 파라미터 등)을 처리하는 자바 클래스이다.

컨트롤러를 만들어 보자.

04_1
04_1

위 그림처럼 순서대로 com.mysite.sbb 위치에서 마우스 우측 버튼을 누르고 New, Class를 선택한다. 그러면 다음과 같은 화면이 나타난다.

04_2
04_2

Name 항목에 HelloController라고 입력한후 "Finish"를 누르자.

그러면 다음과 같은 HelloController.java 파일이 생성된다.

package com.mysite.sbb;

public class HelloController {

}

하지만 지금 작성한 HelloController는 껍데기 클래스이므로 컨트롤러의 기능을 갖추려면 다음과 같이 수정해야 한다.

package com.mysite.sbb;

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";
    }
}

프로젝트를 진행하며 더 자세히 설명하겠지만 여기서 사용된 것들에 대해서 간단히 알아보자. 클래스명 위에 적용된 @Controller 애너테이션은 HelloController 클래스가 컨트롤러의 기능을 수행한다는 의미이다. 이 애너테이션이 있어야 스프링부트 프레임워크가 컨트롤러로 인식한다. hello 메서드에 적용된 @GetMapping("/hello") 애너테이션은 http://localhost:8080/hello URL 요청이 발생하면 hello 메서드가 실행됨을 의미한다. 즉, /hello URL과 hello 메서드를 매핑하는 역할을 한다.

  • URL명과 메서드명은 동일할 필요는 없다. 즉 /hello URL일 때 메서드명을 hello가 아닌 hello2와 같이 해도 상관없다.
  • Get 방식의 URL 요청은 GetMapping을 사용하고 Post 방식의 URL 요청은 PostMapping을 사용한다.

그리고 @ResponseBody 애너테이션[3]은 hello 메서드의 응답 결과가 문자열 그 자체임을 나타낸다. hello 메서드는 "Hello World" 라는 문자열을 리턴하므로 출력으로 "Hello World" 문자열이 나갈 것이다.

나중에 공부하겠지만 응답 결과는 이처럼 단순한 문자열 보다는 HTML 파일과 같은 템플릿을 주로 사용한다.

로컬서버 실행하기

이제 작성한 HelloController가 정상 동작하는지 확인해 보자. HelloController의 동작을 확인하기 위해서는 로컬서버를 실행해야 한다. 로컬서버는 다음과 같은 순서로 실행한다.

04_6
04_6
  1. 먼저 위 그림의 좌측 하단에 Boot Dashboard가 보이지 않는다면 STS 상단의 툴바에서 "Boot Dashboard" 아이콘을 눌러서 실행한다.
  2. Boot Dashboard에서 local 을 한번 누르면 그림처럼 "sbb" 라는 프로젝트명이 보인다. 여기서 "sbb"를 마우스로 선택하자.
  3. "sbb"를 선택하면 로컬서버를 실행할 수 있는 버튼들이 보인다. 가장 좌측의 버튼을 눌러서 서버를 실행한다. 순서대로 진행하면 로컬서버가 실행되고 STS 콘솔창에 다음과 같은 메시지들이 출력될 것이다.
04_7
04_7

브라우저로 확인하기

서버가 실행되었으니 이제 HelloController의 동작을 확인해 보자. 브라우저를 실행하고 주소창에 http://localhost:8080/hello라고 입력해 보자.

로컬서버는 디폴트로 8080 포트로 실행된다.

04_5
04_5

위와 같이 /hello URL이 요청되면 컨트롤러인 HelloControllerhello 메서드와 매핑된 hello 메서드가 호출되고 "Hello World"라는 문자열이 브라우저에 출력되는 것을 확인할 수 있다.

스프링부트의 세계에 온 것을 축하한다 ^^


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

`pahkey/sbb3` - 1-05`open in new window

이번장에서는 스프링부트 개발을 도와주는 도구들에 대해서 알아보자.

Spring Boot Devtools

먼저 스프링부트 로컬 서버를 시작한 후 이전 장에서 작성했던 HelloController를 다음과 같이 수정하자.

package com.mysite.sbb;

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 SBB";
    }
}

출력하는 문자열을 "Hello World"에서 "Hello SBB"로 변경했다. 하지만 이렇게 수정하고 http://localhost:8080/hello URL을 호출하더라도 여전히 "Hello World" 문자열이 출력된다. 왜냐하면 프로그램이 변경되더라도 로컬서버가 변경된 클래스를 리로딩하지 않기 때문이다. 이것은 개발을 진행하는 동안에는 꽤 불편한 일이다. 프로그램을 수정하고 변경된 사항을 확인하려면 매번 서버를 재시작 해야 하기 때문이다. 이 문제를 해결하려면 Spring Boot Devtools를 설치해야 한다.

Spring Boot Devtools는 스프링부트 개발시 도움을 주는 도구이다. Spring Boot Devtools를 설치하면 서버 재시작 없이도 클래스 변경시 서버가 자동으로 재기동 된다.

Spring Boot Devtools에는 이외에도 여러 기능들이 있는데 그것들에 대해서는 필요한 때에 알아보자.

Spring Boot Devtools를 사용하기 위해서는 그레이들(Gradle)[4]로 설치해야 한다. 다음과 같이 build.gradle 파일을 수정하자.

파일명: /sbb/build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.0.0'
    id 'io.spring.dependency-management' version '1.1.0'
}

group = 'com.mysite'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
}

tasks.named('test') {
    useJUnitPlatform()
}

















 





dependencies 항목에 developmentOnly 'org.springframework.boot:spring-boot-devtools'를 추가했다.

developmentOnly

Gradle의 developmentOnly는 개발환경에만 적용되는 설정이다. 즉, 운영환경에 배포되는 jar, war 파일에는 developmentOnly로 설치된 라이브러리는 제외된다.

build.gradle 파일의 내용을 적용하려면 다음처럼 build.gradle 파일을 선택한후 오른쪽 마우스 버튼을 눌러 [Gradle -> Refresh Gradle Project]를 선택하여 필요한 라이브러리를 다운로드해야 한다.
05_1
05_1

설치가 완료되면 다음과 같이 Boot Dashboard의 서버명이 sbb에서 sbb[devtools]로 바뀐다.

05_2
05_2

그리고 다음과 같이 서버를 재시작하자.

05_3
05_3

그림에서 "1번"을 누르면 서버가 재시작한다. (중지와 시작을 동시에 진행)

이제 Spring Boot Devtools가 적용되었으니 브라우저에서 다시 http://localhost:8080/hello URL을 호출해 보자. 서버를 재시작 했기 때문에 "Hello SBB" 라는 문자열이 출력될 것이다. 서버 재시작 없이도 변경사항이 적용되는지 확인하기 위해 출력 문자열을 다음과 같이 다시 변경하자.

package com.mysite.sbb;

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 Spring Boot Board";
    }
}











 


수정사항이 잘 반영되는지 http://localhost:8080/hello URL을 호출해 확인해 보자. 서버를 재시작하지 않아도 "Hello Spring Boot Board" 문자열이 잘 출력될 것이다.

Live Reload

HelloController의 출력 문자열을 변경하면 Spring Boot Devtools에 의해 수정사항이 잘 적용되는 것을 확인할 수 있었다. 하지만 브라우저 주소창에서 URL을 다시 호출하던가 브라우저 리프레시(Refresh)를 해야만 변경된 내용을 확인할 수 있다. Spring Boot Devtools의 Live Reload 기능을 사용하면 브라우저 재호출(또는 리프레시) 없이 변경 사항을 확인할 수 있다. 다만 Live Reload 기능은 크롬 브라우저의 확장 프로그램을 통해서만 가능하다.

크롬 브라우저에 LiveReload++open in new window 확장 프로그램을 설치하자.

그리고 크롬 브라우저 확장 프로그램 관리에서 다음처럼 LiveReload++를 사용하도록 설정하자.

05_4
05_4

그러면 브라우저 우측 상단에 LiveReload++이 적용된 것을 확인할 수 있다.

05_5
05_5

LiveReload++ 아이콘을 선택하면 다음처럼 활성화 된다.

05_6
05_6

이제 STS에서 프로그램을 수정하면 서버는 물론 브라우저도 리로딩되어 변경된 내용을 추가 작업 없이 즉시 확인할 수 있다.

롬복

롬복(lombok)은 자바 클래스에 Getter, Setter, 생성자 등을 자동으로 만들어 주는 도구이다. SBB 프로젝트를 진행하면서 데이터를 처리하기 위한 엔티티 클래스나 DTO 클래스등을 사용해야 하는데 이때 클래스의 속성들에 대한 Getter, Setter를 만들어야 한다. 물론 Getter, Setter 메서드를 직접 만들어도 되지만 롬복(lombok)을 사용하면 좀 더 깔끔한 소스코드를 만들수 있다.

롬복 설치

롬복을 사용하려면 플러그인을 먼저 설치 해야한다. 다음의 URL에서 롬복 플러그인을 다운로드open in new window 하자.

그리고 다운로드한 lombok.jar 파일을 다음과 같이 설치하자.

java -jar lombok.jar

그러면 다음과 같은 경고 메시지가 나타난다.

05-7
05-7

롬복 플러그인이 설치된 IDE를 찾을 수 없다는 경고 메시지이다. "확인"을 눌러 메시지창을 닫자. 그러면 다음과 같은 화면이 나타난다.

05_8
05_8

위 화면에서 다음 순서로 롬복을 설치하자.

  1. "Specify location"을 눌러 롬복 플러그인을 사용할 IDE인 STS가 설치된 경로를 선택한다.
  2. "Install / Update"를 눌러 롬복 플러그인을 설치한다.
  3. "Quit Installer"를 눌러 설치 프로그램을 종료한다.

그리고 STS를 종료하고 다시 시작한후 build.gradle 파일을 다음과 같이 수정하자.

// (... 생략 ...)

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

// (... 생략 ...)






 




롬복 관련 라이브러리를 설치하고 컴파일시 롬복이 적용되도록 했다.

build.gradle 파일을 수정한 후에는 반드시 [Gradle -> Refresh Gradle Project]를 선택하여 라이브러리를 다운로드 해야 한다.

compileOnly

build.gradle 파일의 compileOnly는 해당 라이브러리가 컴파일 단계에서만 필요한 경우에 사용한다.

annotationProcessor

컴파일 단계에서 애너테이션을 분석하고 처리하기 위해 사용한다.

Getter, Setter

다음처럼 HelloLombok 클래스를 작성하여 롬복이 정상적으로 동작하는지 확인해 보자.

아래 코드 작성시 오류가 없어야 한다.

파일명: /sbb/src/main/java/com/mysite/sbb/HelloLombok.java

package com.mysite.sbb;

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());
    }
}





 
 














HelloLombok 클래스에 hello, lombok 2개의 속성을 추가한 후 클래스명 바로 위에 @Getter, @Setter라는 애너테이션을 적용했더니 Getter, Setter 메서드를 추가하지 않아도 setHello, setLombok, getHello, getLombok 등의 메서드를 사용할수 있게 되었다.

롬복으로 컴파일된 클래스에는 Getter와 Setter 메서드가 실제로 포함된다.

점프 투 스프링부트

롬복 적용이 안된다면?

이클립스에 롬복이 적용 안되는 케이스는 매우 다양하지만 JDK 설정이 잘못된 경우가 대부분이다.

05_10
05_10

위 그림과 같이 [Preferences -> Java -> Installed JREs] 에서 설치된 JDK를 변경하며 롬복이 잘 동작하는지 확인해 보자.

RequiredArgsConstructor

이번에는 HelloLombok 클래스를 다음과 같이 수정해 보자.

package com.mysite.sbb;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Getter
@Setter
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());
    }
}



 

 




 
 


 




hello, lombok 속성에 final을 적용하고 롬복의 @RequiredArgsConstructor 애너테이션을 적용하면 해당 속성을 필요로하는 생성자가 롬복에 의해 자동으로 생성된다. (※ final이 없는 속성은 생성자에 포함되지 않는다.)

final을 적용했기 때문에 @Setter는 의미가 없으며 Setter 메서드들도 사용할수 없다. final은 한번 설정한 값을 변경할수 없게 하는 키워드이다.

즉, 다음과 같이 생성자를 직접 작성한 경우와 동일하다.

package com.mysite.sbb;

import lombok.Getter;

@Getter
public class HelloLombok {

    private final String hello;
    private final int lombok;

    public HelloLombok(String hello, int lombok) {
        this.hello = hello;
        this.lombok = lombok;
    }

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










 
 
 
 







@RequiredArgsConstructor 애너테이션은 이후 진행되는 챕터에서 의존성 주입(Dependency Injection)시 사용된다.

DI(Dependency Injection) - 스프링이 객체를 대신 생성하여 주입한다.


이찬희 (MarkiiimarK)
Never Stop Learning.

  1. 장고(Django)는 파이썬으로 작성된 오픈 소스 웹 프레임워크이다. ↩︎

  2. 루비온레일즈(Ruby on Rails)는 루비로 작성된 오픈 소스 웹 프레임워크이다. 줄여서 레일즈라 부른다. 덴마크의 데이비드 하이네마이어 한슨(David Heinemeier Hansson)에 의해 시작되어 오픈 소스로 개발되고 있다. ↩︎

  3. 프로그래밍에서 애너테이션은 소스 코드에 부가 정보를 제공하고 메타데이터를 첨부하는 방법을 제공하는 기술이다. 애너테이션은 주석처럼 코드에 포함되지만 컴파일러나 런타임 환경에서 특별한 의미를 갖고 처리된다. ↩︎

  4. Gradle(그레이들)은 자바, Kotlin, 그루비 등의 프로그래밍 언어를 사용하는 프로젝트를 빌드하고 관리하기 위한 빌드 자동화 도구이다. Gradle은 프로젝트 빌드 및 종속성 관리, 테스트 실행, 배포, 리소스 복사 및 기타 다양한 작업을 수행하는 데 사용된다. ↩︎