• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Servlet과 Container에 등록되는 소스들에 대해서 궁금합니다.

23.08.22 11:01 작성 23.10.15 21:40 수정 조회수 197

0

와 완벽하고 깔끔한 답변 감사합니다. 덕분에 너무 잘 이해했습니다. 감사합니다!

답변 1

답변을 작성해보세요.

1

서블릿은 표준 스펙을 따라서 만드는 (특정 인터페이스를 구현해야 할 뿐인) 평범한 자바 클래스입니다. 확장자는 당연히 .java로 되어이죠. .servlet이라는 확장자를 쓴다는 얘기는 들어본 적이 없습니다. .jsp나 컨트롤러의 역할을 하는 것은 아닙니다. 물론 .jsp는 서블릿과 같은 자바 클래스로 변환되어서 실행이 됩니다. 컨트롤러는 MVC 패턴으로 자바 서버 개발을 하는 경우 C의 역할을 맡는 것을 말합니다. 그 자체로 서블릿은 아닙니다. 물론 서블릿을 MVC의 컨트롤러처럼 동작하도록 사용할 수는 있습니다. 이게 비슷한 것 같지만 다 차이가 있는 것이지요.

서블릿은 자바 클래스로 만들고, 이 클래스의 오브젝트를 생성해서 실행이 되겠죠. 전에는 서블릿 코드를 자바 클래스로 만들고 XML에서 이걸 정의해서 서블릿으로 인식하게 했는데요. 이걸 서블릿을 초기화 하는 코드에서 직접 오브젝트를 생성해서 이 오브젝트를 서블릿으로 등록하는 방법도 제공됩니다. 예제에서는 이걸 사용한 것이고요.

css, js 등의 정적 파일은 자바 클래스가 아니니까, @Bean으로 등록할 수는 없겠죠. 대신 서블릿 컨테이너가 일종의 웹 서버 역할을 하니까 여기서 URL을 타고 접근할 수 있도록 넣어둘 수 있습니다. 원래는 war라는 확장자를 가진 파일에 자바 클래스와 이런 정적인 파일을 같이 묶어서 컨테이너에 배포했는데요. 스프링 부트를 사용하면 war 파일을 매번 만들 필요가 없기 때문에 편리합니다.

jsp도 서블릿 컨테이너에 등록됩니다.

DispacherServlet이 일종의 front controller로 동작하는 것이 맞습니다. 서블릿 컨테이너에 DispatcherServlet을 등록해서 사용합니다. 이것도 일종의 서블릿이니까 서블릿 컨테이너에 넣어야죠. 그리고 별도로 만들어진 스프링 컨테이너 오브젝트를 DispatcherServlet에게 전달해서 이용하도록 합니다.

구조를 보면

ServletContainer -> DispatcherServlet -> Spring Container -> Controller(스프링빈) ..

이렇게 되겠죠.

일단 이런 구성요소의 정확한 정체를 파악하면 좋겠지만 이게 눈에 잘 들어오거나 코딩할 때 관여가 되는 것은 아닙니다. 일단 강의에서 설명하는 정도의 이해만 가지고 개발을 해보시고, 차근차근 관련된 자료를 찾아보시는 걸 권장드립니다.