맨날 스프링부트만 쓰면서
Dispatcher Servlet 이 스프링이 가진줄 알았고...
스프링 + 톰캣 구성으로 외부 톰캣쓰는거에 대해서 부정적인 시선을 가지고 있었습니다.
하지만 톰캣을 왜 쓰는지 점점 알게되면서 스프링과 톰캣을 바라보는 관점이 변화하여
톰캣을 왜 쓰는지에 대해 제대로 공부해보려고 공부했습니다.
Servlet Container이자 WAS
톰캣과 스프링에 구성은 위에 사진과 같습니다.
Tomcat
Spring
즉 저희가 스프링 코드에서 Filter들을 추가했던 것은 Spring 측 FilterChain에 추가하여 사용했던 것입니다.
스프링 + 톰캣 구성으로 실행을 할 때 Application Class가 없는데 실행이 되가지고 좀 놀랐습니다. 그래서 어떻게 톰캣이 스프링을 실행할까요?
웹 어플리케이션이 실행되면 Tomcat(WAS)에 의해 web.xml이 로딩.
web.xml 에 등록되어있는 ContextLoaderListener 생성.
ContextLoaderListener 가 root-context.xml 을 로딩.
- ContextLoaderListener : 서블릿을 초기화하는 용도로 사용
contextConfigLocation 파라미터를 사용하여, load할 수 있는 설정파일을 지정할 수 있다.
root-context.xml 등록되어 있는 설정에 따라 Spring Container가 구동.
context-param
옵션으로 root-context.xml 뿐만 아니라 다른 context.xml 파일들도 설정 가능클라이언트로부터 Web Application에 요청.
DispatcherServlet 생성.
DispatcherServlet 이 servlet-context.xml 을 로딩.
이후 Spring Container 구동되며, 응답에 맞는 Controller들이 동작한다.
bin
startup.sh
: 톰캣 실행 스크립트shutodwn.sh
: 톰캣 종료 스크립트setenv.sh
: 톰캣 구동 시 실행 환경 설정 스크립트 (처음에 직접 만들어줘야 함)catalina.sh
: 톰캣 로그 관련 설정 스크립트conf
server.xml
: Tomcat의 주 설정 파일로 접근/접속에 관한 설정이 주를 이룬다.server.xml
밖에 안봐요 ㅎㅎlogs
catalinah.out
), 접근 로그(local_access
) 등등 확인저는 주로 이렇게 파일들을 보았던 것 같습니다.
결국 내장톰캣, 외부 톰캣을 쓰는 이유가 각각 존재하였고
저는 아무것도 알지도 못했는데 외부 톰캣을 사용하는 거에 대해 부정적인 시선을 가졌던 것 입니다.
이러한 생각이 있었다는게 창피하네요 ㅎㅎ
외부 톰캣을 쓰는 경우 톰캣만 버전업하여 사용할 수 있는 장점도 있고
해당 구성을 선택할 수 있는 다양한 상황들이 있는 것 같습니다.
이제 이해가 제대로 되어서 서버 구성을 제대로 할 수 것 같고
스프링 코드들을 작성 할 때도 어떠한 흐름으로 동작이 되는지 진짜 명쾌하게 이해가 된 것 같습니다.