spring initializer 사용법

2023. 12. 28. 19:59- 서버/springboot

과거 어렵던 스프링 프레임워크였지만 스프링부트가 나오면서 스프링으로 하는 웹 개발이 보다 쉬워 졌습니다. 

스프링부트가 권장하는 방식을 사용하면 서버에 톰캣과 같은 웹 애플리케이션 서버를 설치할 필요도 없고 오로지 Jar 하나만 있으면 서비스를 운영할 수 있습니다. 거추장스럽던 수많은 설정이 자동화 되었습니다.

 

그러면 스프링부트 프로젝트를 쉽게 생성 할수 있는 spring initializer에 대해 알아보겠습니다.

 

사이트 접속

https://start.spring.io/

위의 사이트에 접속해줍니다.

 

Project는 Gradle-Groovy, Language는 Java로 설정해줍니다. 

Gradle은 빌드툴인데 쉽게 말해 여러 유용한 라이브러리를 프로젝트에서 쓸수 있게 도와주는 역할을 합니다.

 

Spring boot 버전은 3.xx 버전을 사용할때는 사용하는 Java 버전이 17이상이여야 합니다.

현재 사용하고 있는 Java버전이 17버전이 아니라면 아래 사이트에서 17버전을 다운받아야 합니다.
https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html

SNAPSHOT이 써져 있는 버전은 베타 버전이기 때문에 왠만하면 다른 버전을 선택 하는것이 권장됩니다. 

 

Packaging은 Jar를 선택해줍니다.

 

Project Metadata 입니다.

  • Group : 기업 도메인명
  • Artifact : 빌드되어 나올 결과물
  • Name : 프로젝트명 (일반적으로 Artifact와 동일하게 해준다.)
  • Description : 설명
  • Package name : 패키지 이름 (Group과 Artifact를 설정하면 자동으로 만들어준다.)

위의 내용을 참고 해서 원하는 이름을 입력해줍니다.

 

제일 중요한것이 Dependencies를 추가 해주는것인데 프로젝트에 사용할 라이브러리를 추가 하는 것입니다. 우측 상단의 ADD DEPENDENCIES 버튼을 클릭하여 다음과 같이 추가해줍니다.

 

Spring Web은 스프링 웹개발에 대한 전반적인 기능을 제공하는 라이브러리이며 Thymeleaf는 템플릿 엔진입니다.

 

해당 프로젝트 생성후 Intellij로 실행

이렇게 작성한 후에 GENERATE 버튼을 누르면 프로젝트 파일이 다운로드 됩니다. 다운후에 사용하고자 하는 경로에 파일을 이동시켜 압축을 해제해 줍니다. 해제후에 Intellij로 프로젝트를 실행해줍니다.

 

Intellij로 실행했다면 우측의 Gradle을 통해 추가했던 라이브러리들을 확인해 볼수가 있습니다.

 

우리가 Dependencies로 추가한 Spring Web과 Thymeleaf의 패키지 구조를 확인해 볼수 있습니다. 간략히 확인해보면 spring-boot-starter가 두 라이브러리에 공통적으로 포함되어 있는 것을 확인해 볼수 있으며 Spring Web에는 특히 tomcat파일과 spring-web, spring-webmvc가 깔려있는 것을 확인할 수 있습니다.

 

 

settings에 들어가서 아래와 같이 세팅해줍니다.

 

 

프로젝트 실행

클래스 TestSpringInitApplication 은 메인클래스 입니다. @SpringBootApplication 으로 인해 스프링 부트의 자동설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정됩니다. 특히나 @SpringBootApplication 이 있는 위치부터 설정을 읽어 가기 때문에 이클래스는 항상 프로젝트의 최상단에 위치 해야만 합니다. 

 

main 메소드에서 실행 하는 SpringApplication.run 으로 인해 내장 WAS (Web Application Server) 를 실행합니다. 

내장 WAS란 별도로 외부에 WAS를 두지 않고 애플리케이션을 실행할 때 내부에서 WAS를 실행하는 것을 이야기 합니다. 이렇게 되면 항상 서버에 톰캣을 설치할 필요가 없게 되고, 스프링 부트로 만들어진 Jar 파일로 실행하면 됩니다.

 

main을 실행 시키면 아래와 같은 콘솔창이 뜹니다.

 

내장 톰캣이 8080포트에 서버를 실행했다는 것을 확인 할수 있습니다.

브라우저에서 localhost:8080 을 입력해줍니다.

 

입력한게 없으므로 위와 같은 화면이 뜨게 됩니다.

이제 index.html을 작성해보겠습니다.

 

index.html 작성

이제 서버가 웹페이지를 띄우도록 해보겠습니다. resources > static 폴더에 index.html 이란 파일명으로 html파일을 생성하면 이 페이지가 뜨게 됩니다.

 

다음과 같이 html파일을 작성한 후 실행 시켜봅니다.

 

index.html

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

 

다시 localhost:8080에 접속해줍니다.

 

hello 링크를 클릭해도 아직 구현한것이 없기 때문에 오류화면이 나타 납니다.

 

hello.html 작성

templates 폴더 안에 우리가 추가한 thymeleaf를 이용하여 /hello 에 대한 페이지를 작성 해보겠습니다.

 

hello.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello 222</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}"/>
</body>
</html>

 

http://www.thymeleaf.org 이 스키마 주소를 적어줌으로써 html에서 thymeleaf를 사용할 수 있게 됩니다.

${data} 이 부분은 다음단계에서 살펴보겠습니다. 다시 실행하고 localhost:8080에 접속합니다. 

아직도 화면은 그대로 입니다. url mapping이 처리가 되지 않았기 때문입니다.

 

Controller 작성

jdh.testspringinit 패키지 밑에 controller 패키지를 생성하여 HelloController 클래스를 작성 합니다.

 

HelloController.class

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

@Controller
public class HelloController {

    @GetMapping("/hello2")	// 주소 (get요청)
    public String hello(Model model) {
        model.addAttribute("data", "gigigi");
        return "hello";		// templates폴더의 hello.html
    }
}

 

main을 재실행 후에 hello를 클릭하면 아래와 같은 화면이 뜨는것을 확인 할수 있습니다.

 

우리가 작성한 HelloController는 /hello2 라는 주소에 접근하였을때 동작하는 Controller 입니다.

 

여기서 hello.html 에는 p태그안에 gigigi 라는 문자열이 없는데 웹에서는 gigigi라는 문자열이 떠있습니다.

그 이유는 HelloController에서 data에 대한 값을 gigigi 로 지정해주었기 때문입니다.

 

또한 컨트롤러에서 "hello" 라는 문자열을 반환하면 이 문자열은 viewName 으로써 동작합니다. 

그럼 ViewResolver 에서 "hello"라는 이름의 html파일을 templates 폴더에서 찾아 화면에 보여주게 됩니다.

 

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

resources:templates/ + {ViewName} + .html

 

정리하면 /hello2 에 접속했을때 HelloController 에서 수행하는 동작은 크게 2가지 입니다.

1. /hello2 라는 주소로 hello.html 맵핑

2. data 라는 값 바인딩

 

 

 

참고자료
https://velog.io/@guswlsdl0121/Spring-initializer-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%A4%ED%96%89