작성
·
247
0
안녕하세요! 먼저 좋은 강의 해주셔서 감사합니다.
다름이 아니라, 강의 마지막 부분의 Spring 동작을 간단하게 설명해주셨는데요.
이 때, 클라이언트로부터 요청이 들어오면 디스패쳐 서블릿이 웹과 관련된 Controller들을 메모리에 올린다고 하셨는데, 스프링부트의 @Controller 어노테이션은 컴포넌트 스캔의 대상이고, 스프링부트 어플리케이션이 로드될 때 Application Context에 등록되는 것으로 알고 있습니다.
본 강의에서 말씀해주신 내용과 제가 학습했던 내용에 차이가 있어 질문 드립니다.
@Controller 어노테이션을 사용하는 스프링부트의 Controller는 컴포넌트 스캔을 통해 Service, Repository 등과 다른 시점에서 로드되는지
말씀해주신 메모리에 올린다는 표현이 Application Context로부터 빈을 주입받는 것을 의미하는건지
학습한 지 얼마 안되서 개념에 혼동이 오네요 ㅠ.ㅠ
다시 한번 좋은 강의 감사드립니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
권혁빈님, 질문 주신 내용 잘 읽었습니다.
스프링부트에서 @Controller
어노테이션을 사용하는 컨트롤러는, 애플리케이션이 로드될 때 컴포넌트 스캔에 의해 발견되고 Application Context에 빈으로 등록됩니다. Service, Repository와 같은 다른 컴포넌트들도 같은 방식으로 컴포넌트 스캔을 통해 빈으로 등록되므로, 별도의 시점에서 로드되는 것은 아닙니다.
메모리에 올린다는 표현은 실제로 스프링 컨테이너 내에 해당 컨트롤러의 인스턴스가 빈으로 생성되어 관리되는 것을 의미합니다. 이 과정에서 빈이 Application Context에 등록된 후, 필요에 따라 다른 컴포넌트들과 의존 관계가 주입됩니다.
이해를 돕기 위해 추가적인 정보를 제공하자면, 스프링부트의 내장 서블릿 컨테이너는 @WebServlet
, @WebFilter
, @WebListener
어노테이션에 의해 자동으로 클래스를 등록할 수 있으며, 이를 위해 @ServletComponentScan
을 사용할 수 있습니다. 다만 이는 스탠드얼론 서블릿 컨테이너에서는 적용되지 않고, 내장 서블릿 컨테이너에서 사용됩니다. 관련된 문서를 참고하시면 더 도움이 될 것입니다.
강의를 통해 깊이 있는 학습을 하시고 계신 것 같아 보기 좋습니다. 혼동되는 개념이 있을 때는 언제든 질문해주시고, 앞으로도 계속해서 활발한 학습을 진행하시길 바랍니다. 좋은하루 되세요!