본문 바로가기
Spring Boot

[스프링 웹 개발 기초] 정적 콘텐츠 vs MVC와 템플릿 엔진 vs API

by sharpsim 2022. 1. 10.

스프링 웹 개발에는 3가지 방식이 있다.

 

1. 정적 콘텐츠

2. MVC와 템플릿 엔진

3. API

 

정적 콘텐츠

정적 콘텐츠는 이름에서도 유추해볼 수 있듯이 파일을 그대로 전달한다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello-Static</title>
</head>
<body>
    정적 콘텐츠입니다.
</body>
</html>

 

MVC와 템플릿 엔진

MVC는 Model, View, Controller의 앞 글자를 따온 것으로,

MVC1 방식은 View와 Controller가 분리되지 않은 형태였다. 즉, 데이터베이스에 접근하거나 비즈니스 로직을 처리하는 모든 작업이 View에서 처리되는 방식으로, JSP가 이에 해당한다고 볼 수 있다.

반면 MVC2 방식은 공통 관심사를 분리하기 위해 View와 Controller로 분리하였고, 스프링은 MVC2 방식을 채택하여 사용한다.

@Controller
public class HelloController {
    
    // MVC 방식
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template";
    }

}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Hello-template</title>
</head>
<body>
    <h3>MVC와 템플릿 엔진 이용</h3>
    <p th:text="'Hello, ' + ${name}" >Hello!</p>
</body>
</html>

API

API는 데이터만 전달할 경우 사용한다.

@Controller
public class HelloController {

    // API 방식 (1) 문자 반환
    @GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        return "Hi, " + name;
    }

    // API 방식 (2) 객체 반환
    @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;
        }
    }
}