🍌

Servlet

누군가가 서블릿(Servlet)에 대해서 물었을 때, ‘그게 뭐지'라고 되물었었다. 그런데 이러면 안될 것 같다. 

서블릿(Servlet)

서블릿은 사용자의 요청을 받아 사용자에게 응답을 한다. 사용자가 데이터베이스에 있는 데이터를 조회한다고 생각해보자. 사용자는 요청을 받은 서블릿은 일련의 작업을 진행한 다음 사용자의 요청에 맞게 데이터를 반환한다. 서블릿은 사용자의 요청을 처리하고 응답하는 구조를 가진 하나의 인터페이스다. 웹 프로그래밍을 통해(서블릿 인터페이스 구현) 개발자는 각각의 요구 사항에 맞는 로직을 구현한다. 그리고 이 구현한 서블릿을 서블릿 엔진을 통해 실행한다.

서블릿 컨테이너(Servlet Container)

앞서 말했듯이 서블릿은 서블릿 엔진을 통해 관리된다. 그렇다면 서블릿 컨테이너는 무엇일까? 지금까지 찾아본 바로는 서블릿 엔진과 서블릿 컨데이터는 동일한 개념으로 생각해도 무방할 듯 싶다. 내가 여태 사용하고 있었던 톰캣이 이 역할을 담당한다.

서블릿 컨테이너는 사용자의 요청이 들어오면 요청에 맞는 서블릿을 생성 및 할당을 한다. 그리고 요청을 처리한 다음에는 생성한 서블릿을 제거해주고 있다. 전반적인 서블릿 관리를 담당한다. 한 가지 유의할 점은 서블릿을 생성할 때마다 프로세스를 만드는 것이 아니라 쓰레드 단위로 생성한다는 점이다. 프로세스보다 쓰레드의 리소스 측면에서 장점이 있다. 

Spring MVC의 서블릿

스프링 MVC 구성된 프로젝트를 빌드하면 war파일이 나온다. 이 war파일을 톰캣에 올려 웹 애플리케이션 서버를 구성했다. 서블릿 컨테이너인 톰캣에 스프링 MVC로 구현한 서블릿을 넣어 사용자의 요청을 처리한다.

스프링 MVC는 DispatcherServlet가 있는데, 이를 통해 사용자의 요청을 받아들인다. 이후 HandlerMapping을 거쳐 요청에 따라 컨트롤러에 매핑하여 요청을 처리한 다음 응답한다. 필요에 따라 Interceptor를 거치고 exception을 처리한다.

Spring Boot의 서블릿

스프링 부트는 스프링 MVC 처럼 서블릿을 내장된 서블릿 컨테이너에 등록한다.

마치며

스프링 프레임워크를 회사에 입사하자마자 사용했다. 사실 아무것도 모른채 이미 구현되어 있는 그대로 사용했다. 새로운 프로젝트를 구성할 때에도 기존 프로젝트를 참고했기 때문에 큰 문제는 없었다. 문제는 큰 문제가 없다고 생각한 내 자신이다. 내가 과연 개발자라고 할 수 있을까, 코더랑 다름이 없다. 이렇게 고이고 고여서 나중에는 어느 치킨 프랜차이즈가 더 좋을지 고민하겠지. 이번에 정리하면서 그나마 어떤 개념으로 흘러가고 있는지 흐름은 이해했다. 적어도 자바로 웹프로그래밍을 하면서 서블릿을 말할 수 있겠다.

Reference