본문 바로가기
IT_Developers/JAVA

Spring - DispatcherServlet / 스프링이 컨트롤러를 찾는 방법 살펴보기

by 고코더 2019. 8. 11.

DispatcherServlet이 컨트롤러를 가져오는 방법


안녕하세요.
고코더 입니다.


오늘은 스프링에 핵심이자 특별한 존재인 DispatcherServlet을 좀 더 자세히 알아보겠습니다.
이전 스프링 구조도에서 중앙에서 모든걸 처리하는 역할을 했습니다.
-> Spring - 스프링 MVC 구조도 / 이해하기 쉬운



DispatcherServlet은 기존에 Web.xml이 담당했던 servlet 맵핑을 대신합니다. 그 덕에
복잡한 XML작성에서 해방 되었습니다. MVC를 가능하게 해준 이 서블릿에 대해
소스를 위주로 알아보겠습니다.
이전에 함께 만든 프로젝트 파일 기준으로 살펴봅니다. 

 1. web.xml 


 1-1. 패키지에서 src->main->webapp->WEB-INF->web.xml을 열어봅니다.


 1-2. 그 다음 XML에서 정의된 내용들을 함께 살펴 봅니다. 

20번 라인
- DispatcherServlet 기능을 참조하여
19번 라인
- appServlet 으로 네임을 지정 합니다.
29번 라인
- appServlet은 URL 패턴을 맵핑 합니다.
30번 라인
- 모든 URL에 대한 맵핑을 담당 합니다. 즉 모든 프론트 접속을 담당 합니다.

결론은 web.xml에 서블릿 맵핑을 DispatcherServlet 위임한 내용을 확인 가능합니다.



 2. 디스패처서블릿 소스 / spring-webmvc-3.1.1.RELEASE.jar


DispatcherServlet은 스프링 프레임워크에 기능입니다. 

 2-1. 해당 디스패처서블릿 기능은 스프링 spring-webmvc-3.1.1.RELEASE.jar 존재합니다.
해당 jar를 열어보세요.


 2-1. 해당 jar안에 DispatcherServlet.calss 로 정의 되어 있고 오픈 소스라 공개는 되어 있지만 해석하기 어렵지만 해당 jar에 class로 만들어져 있다는걸 눈으로 확인해보는 것도 도움이 됩니다.



 3. 컨트롤러에 어노테이션 / Controller


 3-1. 스프링에서 컨트롤러 파일을 열어보겠습니다.
기본으로 만들어져 있는 HomeController.java를 소스를 열어보세요.


 3-2. 보시면 컨트롤러가 어노테이션으로 선언되어 있습니다. 
이 어노테이션으로 해당 소스가 컨트롤러라고 선언하고 
서블릿 프로젝트 처럼 web.xml에 컨트롤러를 매번 선언하지 않고도 자동으로
스프링이 스캔하여 컨트롤러 기능을 실행하게 합니다. 




 4. 컨트롤러 스캔 / context:component-scan


해당 컨트롤러에 어노테이션들이 자동으로
스프링에 컨트롤러 역할을 만들어주는건 해당 컨트롤러를
찾는 스캔을 하기 때문입니다.

 4-1. servlet-context.xml 을 열어봅니다.


 4-2. 해당 라인에서 context:component-scan에서 hello 팩키지가 설정되어 있습니다.
이 명령어를 통해서 패키지안에 java소스들을 풀스캔합니다.
그리고 어노테이션을 발견하면 해당 컨트롤러들을 참조하여 사용하게 만들어 줍니다. 



마무리


스프링 DispatcherServlet가 컨트롤러를 찾는 방법을 소개했습니다. 원리를 모르고 개발할수도 있지만 한번 눈으로 직접 원리를 알아보고 이해하며 개발하는건 큰 차이가 있습니다. 



댓글