2024.02.25 - [Framework/Spring, Spring Boot] - [Spring] MVC 아키텍처
앞서 다룬대로,
클라이언트의 HTTP 요청을 처리하는 곳이 컨트롤러이다.
그렇다면, 정적 리소스는 무엇일까?
정적 리소스를 설명하기 위해 클라이언트가
HTML 문서를 요청하는 경우를 살펴보고자 한다.
클라이언트가 웹 서비스를 이용하려면
직접 눈으로 볼 수 있는 웹 페이지가 필요하다.
이 웹 페이지는 하나의 HTML 문서인데,
클라이언트에게 고정된 HTML 문서를 보내는 경우
'정적 리소스'로 등록하는 것이 이점이 될 수 있다.
물론 서버에서 HTML 문서를 동적으로 생성하기 위해
JSP나 Thymeleaf와 같은 '템플릿 엔진(Templete Engine)을
사용하는 방법도 있다.
(이때는 서비스의 규모에 따라 장단점이 있다.)
정적 리소스 개념
정적 리소스란,
웹 애플리케이션에서 변경되지 않는 파일들을 말한다.
주로 HTML, CSS, JavaScript, 이미지 파일 등이 해당한다.
이러한 리소스들은 서버에서 그대로 제공되고
동적인 처리 없이 클라이언트에게 바로 전송된다.
예를 들어, 웹 페이지의 디자인이나 이미지와 같이
자주 변경되지 않는 리소스들을 정적 리소스라고 말한다.
스프링 부트에서 정적 리소스 추가하기
스프링 부트에서 정적 리소스를 추가하는 방법은
프로젝트의 'src/main/resources/static' 경로에
있는 디렉토리에 정적인 파일을 넣어두면 된다.
혹은 static 디렉토리에 마우스 오른쪽 버튼을 눌러서
New > File을 클릭하여 생성하려는 정적인 파일의
파일명을 입력하고 엔터키를 누르면 해당 파일이
정적 리소스로서 static폴더 안에 추가된다.
예를 들어 test.html 파일을 정적 리소스로 추가했다면
해당 파일이 static폴더 안에 생성되었을 것이고
그 파일을 열어서 HTML 코드를 입력하면 된다.
HTML문서뿐 아니라 이미지도 위 경로에
맞게 추가하면 정적 리소스로서 기능한다.
정적 리소스를 추가했다면, 반드시
애플리케이션을 재시작해야 한다.
(즉, 재시작되지 않으면 없는 파일로 간주된다.)
+
src/main/resources/public 디렉토리?
Spring Boot 2.3 버전부터는 static 디렉토리 외에도
public 디렉토리를 사용할 수 있다.
static 디렉토리와 마찬가지로 public 디렉토리에도
정적 리소스 파일을 추가할 수 있다.
+
정적 리소스의 위치를 만약에 바꾸고 싶다면?
스프링 부트에서는 application.properties 또는
application.yml 설정 파일을 사용하여
정적 리소스 위치를 변경할 수 있다.
해당 설정 파일에 입력한 코드대로
특정 파일이 정적 리소스로 추가되어 있지
않다면, 404에러가 발생한다.
컨트롤러 vs 정적 리소스
컨트롤러를 통해 동적인 응답을 제공하는 방법과
정적 리소스를 등록하여 파일을 제공하는 방법에는
여러 차이점이 존재한다.
기능적인 측면에서 보면,
컨트롤러에 동적인 응답을 제공하려면 그에 맞는
로직을 구현해 줘야 하지만, 정적 리소스를 사용한다면
별도로 새로운 로직을 작성할 필요 없이 단순히 파일을
static 디렉토리에 추가하고 서버를 재시작하면 된다.
컨트롤러에서도 클라이언트의 요청에 따라 특정 파일을
읽어서 응답할 수 있지만 그 과정에서 자원이 불필요하게
사용된다는 점에서 비효율적인 측면이 있다.
물론 실제 서비스에서는 서비스의 규모에 따라
고려해야 할 점이 많아서 단정적으로 말하기는 어렵다.
'Framework > Spring, Spring Boot' 카테고리의 다른 글
서블릿(Servlet)과 JSP의 차이 + JVM, JDK, JRE (0) | 2024.02.26 |
---|---|
[Spring] MVC 아키텍처 (1) | 2024.02.25 |