반응형

웹을 개발한다는 것은 크게 3가지 방법이 있다.

첫번째 방법은, 정적 컨텐츠이다.
이전에 wlcome page 처럼 서버에서 뭐하는거 없이 그냥 파일을 그대로 웹브라우져에 내려주는 것이다.

두번째 방법은, MVC와 템플릿 엔진방식이다.
예를 들어서 과거에 JSP와 PHP가 소위 말하는 템플릿 엔진인데,
HTML을 그냥 주는 것이 아니라, 서버에서 프로그래밍을 통해 HTML을 동적으로 바꿔서 내리는 것이다.
이런 것을 템플릿 엔진이라고 하고,
이것을 하기 위해서 Model, Controller, View, 패턴을 이용한다.
정적 컨텐츠와의 차이는,
정적 컨텐츠의 경우 파일을 그대로 웹브라우저에 전달해 주는 것이고,
MVC와 템플릿 엔진은 서버에서 html을 조금 바꿔서 내려주는 방식이다.

세번째 방법은 API인데,
만약에 안드로이드를 개발한다고하면, 서버입장에서는 예전에는 xml이라는 포맷을 많이 사용했는데,
요즈음에는 json(JavaScript Object Notation)이라는 데이터구조 포맷으로 데이터를 내려준다.
html이 아니라, 데이터구조 포맷으로 클라이언트한테 데이터를 전달하는 방식을 API방식이라고 한다.

API방식은 요즈음에 뷰, 리액트 등을 쓸 때도 API로 데이터만 내려주면, 화면은 클라이언트가 알아서 그리고, 정리하는 방식에도 이용된다.

그리고 서버끼리 통신할 때는 html을 내릴 필요가 없이 어떤 데이터가 왔다갔다하는지가 중요하기 때문에 데이터만 흐르는데, API방식이라고 한다.

 

정적 컨텐츠

 

Spring Boot Features

Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest

docs.spring.io

스프링 부트는 정적 컨텐츠 기능을 자동으로 제공한다.

기본 설정으로 스프링 부트는 /static 폴더에서 찾아서 제공한다. 라는 것을 확인할 수 있다.

인텔리제이에서 hello-spring 프로젝트의 resources 폴더 밑에 있는 static 폴더에 hello-static.html파일을 생성하고,
강의자료의 html 코드를 그대로 작성해보자.

서버를 실행한 후,
"http://localhost:8080/hello-static.html"  주소로 접속해보자.


작성한 html 화면이 그대로 보여진다.

페이지의 소스보기를 하면, 인텔리제이에서 hello-static.html 파일에 작성한 코드와 완전히 똑같은 것을 확인할 수 있다.

 

이처럼, 스프링 부트에서static 폴더에는 원하는 정적 파일을 넣으면, 그대로 정적 파일이 반환된다.
대신, 여기에는 어떤 프로그래밍을 할 수는 없다. 그냥 파일 그대로 정적으로 반환된다.

이것을 스프링 부트의 정적 컨텐츠 기능이라고 한다.

간단하게 정적 컨텐츠 기능의 원리를 알아보자.

[정적 컨텐츠 이미지]

웹브라우저에서 "http://localhost:8080/hello-static.html" 를 치면,
내장 톰켓 서버에서는 요청을 받고, "hello-static.html" 이라고 요청이 왔대!! 하고 스프링에게 넘긴다.
스프링은 먼저, 컨트롤러 쪽에서 hello-static 이라는게 있는지 찾아본다. 컨트롤러가 우선순위를 먼저 가진다는 의미이다.


그런데, hello라는 컨트롤러는 있었지만, hello-static이라는 컨트롤러는 없다.

그러면, 그다음에 어떻게 하냐면, resources 폴더 내부에 있는 static/hello-static.html을 찾는다.
그렇게 해서 해당 파일을 찾으면, 웹브라우저에 반환을 해주는 것이다.

 

다음시간에는 MVC와 템플릿 엔진이 어떻게 동작하는지 알아보자.

 

반응형