[Tistory] [SpringBoot] 서블릿과 서블릿 컨테이너

원글 페이지 : 바로가기

요새 인프런에서 토비의 스프링부트 이해와 원리를 듣고 있는데 내가 스프링부트로 개발을 하고 있지만 서블릿, 디스패처 서블릿, 스프링 컨테이너, 빈 등에 대해 잘 모른다는 것을 알게 되었다. 그중 서블릿과 서블릿 컨테이너는 거의 아는게 없었기 때문에 이번 기회에 정리하고자 한다. 서블릿 (Servlet) 서블릿이란 무엇일까? 서블릿에 대해 알아보기 전에 웹 서버, 웹 애플리케이션 서버(WAS)를 알아봅시다. 웹 서버 VS 웹 애플리케이션 서버 웹 서버 (Web Server) 웹사이트를 제공할 수 있게 서버로 만들어주는 서비스 클라이언트가 특정 주소를 입력 시 특정 화면을 브라우저에서 출력해주는 역할 정적인 웹 사이트를 제공 웹 애플리케이션 서버 (Web Application Server) 자바, JSP 등으로 만든 웹 또는 API 애플리케이션을 실행할 때 사용 웹과 서버 사이의 애플리케이션이다. 동적인 웹 사이트를 제공 이때 톰캣, 제티와 같은 서블릿을 지원하는 WAS를 사용한다. 즉 웹 서버는 정적(변하지 않는), WAS는 동적(변할 수 있는) 웹사이트를 제공하는데 가장 큰 차이가 있다. 서블릿은 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. “동적 웹 페이지” 를 만들 때 사용하기 때문에 WAS 내 서블릿이 존재한다. 기능 서블릿은 JAVA의 쓰레드를 이용하여 동작한다. 요청이 들어올 때마다 쓰레드를 생성해서 서블릿을 호출하고 실행하는데 이때 요청이 무수히 많아지면 서버가 죽을 수 있기 때문에 쓰레드 풀 방식을 이용한다. 쓰레드 풀 방식 : 쓰레드 풀에 미리 쓰레드를 설정한 개수만큼 생성해두고 요청이 들어올 때 이미 만들어진 쓰레드를 사용하는 방식이다. 쓰레드의 작업이 완료되면 반납 후 대기 중인 요청이 그 쓰레드에서 수행된다. 따라서 동시 요청도 처리할 수 있다. 일반적으로 HTTP를 통해 웹 클라이언트 요청을 수신하고 이를 응답한다. 동작 과정 클라이언트가 웹 서버에 요청한다. 이때 웹 서버는 그 요청을 WAS에 위임한다. WAS는 HttpRequest를 파싱해서 HttpServletRequest, HttpServletResponse 객체를 생성한다. 사용자가 작성한 서블릿 매핑 정보가 담긴 Web.xml을 확인하여 사용자 요청이 어느 서블릿에 대한 요청인지 매핑해준다. 매핑된 서블릿에서 service() 메서드 호출한다. doGet() 또는 doPost() 메서드 호출한다. 동적 페이지 생성 후 HttpServletResponse 객체에 응답을 전달한다. HttpServletRequest, HttpServletResponse 객체를 소멸한다. 매핑 : 프론트 컨트롤러(여러 요청을 처리할 때 반복적으로 등장하는 공통 작업을 하나의 오브젝트에서 일괄적으로 처리) 에서 HTTP 요청을 처리할 핸들러를 결정하고 연동하는 작업 바인딩 : 핸들러에게 웹 요청 정보를 추출하고 의미있는 오브젝트에 담아서 전달하는 작업 생명주기 (생성 -> 초기화 -> 호출 -> 종료) 클라이언트 요청이 들어오면 서블릿 컨테이너는 해당 서블릿이 메모리에 있는지 확인한다. 없을 경우엔 init() 메서드를 실행하여 메모리에 적재한다. (init()은 처음 한번만 실행한다.) 서블릿 객체는 싱글톤으로 관리된다. 따라서 최초 로딩 시점에 서블릿 객체를 미리 만들어놓고 재활용한다. 만약 서블릿이 변경될 경우 기존 서블릿은 destory()하고 init()을 통해 변경된 서블릿을 다시 메모리에 올린다. init() 이후 클라이언트의 요청을 받아 service() 메서드를 통해 doGet()과 doPost()로 작업이 수행된다. 서블릿 컨테이너가 서블릿에 종료 요청시 destory() 메서드 1회 호출되며 해당 객체 소멸 및 GC가 진행된다. 서블릿 컨테이너 서블릿 컨테이너는 서블릿을 담아 관리해주는 컨테이너다. 즉, 서블릿이 “빵” 이라면 서블릿 컨테이너는 “오븐” 이랄까? 위의 동작과정에서 WAS는 HttpServletRequest와 HttpServletResponse를 생성하고 요청이 GET, POST 여부에 따라 동적 페이지 생성 및 응답을 전달하는 역할을 하는데 이걸 서블릿 컨테이너가 한다. 서블릿 컨테이너를 통해 우리가 얻는 이점은 매우 많다. 웹 서버와 통신 지원 서블릿 컨테이너는 서블릿과 웹 서버가 쉽게 통신할 수 있게 해주는데 만약 서블릿 컨테이너가 없다면 소켓을 만들고 통신하는 복잡한 과정을 구현해야 한다. 하지만 서블릿 컨테이너가 이를 도와주면서 개발자는 서블릿에 구현할 로직에만 초점을 맞춘다. 서블릿 생명주기 관리 위에서 서블릿이 빵이라면 서블릿 컨테이너는 오븐이라 했다. 빵을 만드려면 오븐이 필요하고 (서블릿 객체 생성 및 초기화) 온도와 시간을 맞춰 빵을 구워야 하고 (서블릿 객체 서비스 호출) 빵이 다 구워지면 오븐에서 사라진다. (서블릿 객체 소멸) 이러한 과정을 서블릿 컨테이너가 관리한다. 멀티쓰레드 지원 및 관리 서블릿 컨테이너는 요청을 받을 때마다 새로운 자바 쓰레드를 하나 생성하는 등 관리가 필요하지만 서버는 다중 쓰레드를 운영해주기 때문에 쓰레드에 대한 걱정을 할 필요가 없다. 선언적인 보안 관리 서블릿 컨테이너를 사용하면 보안에 관련된 내용을 서블릿에 작성하는 것이 아닌 XML에 기록하므로 보안 관리가 가능하다. 출처 https://velog.io/@yoho98/%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EA%B3%BC-%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88Servlet-Container-y88kny7g 서블릿(Servlet)과 서블릿 컨테이너(Servlet Container) 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 velog.io https://velog.io/@falling_star3/Tomcat-%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EC%9D%B4%EB%9E%80#:~:text=%EC%84%9C%EB%B8%94%EB%A6%BF%EC%9D%80%20%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C%20%EC%8B%A4%ED%96%89,%EC%88%98%ED%96%89%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%B4%20%EC%84%9C%EB%B8%94%EB%A6%BF%EC%9D%B4%EB%8B%A4. [Servlet] 서블릿(Servlet)이란? 서블릿의 개념과 동작 과정, 생명주기(메서드), 인터페이스, 서블릿 컨테이너에 대해 공부하고 정리한 내용입니다. velog.io

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다