작성
·
339
1
서블릿 컨텍스트 라는 용어 인데요 제가 아는 컨텍스트는 여러 스레드에서도 공통의 자원을 공유하기 위해서 사용하는 컨테이너 정도로 알고 있습니다.
그런데 스프링 부트 기준으로 상당히 많은 컨텍스트가 있더라고요 각각의 역할과 생성시점에 대해 여쭈어 보고싶습니다
또 이 annotationConfigServletWebServerApplicationContext가 스프링 컨테이너 인가요?
또 자료를 찾아보니 dispatcherServlet이 웹어플리케이션 컨텍스트를 구성한다고 하는데 이 컨텍스트가 왜 dispatcherServlet이 생성을 하는 지 모르겠습니다.
springbootapplication.run의 결과로 annotationConfigServletWebServerApplicationContext가 나오고 하위에
ServletContext beanFactory가 나오는데 각각 어떤 역할을 하는지도 알려주시면 감사하겠습니다!
답변 1
4
안녕하세요. hsg0208님, 공식 서포터즈 David입니다.
또 이 annotationConfigServletWebServerApplicationContext가 스프링 컨테이너 인가요?
=> 네, 여러가지 기능이 확장된 스프링 컨테이너입니다.
또 자료를 찾아보니 dispatcherServlet이 웹어플리케이션 컨텍스트를 구성한다고 하는데 이 컨텍스트가 왜 dispatcherServlet이 생성을 하는 지 모르겠습니다.
=> 서블릿 자체에 Root WebApplicationContext를 상속하는 ServletWebApplicationContext를 만듭니다. 이런 컨텍스트 계층 구조 갖는 이유는 서블릿 자체에서만 사용할 객체와 서블릿 간 사용될 수 있는 객체를 별도의 컨텍스트에서 관리하기 위함입니다. 자세한 내용은 Spring MVC 공식 문서를 참고해주세요.
그러나 스프링 부트의 경우 별도로 컨텍스트를 나누지 않습니다.
Spring Boot 내부동작 - https://www.youtube.com/watch?v=uCE3x4-GQ0k&t=432s
Spring Boot 내부 Context - https://nowsogood.github.io/spring/springboot-06-context-sep/#spring-mvc%EC%97%90%EC%84%9C%EC%9D%98-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EB%B6%84%EB%A6%AC
springbootapplication.run의 결과로 annotationConfigServletWebServerApplicationContext가 나오고 하위에 ServletContext beanFactory가 나오는데 각각 어떤 역할을 하는지도 알려주시면 감사하겠습니다!
=>
ServletContext는 다음 문서를 참고해주세요. https://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html
https://codeofenow.tistory.com/32
BeanFactory는 IoC를 담당하는 핵심 컨테이너입니다. 이를 확장한 것이 스프링의 Application Context입니다.
토비의 스프링 3.1 - p101
용어의 정의, 역할은 공식문서를 기준으로 다른 컨텐츠(블로그, 책, 영상 등)를 함께 찾아보시면 좋습니다. 물론 이 과정에서 한 번에 이해되는 경우는 드물지만 공식문서에서 언급되는 키워드들을 하나씩 찾아가며 0이었던 이해도를 1씩 높여가는 과정이 필요합니다.
생성 시점은 직접 디버깅하여 확인하시는 게 제일 빠릅니다. 확인하기 원하는 객체 생성자에 브레이크 포인트 걸고 디버깅 모드로 실행하면 바로 확인 가능하며 어디에서 호출되는지는 호출스택을 역순으로 탐색하시면 됩니다.
시간은 조금 걸리겠지만 이런 시간들을 충분히 가지시면 학습과 성장에 더욱 도움이 될 것 같습니다:)
감사합니다.
감사합니다 ㅎㅎ 깊이가 느껴지는 답변이십니다 또한 공부 방향성에도 도움이 많이 되었습니다^^