Published on

Simple Spring Boot Application 만들기

Authors

Steps

spring.io 에서 프로젝트 생성

start.spring.io에 접속하여, Java version, Project Project 관리도구, Boot version, dependencies를 설정한 뒤 Generate 버튼을 눌러 프로젝트 파일을 다운로드 받습니다.

저는 아래와 같이 Gradle-Groovy, Java, Boot 2.7.15, Java 11을, spring-starter-web, thymeleaf를 선택하였습니다.

start.spring.io

Intellij에서 프로젝트 실행

Generate 버튼을 눌러 다운로드 받은 zip file의 압축을 풀고 Intellij를 실행하여 해당 folder를 open 합니다.

HelloController.java 생성하기

Controller라는 새로운 패키지를 만들고 HelloController.java 파일을 생성하여 아래와 같이 기입합니다. @Controller anotation은 Spring에 이 Class를 Controller로 관리해줘 라고 알려주는 부분이고, @GetMapping("hello")는 hello post-fix가 붙은 URL의 GET 과 hello 함수와 매핑시키는 작업입니다.

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{
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

hello.html 생성하기

ThymeLeaf 템플릿 엔진을 사용하여 Web Browser에 보여줄 것이기 때문에, resources -> templates 폴더 아래에 hello.html 을 만들어 thymeleaf 문법에 따라 Controller의 model로 붙어 전달받은 데이터를 화면에 출력하도록 코드를 작성합니다.

hello.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
  <p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>

HelloController.javahello.html 두 개의 파일을 생성했고, 프로젝트 source tree는 아래와 같습니다.

start.spring.io

Spring Boot 실행

HelloSpringApplication 에 Spring Boot 서버의 시작점인 main 함수가 존재하는데, mouse를 hover하면 run button이 보이게 되고 이 버튼을 눌러 Spring Web Server를 동작 시킵니다.

아래처럼 로그 메시지에 Tomcat 서버가 8080 port 정상적으로 실행되었다는 메시지가 출력 되면 정상입니다.

2023-09-03 10:14:44.512  INFO 53925 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-09-03 10:14:44.519  INFO 53925 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-09-03 10:14:44.519  INFO 53925 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.79]
2023-09-03 10:14:44.563  INFO 53925 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-09-03 10:14:44.564  INFO 53925 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 478 ms
2023-09-03 10:14:44.663  INFO 53925 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2023-09-03 10:14:44.752  INFO 53925 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-09-03 10:14:44.759  INFO 53925 --- [           main] h.hellospring.HelloSpringApplication     : Started HelloSpringApplication in 0.909 seconds (JVM running for 1.099)

아래 처럼 http://localhost:8080/hello 에 web browser 주소에 접속하면 hello 메시지가 나오는 것을 확인할 수 있습니다.

hello_spring_webui

Gradle로 build하고 실행하는 법

Intellij를 사용하지 않고, 터미널에서 아래 명령어를 통해서도 Spring Boot Application build및 실행이 가능하다.

$./gradlew clean build
$ cd build/libs
$ java -jar hello-spring-0.0.1-SNAPSHOT.jar

Spring은 정말 거대하기 때문에, 또한 예전에는 Tomcat 서버가 내장된 방식이 아니었기 때문에 개발에 어려움이 많았는데, 현재는 Spring Boot덕분에 이렇게 쉽게 웹 Application을 만들 수 있게 되었습니다. 하지만 추상화 정도가 올라간만큼 개발자 입장에서 Spring core를 손댈 일이 없기 때문에 원리를 모르고 사용하게 될 수 있다는 염려가 있습니다. 이렇게 되면 이슈가 발생했을 때 원인을 파악하기가 쉽지 않습니다. Spring Boot를 이용해 빠르고 생산성 높게 Spring 개발을 하지만, 동시에 Spring 내부에도 항상 관심을 가져야겠습니다.

References