스프링 부트는 정적 웰컴 페이지와 템플릿 기반의 웰컴 페이지를 모두 지원합니다. 스프링부트는 도메인의 루트 경로에서 웰컴 페이지를 제공하기 위해 두 가지 접근 방식을 사용합니다.
아래 과정은 애플리케이션 내 어느 controller가 '/'경로에 대한 getMapping 메소드를 정의하지 않은 것을 가정합니다.
(웰컴 페이지의 경우 일반적으로 컨트롤러 메소드를 사용하는 것보다 정적 리소스나 템플릿 엔진을 이용하는 것이 더 간단하고 효율적입니다.)
/static
, /public
, /resources
, /META-INF/resources
디렉토리에 index.html
파일이 있는지 찾습니다.index.html
파일을 찾지 못한 경우에는, src/main/resources/templates
디렉토리에서 index
라는 이름의 템플릿을 찾습니다.[요청 수신] : 클라이언트에서 / 경로에 대한 요청이 서버로 전달됩니다. 내장 톰캣 서블릿 컨테이너가 요청을 수신하고, DispatcherServlet으로 전달합니다.
[핸들러 매핑] : DispatcherServlet은 요청을 처리할 핸들러를 결정하기 위해 핸들러 매핑 과정을 수행합니다. 이 경우, 루트 경로에 대한 컨트롤러가 없기 때문에, 정적 리소스를 처리하는 ResourceHttpRequestHandler를 선택합니다.
[정적 리소스 핸들러 처리] : ResourceHttpRequestHandler는 요청된 정적 리소스를 찾기 위해 구성된 리소스 리졸버를 사용합니다. 기본 리소스 리졸버는 PathResourceResolver입니다.
[리소스 리졸버를 통한 웰컴 페이지 탐색] : PathResourceResolver는 스프링 부트가 정의한 기본 정적 리소스 위치(/static, /public, /resources, /META-INF/resources)에서 index.html 파일을 찾습니다. 이 경우, 패키지 내 static/index.html이 있으므로 해당 파일이 찾아집니다.
[웰컴 페이지 반환] : ResourceHttpRequestHandler는 찾은 index.html 파일을 클라이언트에 반환합니다. 이렇게 웰컴 페이지가 처리되고 반환됩니다.
이 과정에서 DispatcherServlet
, ResourceHttpRequestHandler
(리소스 핸들러), PathResourceResolver
(리소스 리졸버)가 협력하여 정적 리소스로 구성된 웰컴 페이지를 처리하고 반환합니다. 각 컴포넌트는 자신의 역할에 따라 요청을 처리하고, 최종적으로 정적 웰컴 페이지가 클라이언트에게 전달됩니다.
출처
docs.spring.io 공식 문서
리소스 리졸버로 자원 요청 경로 커스텀
리소스 핸들러로 외부 디렉토리 파일 참조
리소스 핸들러 커스텀하여 특정 요청에 대한 리소스 컨트롤