인프런 강의/김영한 Spring

[Spring MVC] 정적 컨텐츠, 템플릿 엔진, API

뱅어돔 2023. 11. 24. 18:33

스프링의 기본기를 탄탄히 하기 위해 김영한의 Spring 강의를 듣기 시작했다.

원래 알던 내용이 많지만 동작 원리에 대해 더 심층적으로 이해하기 위해 공부하려고 한다.

 

정적 컨텐츠 (static)

static 폴더에 hello-static.html 파일을 생성한다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    static content
</body>
</html>

 

http://localhost:8080/hello-static.html 경로를 치고 들어가면 해당 뷰로 연결된다.

 

 

hello-static이라는 컨트롤러가 없기 때문에 static에 있는 hello-static이라는 이름의 html 파일을 찾음

 

 


 

템플릿 엔진

MVC: Model, View, Controller

템플릿 엔진: 동적으로 생성되는 웹 페이지나 문서의 구조와 내용을 분리하여 관리하는 도구

템플릿 파일과 데이터를 결합하여 최종적으로 출력되는 문서를 생성한다. 템플릿 엔진을 사용하면 웹 애플리케이션에서 동적으로 변하는 내용을 쉽게 표현하고 관리할 수 있다.

@Controller
public class HelloController {

    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return  "hello-template";
    }

}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <p th:text="'hello ' + ${name}">hello empty</p>
<!--    hello empty 부분이 템플릿 엔진을 통해 th:text의 값으로 치환 됨-->

</body>
</html>

http://localhost:8080/hello-mvc?name=spring! 경로로 이동하면 ${name}의 부분이 내가 주소창에 name 값으로 입력한 sprign! 으로 치환된다.

 

@RequestParam: 주소창에 입력된 값을 파라미터로 가져온다.

 


 

 

API

1. @ResponseBody로 String 값 내려주기

    @GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        return "hello " + name;
    }

 

http는 header와 body로 구성되어 있음

@ResponseBody: body에 리턴값을 직접 넣어주겠다는 뜻

html 태그 없이 그대로 데이터를 내려줌 -> 페이지 소스를 보면 hello spring 문자열만 내려주게 됨

 

 

 

2. API 방식 (JSON)

    @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;
        }
    }

 

alt + insert: getter, setter, 생성자 등 만드는 단축키

Hello 객체의 name 값이 private이기 때문에 getter, setter를 만들어 줌 -> property 접근 방식

 

 

http://localhost:8080/hello-api?name=spring! 경로로 이동해 name 값을 넣어주면 xml 방식이 아닌 JSON 방식으로 반환하게 됨

더보기

JSON: key, value 방식

 

Jackson: 객체 <-> JSON 형식 컨버팅 처리하는 라이브러리

 

 


 

정적 컨텐츠, MVC & 템플릿 엔진, API 정리

  • 정적 컨텐츠
    html 파일을 그대로 내려줌
  • MVC & 템플릿 엔진
    템플릿 엔진을 MVC 방식으로 쪼개서 렌더링 된 html을 클라이언트에게 반환
  • API
    객체를 JSON 형식으로 컨버팅 하고 뷰 없이 http Response에 값을 담아서 반환