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

2023. 5. 1. 02:27카테고리 없음

정적 컨텐츠란 스프링에서 톰캣으로 URL을 받은뒤, 컨트롤러에서 한번 맞는 인덱스 값이 있다면, 그 값을 뷰에 있는 html의 코드를 그대로 웹 브라우저로 넘어가는 것을 말한다. 하지만 만약 맞는 인덱스 값이 없다면, static파일로 가서 그에 맞는 html 파일을 찾아 그 파일 그대로 웹 브라우저에 넘기게 되고, 그 웹 브라우저 또한 소스 코드에는 html파일 그대로 올라가게 되는 것을 말한다.

@GetMapping("hello1")
    public String hello(Model model) {
        model.addAttribute("data","spring!!");
        return "hello";
    }

위 코드는 컨트롤러에 있는 값이다.

코드의 입력값이다.
URL과 그에 대한 입력값이다.

MVC

<html xmlns:th="http://www.thymeleaf.org">

<body>
<p th:text="'hello '+ ${name}"> hello! empty</p>
</body>
</html>

위에 정적 컨텐츠와 달리 MVC는 쪼개서 보는 형식인데 M(Model)V(View)C(Controller)이라는 약자로, 웹 브라우저에서 어떤 URL을 입력받으면 톰캣에서 그 URL을 먼저 우선순위를 가지고 있는 컨트롤러에서 모델 이름을 찾고,  뷰 리졸버에 넘긴뒤 뷰 리졸버에서 타임리프 템플릿 처리를 해주어서 다시 웹브라우저에 값을 보낼땐 html 입력값으로 보내게 된다. 이 MVC는 혼자 컨트롤러도 만들어야 하고, 뷰쪽도 자기가 만들어야 한다.

 

API

API는 위에 두가지와 달리 @ResponseBody(HTTP의 Body 부분에 있는 것을 뜻함)  라는 코드가 하나 더 들어가게 되는데 이 뜻은, 코드에서 어떤 값을 받아내겠다는 것이 아니라, 우리가 웹 브라우저에서 URL을 검색할때, 그 문자를 입력 받겠다는 뜻이 된다. 밑에 코드와 같이

MVC에 대한 코드이다.

저렇게 입력하고 실행한 뒤 홈페이지에서 다음과 같이 입력을 하면

URL입력값

밑에 있는 입력 값처럼 위에 URL에 적었던 입력값과 같이 똑같이 나오게 된다. 원리는 위에 URL을 톰캣서버에서 받은 뒤 컨트롤러에 넘겼을때, @ResponseBody가 있다면, 그 데이터를 HttpMessageConverter가 작동을 하게 되는데, 위에서 받은 객체를 json형태로 자동으로 바꾸게 된다. 그렇게 바꾼뒤에 다시 바꾼걸 웹브라우저에 띄우게 되니 저렇게 나오게 되는 것이다. MVC와 차이점은 저렇게 컨트롤러에서 리턴값으로 어떤 값을 출력하려고 한다고 하면, 저것은 뷰리졸버같은 것이 없고 바로 웹 브라우저에 넘어가게 된다. 그렇기 때문에, 위 홈페이지에 나오는 값과 같게 되는 것이다.