티스토리 뷰

 

이 내용은 스프링 공식 레퍼런스의 7.1.6. Welcome Page 항목의 내용을 참고하여 작성하였습니다.

 

 

1. Welcome Page

스프링 부트는 Welcome Page를 두 가지 방법으로 제공한다. 

 

첫 번째 방법은 static content 공간에 index.html이라는 html 파일을 만들면 된다.

즉 프로젝트 생성 시 기본적으로 있는 resource 폴더에 있는 static 폴더에 index.html 파일을 읽게 된다.

 

 

실행 시 다음과 같이 잘 나오는 것을 확인할 수 있다.

 

 

 

 

두 번째 방법은 templates 폴더에 index.html을 만드는 경우이다.

 

 

html 파일만 아래 파일로 옮겨주었다. 결과는 마찬가지로 잘 작동한다.

 

참고로 두 가지 방법은 우선순위가 있는데, 첫 번째 static 폴더에 index.html 파일이 있다면 반드시 해당 파일이 welcome page가 되고, 만약 static 폴더 안에 없다면 두 번째 templates 폴더에 index.html 파일이 있는지 확인하게 된다.

 

하지만 두 군데 다 없으면 어떤 페이지를 보여줄까?

 

 

바로 이 페이지가 등장한다.

보통 스프링 강의를 들으면 처음에 프로젝트 생성 후 실행시켜 이 페이지가 보이면 잘 생성한거에요~ 라고 하는 페이지이다.

 

이 부분까지가 스프링 공식 문서의 내용이다. 필자는 더 나아가 내부 동작원리를 파헤쳐보았다.

 

 

2. Welcome Page 동작원리

 

1) WebMvcAutoConfiguration

 

스프링 MVC의 자동 구성을 담당하는 클래스이다.

우리가 알아보고있는 Welcome Page의 동작 부분은 위 클래스에서 담당하게 된다.

 

 

모양은 이렇게 생겼다. 만약 직접 찾아보고 싶다면 아무 자바 클래스를 만들고 implement WebMvcAutoConfiguration 를 해줘서 import 해준 후, 커맨드 또는 컨트롤 키 + 마우스 왼쪽 버튼을 누르면 자세히 볼 수 있을 것이다.

 

 

2) welcomePageHandlerMapping

 

 

위에서 설명한 WebMvcAutoConfiguration 클래스에서 welcome이라고 검색한 결과 이런 메서드가 나왔다.

 

결국 여기서 반환하는 것은 WelcomePageHandlerMapping 이라는 녀석이라서, 일단 더 접근해보았다.

 

 

접근 결과, 꽤 유의미한 정보를 얻을 수 있었다. 여기 WelcomePageHandlerMapping 생성자는 if ~ else if 문을 통해 두 갈래로 나뉘는 게 된다.

 

먼저 첫 번째 if문의 경우 인자로 받은 welcomePage, staticPathPattern 두 가지를 이용해 무언가를 하고 있다.

이 두가지는 WebMvcAutoConfiguration에서 만들어 인자로 전달한 것인데,

 

먼저 welcomePage는 다음과 같다.

 

 

더욱 자세히 설명하면 오히려 독이 될 수 있으니, 그냥 index.html이 존재하면 그 파일을, 아니라면 null 값을 반환한다고 하자.

 

staticPathPattern은 그냥 이렇게 생긴 녀석이다. 아마 welcomePage의 경로를 물어볼 때, static 폴더가 존재하면 이렇게 만들어주는 듯하다.

 

 

 

따라서 다시 if문을 보면 이렇게 해석할 수 있다. static 폴더가 존재하며, 이 안에 index.html 파일이 있다면 그곳으로 포워딩한다.

 

 

 

다음은 else if문이다. 

여기서는 welcomeTemplateExists라는 메서드를 호출하는데, 고맙게도 바로 아래 있다.

 

 

TemplateAvailabilityProviders라는 녀석을 따라가 getProvider를 조사해보니, 첫 번째 인자로 View를 받는다.

추측컨데, templates 폴더에 index라는 view 파일이 존재하면 true를 반환하는 듯하다. 따라서 index.html 파일이 존재하면 true이다.

 

따라서 요약하자면, 스프링 mvc의 자동 구성 -> WelcomePageHandlerMapping의 생성 과정에서 두 가지 케이스를 처리하게 된다.

다만, if ~ else if문이라 두 경우 모두 해당되지 않으면 아무것도 생성되지 않는데, 이 경우 setCorsConfigurations 부분에서 null처리를 해주는 것으로 보아, 여기서 오류 핸들러를 통해 WhiteLabel View를 생성하는 듯하다. (사실 찾다가 복잡해서 못 찾았다..)

'노답 스터디 > Spring' 카테고리의 다른 글

[Spring] ByteBuddyInterceptor  (0) 2021.07.22
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함