Spring의 방대한 데이터를 간단하게 사용할 수 있게끔 해주는 SpringBoot를 인텔리제이에서 사용해보자.
Spring Web
Spring Boot Devtools
thymeleaf
예제 진행을 위해 3개의 라이브러리를 사용해보려고 한다.
Chap01AutoConfigurationLectureSourceApplication
package com.jehun.chap01;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Chap01AutoConfigurationLectureSourceApplication {
public static void main(String[] args) {
SpringApplication.run(Chap01AutoConfigurationLectureSourceApplication.class, args);
}
}
applicatoin.properties
test.value=abc
test.username=jehun
스프링에서의 main을 실행하면 @SpringBootApplication의 설정 정보로 인해
1. 톰캣이 켜진다 -> 서블릿 컨테이너가 켜진다. 디스패처 서블릿 (Bean X) 또한 톰캣 내부에 뜨게 된다.
2. 그 이후 IoC Container가 켜져 우리가 등록한 Bean 들 또한 컨테이너에 등록한다.

참고 : embedded.tomcat 부분이 내장 톰켓을 의미한다. 현재는 8080 포트로 돼 있다.
하지만 요즘은 properties 파일을 잘 사용하지 않는다..
반복되는 코드가 많아질 수 있어서 가독성이 떨어질 가능성도 있기 때문이다.
그래서 yaml 파일에 대해 알아보자.
application.yml
test:
value: def
age: 10
value는 위의 properties 파일과 겹친다. 누가 더 우선순위인지 알아보자.

우선순위가 properties 에게 밀리긴 한다. 그렇기 때문에 yaml 파일을 사용할 것인데 겹치면 헷갈릴 수도 있기 때문에 하나만 택한다.
properties 파일 삭제
포트 변경하려면 yml 파일에서
server:
port: 8888
이런 식으로 변경해주면 바뀌게 된다.
/menu/register 경로의 GET 요청을 받아보자.
Chap02RequestMappingLectureSourceApplication
package com.jehun.chap02;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Chap02RequestMappingLectureSourceApplication {
public static void main(String[] args) {
SpringApplication.run(Chap02RequestMappingLectureSourceApplication.class, args);
}
}
MethodMappingTestController
package com.jehun.chap02;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class MethodMappingTestController {
// @GetMapping("/menu/register")
@RequestMapping(value = "/menu/register", method= RequestMethod.GET)
public String registerMenu() {
System.out.println("/menu/register 경로의 GET 요청 받아보기");
return "mappingResult";
}
}
resources/static/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Spring Request Mapping 테스트</h1>
<h2>1. 메소드에 요청 매핑하기</h2>
<h3>GET: /menu/register</h3>
<button onclick="location.href='/menu/register'">GET 메뉴 등록 요청</button>
</body>
</html>
resources/template/mappingResult.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>응답 페이지</h3>
</body>
</html>
브라우저에서 localhost:8080/

버튼 누른 뒤

이런 상태에서 이제 model을 추가하면서 다른 방식으로도 할 수 있다.
mappingResult.html 수정
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- <h3>응답 페이지</h3>-->
<h3 th:text="${message}"></h3>
</body>
</html>
MethodMappingTestController 수정
@RequestMapping(value = "/menu/register", method= RequestMethod.GET)
public String registerMenu(Model model) {
System.out.println("/menu/register 경로의 GET 요청 받아보기");
model.addAttribute("message", "신규 메뉴 등록용 핸들러 메소드 호출하고 응답한 페이지");
return "mappingResult";
}
실행 결과

컨트롤러에 추가
// @PostMapping("/menu/modify")
@RequestMapping("/menu/modify")
public String modifyMenu(Model model) {
model.addAttribute("message", "POST 방식의 메뉴 수정용 핸들러 메소드 호출함...");
return "mappingResult";
}
index.html 에도 button 아래에 추가
<h3>POST: /menu/modify</h3>
<form action="/menu/modify" method="post">
<button type="submit">POST 메뉴 수정 요청</button>
</form>


컨트롤러에 추가
@GetMapping("/menu/delete")
public String getDeleteMenu(Model model) {
model.addAttribute("message", "GET 방식의 메뉴 삭제용 핸들러 메소드 호출함");
return "mappingResult";
}
@PostMapping("/menu/delete")
public String postDeleteMenu(Model model) {
model.addAttribute("message", "POST 방식의 메뉴 삭제용 핸들러 메소드 호출함");
return "mappingResult";
}
index.html에 추가
<h3>GET: /menu/delete</h3>
<button onclick="location.href='/menu/delete'">GET 메뉴 삭제 요청</button>
<h3>POST: /menu/delete</h3>
<form action="/menu/delete" method="post">
<button>POST 메뉴 삭제 요청</button>
</form>
실행해보면 둘다 잘 될 것이다.