본문 바로가기

개발새발 개발하기

[Spring] Spring 개발환경 구축하기

인프런의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술를 정리한 글이다.

 

기본 환경

- Mac OS

- JDK 11

- IntelliJ IDEA CE

🏃🏻‍♀️ 프로젝트 생성

1. Spring 프로젝트 생성

스프링 부트 스타터 사이트로 이동해서 스프링부트 기반의 스프링 프로젝트를 생성한다.

Project : 최근에는 Gradle Project를 대부분 사용한다.

Spring Boot : 정식 릴리즈 버전 선택

Project Metadata

- Group : 보통 기업명

- Artifact : 빌드되어 나온 결과물 (프로젝트명)

Dependencies : 어떤 라이브러리를 사용할 것인지?

- Spring Web(웹 프로젝트)

- Thymeleaf(HTML 템플릿 엔진)

 

GENERATE을 클릭하면 프로젝트 zip 파일이 다운받아진다. 이걸 intelliJ로 열어준다.

 

2. 프로젝트 구조 확인

hello-spring/src를 보면, main과 test로 구성되어 있다.

src/main/java : 소스 코드들이 들어가있음

src/main/resources : java 파일을 제외한 나머지들이 들어있다. (HTML 코드 등..) 

src/test : 테스트 코드 작성하는 부분

build.gradle : 버전 설정 및 사용할 라이브러리들

 

3. HelloSpringApplication 실행

자동으로 제공되는 src/main/java/hello/hellospring/HelloSpringApplication 파일을 보면, main 메소드가 이미 만들어져 있다.

이 main 메소드를 실행하면, 다음과 같이 나온다.

내장된 Tomcat 웹 서버가 실행된다.

웹을 열어 localhost:8080으로 들어가보면 다음과 같은 화면이 나온다. 정상적으로 작동이 됐다는 뜻이다.

 

번외

IntelliJ의 Preferences로 가서, Gradle을 보면

Build and run usingRun tests using이 Gradle(Default)로 되어있는데, 이걸 IntelliJ IDEA로 바꿔주면 Gradle을 통하지 않고, IntelliJ에서 바로 JAVA를 실행시켜주기 때문에 훨씬 빨리 동작한다.

 

🏃🏻‍♀️ 라이브러리 살펴보기

IntelliJ의 Gradle을 통해 라이브러리의 의존 관계를 볼 수 있다.

 

스프링 부트 라이브러리

* spring-boot-starter0web

        * spring-boot-starter-tomcat : 톰캣 (웹 서버)

        * spring-webmvc : 스프링 웹 MVC

* spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진 (View)

* spring-boot-starter(공통) :  스프링 부트 + 스프링 코어 + 로깅

        * spring-boot

                * spring-core

        * spring-boot-starter-logging

                * logback, slf4j

 

테스트 라이브러리

* spring-boot-starter-test

        * junit : 테스트 프레임워크

        * mockito : 목 라이브러리

        * assertj : 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리

        * spring-test : 스프링 통합 테스트 지원

 

🏃🏻‍♀️ View 환경설정

1. 기본 index.html 생성하기

resources/static 아래에 index.html 파일을 생성해준다. (resources/static/index.html)

아래와 같이 코드를 입력하고, 

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

서버를 껐다가 다시 켠 후 localhost:8080으로 들어가보면 아래와 같은 화면이 뜬다.

localhost:8080

이는 스프링 부트가 제공하는 Welcome Page 기능(정적 파일)이다.

즉, static/index.html을 만들어두면, Welcome Page 기능을 제공하는 것이다.

-> thymeleaf 템플릿 엔진을 사용하면 쉽게 만들 수 있다!

 

2. thymeleaf 템플릿 엔진 사용하기

src/main/java/hello/hellospring/controller

hellospring 아래에 controller 패키지를 생성하고, 그 아래에 HelloController.java 파일을 생성한다.

package hello.hellospring.controller;

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

@Controller
public class HelloController {
    // localhost:8080/hello 하면 아래와 매칭이 된다.
    @GetMapping("hello") // GET, POST 할 때 그 GET
    public String hello(Model model) {
        model.addAttribute("data", "hello!"); // hello.html로 넘어갈 데이터
        return "hello"; // resources/templates/hello.html로 연결하라는 뜻이다.
    }
}

resources/templates

resources/templates 아래에 hello.html 파일을 생성한다.

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

Spring 실행 후, localhost:8080/hello로 들어가면 다음과 같이 나온다.

동작 환경 그림

위와 같이 동작한다.

컨트롤러에서 리턴 값으로 문자를 반환하면  뷰 리졸버(viewResolver)가 화면을 찾아서 처리한다.

    -> 스트링 부트 템플릿엔진 기본 viewName 매핑

    -> resources:templates/ + {ViewName} + .html

 

🏃🏻‍♀️ 빌드하고 실행하기

Console 창에서 해당 프로젝트 폴더로 이동한 후, 다음 명령들을 실행한다.

 

나는 여러 JDK 버전을 설치해놔서 현재 JDK 버전이 16으로 설정되어 있어 build가 제대로 실행되지 않았다.

JDK 11을 사용하기 위해 먼저 다음 명령어로 환경변수를 설정해준다.

export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.10)

1. ./gradlew build

build 폴더가 생성된다.

2. cd build/libs

build/libs 폴더로 이동 후, ll 명령어를 사용하면 hello-spring-0.0.1-SNAPSHOT.jar가 존재하는 걸 볼 수 있다.

3. java -jar hello-spring-0.0.1-SNAPSHOT.jar

hello-spring-0.0.1-SNAPSHOT.jar를 실행시켜준다.

4. 실행 확인

localhost:8080/hello로 들어가면 뷰가 제대로 나오는걸 확인할 수 있다.