본문 바로가기
개발/Spring

[스프링 입문] 스프링 Welcome Page 만들기

by ujin2021 2021. 6. 29.

* 인프런 김영한님의 '스프링 입문' 강의를 듣고 작성한 내용입니다! (https://inf.run/txXC)

* IDE : IntelliJ (Eclipase 도 가능하지만 인텔리제이 추천!) (intelliJ 설치 참고 블로그 : https://goddaehee.tistory.com/195)

* Java 11 설치 (Windows Java 11 설치 참고 블로그 : https://programmer-ririhan.tistory.com/118)

 

* spring 환경설정은 이전 포스트를 참고해주세요!

2021.06.29 - [개발/Spring] - [스프링 입문] 스프링 프로젝트 환경설정

 

[스프링 입문] 스프링 프로젝트 환경설정

* 인프런 김영한님의 '스프링 입문' 강의를 듣고 작성한 내용입니다! (https://inf.run/txXC) * IDE : IntelliJ (Eclipase 도 가능하지만 인텔리제이 추천!) (intelliJ 설치 참고 블로그 : https://goddaehee.tist..

ujin-dev.tistory.com

* Thymleaf 

이전에 프로젝트 zip 파일을 생성할 때, dependencies에 thymleaf를 추가했었는데, 이것은 템플릿 엔진이다

(템플릿 엔진이란 ? https://show-me-the-money.tistory.com/56)

간단하게 설명해서 템플릿 엔진이란 템플릿 양식 + 모델 이 두가지를 합해서 결과문서를 내는 것 입니다. 같은 페이지 안에서 데이터가 바뀌는 경우가 많은데, 이때 전체 페이지를 다시 로드하는 것은 비효율 적이므로 이것을 효율적으로 처리해주는 것이 템플릿 엔진입니다.

 

1. Welcome page 만들기

* 어떻게 Welcome page를 생성하지? => spring.io 공식문서에서 확인 가능

spring.io > Projects > Spring boot > Learn > 2.5.2의 Reference Doc.

* 이 링크에서 welcome page를 만들려면 index.html을 생성해야 한다는 것을 알 수 있다.

* 파일 경로 : src-main-resources-static-index.html

* index.html을 생성하면, 자동으로 해당 파일이 spring boot의 welcome page(localhost:8080에 들어가면 나오는 페이지. path가 /)로 설정됩니다.

* 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>

 

2. Controller 만들기

* 파일 경로 : src-main-java-hello.hellospring-controller package 생성-HelloController Class 생성

* HelloController.java 코드

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

* Controller annotation 붙이기(@Controller)

* @GetMapping("hello") : /hello url에 Get요청을 하면 밑의 로직으로 동작해라!

* model.addAttribute에서 data는 key값, hello!!는 value이다

* return "hello" 를 해주면 resources-template-hello.html을 return 하라는 뜻이다

* 즉 localhost:8080/hello 에 접속하면(Get) hello.html을 반환하라는 동작을 짠 코드이다

 

3. hello.html 만들기

* 파일 경로 : src-main-java-resources-templates-hello.html

* hello.html 코드

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

* 여기서 ${data}로 데이터를 넣어주기때문에 템플릿 엔진인 thymleaf를 사용한다

* html 태그의 xmlns:th="http://ww.thymleaf.org"가 타임리프를 사용하겠다는 뜻이다

* controller에서 data:hello!! 로 attribute를 세팅해줬기 때문에 ${data}안에는 hello!! 가 들어가서 "안녕하세요. hello!!" 가 뜨게 된다

* "안녕하세요. 손님" 은 타임리프를 적용안하고 그냥 로컬에서 html파일을 열었을 때 뜨는 메시지이다. 타임리프가 적용되면 p태그의 th:text 부분이 뜨게된다

 

* ViewResolver

- controller에서 리턴값으로 문자를 반환하면(위에서 "hello" 반환) viewResolver가 화면을 찾아서 처리한다

- 스프링부트 기본 viewName 매핑 : templates/viewName.html