이 글은 인프런에 있는 김영한님의 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의를 듣고 정리한 필기입니다.
⛅️ 웹을 개발하는 세 가지 방법
웹을 개발하는 방법에는 크게 세 가지가 있다.
정적 컨텐츠, MVC와 템플릿 엔진, API가 그 예인데, 어떤 것인지 간단하게 알아보자.
1. 정적 컨텐츠 (static contents)
바로 이전 시간에 사용했던 방식이다.
welcome page를 만들었던 것처럼 서버에서 따로 가공을 거치지 않고 파일을 웹 브라우저에 그대로 보내는 방식이다.
2. MVC와 템플릿 엔진(template engine)
가장 많이 사용하는 방식이다.
먼저 템플릿 엔진(template engine)을 살펴보자. 과거의 JSP, PHP 같은 것들이 template engine이다.
정적 컨텐츠처럼 html을 웹 브라우저에 그대로 보내는 것이 아니라, 프로그래밍을 해서 html을 동적으로 바꿔서 웹 브라우저에 보내는 일을 한다.
이런 방법을 사용하기 위해서는 Model, View, Controller가 필요한데, 이를 합쳐서 MVC라고 부른다.
정적 컨텐츠와의 차이점은 무엇일까?
파일(html)을 웹 페이지에 그대로 전달해주는 것이 정적 컨텐츠 방식의 웹 개발인 반면,
MVC와 Template engine 방식은 server에서 약간의 변형을 하여 system을 바꿔서 웹에 띄우는 방식이다.
3. API
html과 같은 방식이 아니라 JSON이라는 데이터 구조 포맷으로 클라이언트에게 데이터를 전달하는 방식을 API 방식이라고 한다.
view나 react를 사용할 때에도 API 방식을 사용한다.
⛅️ 정적 컨텐츠란?
Spring boot는 정적 컨텐츠 가능을 자동으로 제공한다.
위 사이트에 들어가면 Static contents(정적 컨텐츠)에 대한 정보가 어느정도 적혀있는데, spring boot는 /static 경로에 있는 static content들을 제공한다는 내용이 있다.
IntelliJ에서 직접 해보도록하자. IntelliJ에서 /static 경로에 hello-static.html 을 만들고 그 안에 아무 내용이나 넣어보자.
이후 localhost:8080/hello-static.html 로 들어가면 해당 내용이 그대로 올라와있는 것을 알 수 있다.
이를 통해 알 수 있는 사실은 원하는 파일을 resources/static 폴더에 넣으면 그대로 반환이 된다는 것이다.
대신 이 방법은 정적 컨텐츠 방식이기 때문에 이후 가공이 들어가지 않고 그대로 반환이 된다.
⛅️ 정적 컨텐츠의 대략적인 작동 방식
1. 웹 브라우저에서 localhost:8080/hello-static.html에 대해서 내장 서버인 tomcat에게 요청한다.
2. tomcat 서버는 hello-static.html에 대해서 다시 Spring에게 요청한다.
3. Spring이 hello-static.html 요청을 받으면
a. 먼저 Controller에게 요청을 보낸다. (즉, Controller가 우선순위를 가진다.) Controller에 hello-static을 mapping 해놓은 메서드가 있는지 확인한다.
b. Controller에서 hello-static이 mapping된 메서드를 못 찾았으므로, spring은 resources/static 폴더에서 hello-static.html 파일을 찾는다. 해당 파일을 찾게되면 그 파일을 반환해준다.