본문 바로가기

개인 공부/인프런

[JavaSpring] Welcome Page 만들기

728x90

해당 글은 김영환 자바스프링 입문을 보고 요약 필기한 글입니다.

1일차에 localhost:8080을 실행하면 에러페이지가 발생한것을 기억할 수 있다.

그 이유가 main에 아무것도 없기 때문인데, 이번에 에러대신 웰컴페이지를 만들어서 띄워보자

Welcome Page 만들기

src폴더에 resources에 들어가서 static 폴더에 새파일을 만들고 이름을 index.html로 만들어준다.

이후 index.html에 아래 코드를 넣어준다.

<!DOCTYPE HTML>
<html>
<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에 들어가면

이런식으로 작동한다면 웰컴 페이지가 잘 작성되었다는것이다.

Spring Boot가 제공하는 Welcome Page 기능

Spring이란? → 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크라고 생각하면 된다.

엥? 프레임 워크가 뭐에요? → 어떠한 목적을 쉽게 달성할 수 있도록 해당 목적과 관련된 코드의 뼈대를 미리 만들어둔 것을 의미한다.

Spring을 사용하기 위해서는 여러가지 기능을 사용하기 위한 세팅이 필요하다.

이 과정에서 진입 장벽이 있기 때문에 초심자의 경우에는 매우 어렵게 느껴진다.

이러한 문제점을 해결하기 위해서 Spring Boot가 등장했고, Spring Boot를 사용해 Spring을 사용하기 쉬워졌다.

Spring Boot 사용방법

  1. 스프링 부트를 사용하기 위해서 우선 https://spring.io/ 사이트에 이동한다.
  2. Projects > Spring Boot > Learn으로 이동한다.
  3. Spring Boot 프로젝트와 같은 버전의 Reference Doc. 으로 이동한다.
  4. 이곳에서 내가 원하는 기능을 검색하면 된다.

thymeleaf 템플릿 엔진

thymeleaf의 공식 사이트 주소 : https://www.thymeleaf.org/

Spring Boot 공식 가이드 : https://spring.io/guides/gs/serving-web-content/

Controller 사용해보기

화면이 동작되도록 해보자.

새로운 package를 만들어주고, controller라는 이름을 가진 java class도 만들어준다.

이후 만들어준 class파일에 Controller 어노테이션을 적어줘야한다.

아래 코드를 옮겨 적어주면 된다.

package study.studyspring.controller;

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

@Controller
public class StudyController {

    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

맵 어플리케이션에서 hello가 들어오면 GetMapping을 실행한다.

Model은 MVC(Model View Controller)에서의 Model이다.

model.addAttribute("data", "hello!!");

hello라고 data를 넘길거라고 작성한다.

이후 templates에 hello.html을 만들어준다.

heml코드는 아래를 복사하면 된다.

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

xmlns에 th에 타임리프를 불러왔기 때문에 타임리프를 사용할 수 있다.

<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>

위 코드에서 data부분이 아까 작성한 java class에서

model.addAttribute("data", "hello!!");

“hello!!”가 해당한다.

이후 다시 localhost를 실행해서 hello를 클릭하거나 링크에 /hello를 추가로 적으면 아래와 같은 화면이 나온다.

이후 페이지 소스보기를 하면 아래와 같은 화면이 나온다.

${data} 부분이 hello!!로 바뀐게 확인된다.

자세한 설명

아까 index.html에 넣은 코드를 보면안에

<a href="/hello">hello</a>

이 있는게 확인이 된다.

이 코드는 hello를 누르면 /hello 주소로 들어가지게 된다.

이는 곧 아까 만든 java class로 만든 Controller에 GetMapping에 hello가 있기 때문에 아래 코드가 실행된다.

@GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        return "hello";
    }
}

위에 말했지만 data를 hello!!로 return할 대상에 전달하게 된다.

이 return “hello”는 만들어둔 hello.html을 탐색하여 해당 값에 data를 넘겨주게 된다.

  • 엥? 이게 어떻게 자동으로 되는건가요?
  • 스프링 부트 템플릿 엔진은 기본적으로 viewName 매핑이 된다.
    ⇒ ’resoruces:templates/’ + {ViewName} + ‘.html’ 파일을 자동으로 매핑

최종적으로는 ${data}에 hello!!가 전해지게 되는것이다.

728x90