작성
·
64
1
이번 강의에서 @ServletComponentScan
에 대한 설명을 들으면서 궁금한 점이 생겼는데요, 서블릿 생성과 등록 차이에 대한 질문좀 드리겠습니다.
ServletApplication
이 실행되고 @ServletComponentScan
이 붙어있으면 현재 내 패키지를 포함해서 하위 패키지를 뒤져서 서블릿을 모두 찾아 자동으로 서블릿을 등록해준다고 하셨습니다.
아마 서블릿 컨테이너에 등록하는 것이겠지요? (틀렸다면 말씀해주세요)
그런데 여기서 이 등록이라는 것이 서블릿 객체로 생성해서 등록하는 것인지 아니면 객체가 아닌 단순히 스프링 빈처럼 빈이름이라던가 해당 서블릿을 타입이라던가 그런것을 식별 정보만을 사용해서 등록한다는 것인지 궁금합니다.
왜 이 부분을 질문 드리냐면 이전 강의에서 서블릿 컨테이너의 역할중에 서블릿 객체를 생성하는 역할이 있다고 강의 하셨는데요.
서블릿이 자동 등록될 때 만약에 객체를 생성해서 객체가 등록된다면 @ServletComponentScan
은 단순히 스캔 및 서블릿으로 등록 판별만하고 서블릿 객체를 생성하는건 서블릿 컨테이너의 역할이 될 것 같은데 만약에 객체를 생성해서 등록하는게 아닌 스프링 빈처럼 @ServletComponentScan
이 이름, 타입같은 정보로만 등록하는 것이라면
서블릿 컨테이너의 서블릿 객체 생성 역할은 언제 일어나고 언제 사용되는건지 잘 모르겠습니다.
@WebServlet에서 알맞은 url 매핑 요청이 들어왔을 때 그제서야 서블릿 컨테이너에 있는 정보를 바탕으로 서블릿 객체를 생성하고 request와 response를 받는 식인가요?
결국 제가 궁금한건 @ServletComponentScan
에서 말하는 자동 등록이 스프링 컨테이너가 하는 객체 생성까지 포함인지, 아니면 별도의 정보로 등록하고 컨테이너가 하는 객체 생성도 별개의 것인지 궁금합니다.
감사합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
yoon6669님께서 질문하신 @ServletComponentScan
과 서블릿의 생성 및 등록에 관한 차이를 설명드리겠습니다.
서블릿 등록: @ServletComponentScan
은 서블릿 클래스를 찾아서 서블릿 컨테이너에 등록하는 역할을 합니다. 이는 스프링 부트가 사용자가 정의한 서블릿, 필터, 리스너를 자동으로 검색하여 이를 서블릿 컨테이너에 등록하도록 돕습니다. 등록 단계에서는 클래스 메타데이터 정보를 기반으로 서블릿 컨테이너에 해당 클래스를 등록합니다.
서블릿 생성: 서블릿 객체의 인스턴스는 실제로 서블릿 컨테이너가 관리합니다. @ServletComponentScan
은 단순히 클래스를 등록하는 것이고, 해당 서블릿의 인스턴스(객체)는 컨테이너가 관리하는 생명주기에 따라 처음 요청이 있을 때 생성되거나, 컨테이너 시작시점에 미리 생성될 수 있습니다 (이는 서블릿 초기화 파라미터에 따라 다릅니다).
service()
메서드를 호출하게 됩니다.결론적으로 @ServletComponentScan
은 단순히 서블릿 클래스를 스캐닝하고 등록하는 부분에서 역할을 하며, 객체의 실제 생성 및 라이프사이클 관리는 서블릿 컨테이너에 의해 이루어집니다.
아래 링크에서 유사한 질문을 다루고 있습니다. 참고하시면 더욱 깊이 있는 이해를 도울 수 있을 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.