📢 김영한님이 지음,
[스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술] 강의를 정리한 글입니다.
스프링으로 만들 수 있는 웹에는 크게 3가지 방식이 있다.
정적 컨텐츠, MVC 와 템플릿 엔진, API 방식이 있다.
📢 우선 정적 컨텐츠부터 살펴보자.
대표적인 예시로는 섹션 1에서 만든 웰컴 페이지가 있습니다.
💻 HTML 작성
hello-spring\src\main\resources\static
하위에 index.html
파일을 생성하고 다음과 같이 작성해줍니다.
<<!--welcome 페이지는 도메인을 쳤을 때 바로 보여지는 페이지(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:8080
요청이 들어오게 되면 index.html
파일을 반환을 해줍니다. 이를 웰컴 페이지라고 합니다.
✨ 모든 기능들을 외울 수는 없다. 내가 찾고 싶은 기능이
있을 때는 스프링 부트에서 제공하는 메뉴얼에서 찾을 수 있어야 한다.
https://docs.spring.io/spring-boot/docs/current/reference/html/
정적 컨텐츠 예시를 하나만 더 보고 넘어가겠다.
💻 HTML 작성
hello-spring\src\main\resources\static
하위에 hello-static.html
파일을 생성하고 다음과 같이 작성해줍니다.
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
👉🏻 프로젝트 실행
클라이언트로부터 localhost:8080/hello-static.html
요청이 들어오게 되면 우선 Tomcat 서버를 거치고 그 다음 컨트롤러에서 hello-staic
에 매핑하는 동작이 있는 확인합니다.
이후 해당 동작이 없을 경우 /resources/static
하위에서 해당하는 파일을 찾아 반환해줍니다.
📢 두번째 MVC와 템플릿 엔진을 살펴보자.
Controller
가 서버단에 필요한 부분을 처리를 하고 필요한 정보를 Model
에 저장을 하여 View
로 던져주는 로직이다.💻 Controller 작성
우선 HelloController
에 /hello-mvc
경로가 들어오면 어떤 동작을 할 것인지 다음과 같이 작성을 해줍니다.
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name", required = false) String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
💻 View 작성
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
@GetMapping("hello-mvc")
어노테이션을 통해 /hello-mvc
와 같은 GET 요청이 들어왔을 경우 helloMvc() 메소드를 호출합니다. @RequestParam
에노테이션을 활용하여 파라미터값을 받고 있다. addAttribute()
를 통해 값을 모델에 저장을 합니다."hello-template"
를 반환을 하면 ViewResolver
가 해당 템플릿을 찾아서 Thymeleaf 엔진에게 처리해달라고 넘기고, Thymeleaf 엔진은 model
에 저장된 데이터를 가져와 값을 변환하여 반환합니다. 👉🏻 프로젝트 실행
localhost:8080/hello-mvc?name=string
와 같이 파라미터값과 함께 요청을 하면 다음과 같이 보입니다.
📢 마지막으로 API를 이용한 웹 개발에 살펴보겠다.
💻 Controller 작성(문자 반환)
HelloController
에 "hello-string"
라는 요청이 들어왔을 경우 동작하는 메소드를 작성해줍니다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
@ResponseBody
어노테이션을 적어주면 viewResolver
를 거쳐서 view 템플릿을 보여주는 것이 아니라 HttpMessageConverter
가 동작해서 문자를 반환합니다. @ResponseBody
에서 body는 반환값을 HTTP 요청의 body내용에 맞게 매핑하여 반환을 하겠다는 의미이다. 👉🏻 프로젝트 실행
html 태그가 없이 그냥 문자열 그 자체를 반환하는 것을 볼 수 있다.
✨ 주로 사용되는 방식은 문자열이 아니라 객체 형태를 반환하는 방식이다.
💻 Controller 작성 (객체 반환)
HelloController
에 "hello-api"
라는 요청이 들어왔을 경우 Hello 객체를 반환해주는 메소드를 작성해줍니다.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
👉🏻 프로젝트 실행
@ResponseBody
어노테이션을 적어주면 HttpMessageConverter
가 동작을 한다.JSON
형태로 만들어서 반환을 해줍니다.