Java

Servlet서블릿

기기디 2022. 5. 25. 01:20

정의

  • 자바로 웹페이지를 동적으로 생성하는 서버측 프로그램 or 사양을 말한다.
  • 클라이언트의 요청을 처리하고 그 결과를 반환하는 servelt class의 구현규칙을 지킨 자바 웹 프로그래밍 기술
  • 자바를 사용하여 웹을 만들기 위해 필요한 기술. 클라이언트가 페이지를 요청하면 결과를 전송해줄때 사용되는 자바 기술.
  • 자바로 구현된 CGI라고 부르기도 한다.
  • 정리 : 자바에서 클라이언트요청을 처리하고 그 결과를 반환하는 웹 프로그래밍 기술이다. http request/response를 해석하고 처리해주는 일을 대신해준다.

특징

  • 동적으로 페이지를 제공하기 위해 사용한다.

사용

  • urlPatterns = “/test” 가 호출되면 서블릿이 실행된다.
  • HttpServletRequest/HttpServletResponse객체를 통하여 HTTP요청/응답정보를 다룰 수 있다.
  • 서블릿은 서블릿 컨테이너 안에서 관리된다.

동작방식

  1. 클라이언트(브라우저)에서 URL을 입력하면 HTTP Request가 서버의 Servlet Container로 전송된다.
  2. Servlet Container는 받은 Request를 기반으로 HttpServletRequest, HttpServletResponse객체를 생성한다.
  3. 사용자가 요청한 URL을 기반으로 어떤 서블릿에 대한 요청인지를 찾는다.
  4. 해당 서블릿에서 비즈니스로직이 담겨져 있는 service메소드를 호출한뒤 request가 get인지 post인지에 따라서 doGet()/doPost()를 호출한다.
  5. doGet()/doPost()는 동적페이지를 생성 한 후에 HttpServletResponse객체에 응답을 보낸다.
  6. 응답이 끝나면 HttpServletRequest, HttpServletResponse를 소멸시킨다. 여기서 destroy()메소드가 호출되는데 종료시 처리해야하는 작업은 destroy()메소드를 오버라이딩하여 구현한다.

한계

  • url마다 servlet을 생성하고 그에 맞춰 Controller에게 요청을 보내주는 코드를 작성해야한다. 서비스 로직외에 중복작업을 해야하는 불편함과 Servlet마다 Thread가 할당되기 때문에 url이 늘어날수록 서버의 부하가 생긴다. 또한 Servlet들에 대해서 인코딩설정, 에러페이지처리등 공통작업을 적용하기 어려웠다.

Dispatcher Servlet을 통한 해결

  • 모든 요청을 앞에서 공통으로 처리해주는 프론트 컨트롤러 개념의 DispatcherServlet을 앞에 둠으로써 url마다 servlet을 생성하지 않고, 공통작업의 처리가 가능하다. 각 url마다 존재하던 servlet을 통합하여 처리하는곳이다.

용어/개념정리

Servlet Container

  • 기본적으로 서블릿을 관리해주는 역할을 한다. 서블릿을 지원하는WAS(ex>tomcat)를 서블릿 컨테이너라고한다.
  • 역할
    • 서블릿과 웹서버 사이에 통신할 수 있도록 웹서버와 소켓으로 연결하여 통신해준다. 서블릿컨테이가 없었다면 웹서버와 통신하는 과정도 개발자가 직접 만들어야 했을것이다.
    • 서블릿의 생명주기를 관리해준다. 요청에 따라 서블릿을 메모리에 적재시키고 역할이 끝난 서블릿은 GC를 진행하여 소멸시킨다.
    • 클라이언트요청에 대해서 멀티쓰레드를 지원하고 관리해준다.

'Java' 카테고리의 다른 글

Effective Java 정리 #1  (1) 2023.12.10
동기와 비동기, Java Synchronized  (0) 2022.05.28
동등성과 동일성의 차이  (0) 2022.05.25
JVM - java버전별 변경점  (0) 2022.05.24
JVM  (0) 2022.05.24