YOUNG-JIN.OH
웃어라. 온 세상이 너와 함께 웃을 것이다.
울어라. 너 혼자만 울게 될 것이다.

Spring Boot, Hello World! for Web

참고 사이트:

이번에는 웹 브라우저로 접속해서 Hello World! 가 표시되는 프로그램을 만들려고 합니다. 단순히 콘솔(Console) 화면에 출력하는 것과 웹 브라우저에 출력하는 것은 상당히 다른 내용인데요. 우리는 Spring Boot 에서 Dependency 만 설정해주면 바로 사용할 수 있습니다.

새로운 프로젝트를 다시 만드는데 이번에는 Dependencies 에서 Web – Web 하나만 체크를 하고 나머지는 이전과 동일하게 설정합니다.

프로젝트를 생성하면 Gradle이 필요한 라이브러리 파일을 열심히 다운받고 설치를 하게 됩니다.

이렇게 Web 항목을 선택함으로써 External Libraries 항목에 가보면 Web에 관련된 Spring Framework 도 추가되고 Tomcat 9.0.14 관련 내용도 추가된 것을 알 수 있습니다. Tomcat은 인터넷 웹 서비스를 제공하기 위한 Servlet 등의 기능이 포함된 WAS (Web Application Server) 종류 중 하나입니다. Spring Boot에서는 아예 내장(Embedded) 시켜서 사용하기 때문에 별도로 WAS에 배포할 필요가 없이 단독으로 웹 서비스를 제공할 수 있습니다.

implementation ‘org.springframework.boot:spring-boot-starter-web’

build.gradle파일을 열어보면 위와 같은 구문이 추가되었습니다. 기존의 프로젝트에서 Spring Boot Web 을 추가하려고 한다면 처음부터 프로젝트를 생성할 필요없이 위의 내용을 입력하고 저장하기만 해도 동일하게 Dependency를 설정할 수 있습니다.

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloRestController {

    @GetMapping("/hello")
    public String HelloWorld() {
        return "Hello World!";
    }
}

DemoApplication.java 파일 위치에서 마우스 오른쪽 클릭후 New -> Java Class 를 선택하여 HelloRestContrller.java 라는 새 파일을 생성하고 소스를 입력합니다. DemoApplication 클래스를 마우스 오른쪽 클릭해서 Run ‘Demo Application’을 선택하거나 단축키로 “Control + Shift + R”을 누릅니다.

Console 내용을 자세히 보면 Tomcat이 구동되었는데 8080 포트를 사용한다는 내용이 보입니다. 웹 브라우저를 실행해서 URL에 http://localhost:8080/hello 또는 자신의 컴퓨터 ip주소를 안다면 http://ip주소:8080/hello 을 입력해서 실행해 봅니다.

Hello World! 웹 버전이 정상적으로 출력 되었습니다. 이번에는 조금 더 복잡한 소스를 추가해서 저장하고 DemoApplication 을 다시 실행합니다.

    @GetMapping("/hello2")
    public ResponseEntity HelloWordByName(@RequestParam(value = "name", defaultValue = "World!") String name) {

        var map = new HashMap();
        map.put("id", 1);
        map.put("name", name);
        map.put("message", "Hello ".concat(name).concat("!"));

        return new ResponseEntity(map, HttpStatus.OK);
    }

Tomcat 구동이 완료되면 URL에 http://localhost:8080/hello2?name=x1fingers 를 입력해 봅니다. URL에서 name 파라미터에 값을 받아와 출력하는 단순한 프로그램입니다.

기본적으로 @RestController로 지정된 클래스는 RESTFul 형식의 웹 서비스를 제공하기 때문에 JSON 포맷으로 웹 브라우저에 데이터를 출력하는 것입니다. 이것만으로도 화면이 존재하지 않는 API 서버로 바로 사용할 수 있습니다.

그렇다면 많이 들어봤던 JSP(Java Server Page)나 HTML을 웹 브라우저에 제공하려면 어떻게 해야 할까요? Spring Boot는 화면에 HTML출력을 위해 템플릿 엔진인 Thymeleaf 를 표준으로 지원하는데요. JSP를 사용하려면 별도의 설정이 필요하므로 차후 언급하도록 하고 build.gradle에 아래의 내용을 추가하고 저장하도록 합니다.

compile(“org.springframework.boot:spring-boot-starter-thymeleaf”)

DemoApplication.java 파일 위치에 HelloController.java 라는 새 파일을 생성하고 소스를 입력합니다. 소스를 보면 @RestController가 아닌 @Controller로 바뀌어 있음을 확인합니다.

package com.example.demo;

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

@Controller
public class HelloController {

    @GetMapping("/hello3")
    public String HelloWorldHtml(
        @RequestParam(value = "name", defaultValue = "World!") String name, Model model) {

        model.addAttribute("name", name);

        return "hello";
    }
}

그리고 Project 탐색기에 resource – template 디렉토리에 hello.html 파일을 생성하고 소스를 입력힙니다.

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello World!</title>
</head>
<body>
<h1 th:text="'Hello ' + ${name} + '!'" />
</body>
</html>

DemoApplication.java를 재실행하고 URL에 http://localhost:8080/hello3?name=x1fingers 를 입력하면 HTML이 출력되면서 내가 원하는 화면도 표시가 잘 되었습니다.

지금까지 별다른 설정을 하지 않았지만 뭔가 쉽게 만들어 낼 수 있었습니다. 예전에는 이런 내용을 구현하려면 환경설정(Config)을 구축하는 데만 몇 일씩 걸리기도 했는데 정말 세상이 많이 좋았졌습니다!

You may also like...

2 Responses

  1. 2019-02-17

    […] Spring Boot, Hello World! for Web […]

  2. 2019-10-14

    […] Spring Boot, Hello World! for Web […]

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.