서블릿이란?

이진영·2024년 1월 22일
0

CS스터디

목록 보기
2/3
post-thumbnail

개요

서블릿에 대해서 개념에 대해서 인지를 잘 못하고 있었고, 이를 바로잡기 위해서 글을 통해서 개념을 확고히 하고자 해당 글을 작성한다.


Servlet이란?

클라이언트 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다.


Servlet의 특징

1.클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트

서블릿은 클라이언트의 요청에 동적으로 응답하여 서버 측에서 데이터를 가공하고 결과를 생성하는 데 사용되기 때문!

2.html을 사용하여 요청에 응답한다.

Java 코드 내에서 HTML을 생성하여 클라이언트에게 동적인 웹 페이지를 제공

	@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
        
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>인사</title></head>");
        out.println("<body>");
        out.println("안녕하세요, ");
        out.println(request.getParameter("name"));
        out.println("님");
        out.println("</body></html>");
    }

3.Java Thread를 이용하여 동작한다.

각 클라이언트 요청에 대해 새로운 스레드를 생성하여 병렬처리를 지원한다.

4.MVC 패턴에서 Controller로 이용된다.

서블릿은 MVC (Model-View-Controller) 패턴에서 Controller 역할을 수행합니다. 클라이언트의 요청을 받아 비즈니스 로직을 처리하고 결과를 View에 전달합니다.

@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    ....
}

5.HTTP 프로토콜 서비스를 지원한 javax, servlet, http, HttpServlet클래스를 상속 받는다.

HttpServlet 클래스를 상속받아서 HTTP 프로토콜을 기반으로 클라이언트와 통신하는 서블릿을 개발합니다.


6.HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.

서블릿은 Java 코드로 작성되기 때문에 HTML이나 프론트엔드 부분을 변경할 때마다 서블릿 코드를 수정하고 재컴파일해야 하는 번거로움이 있습니다.

7.UDP보다 처리 속도가 느리다.

서블릿은 TCP 기반의 HTTP 프로토콜을 사용하며, 이는 신뢰성과 안정성을 제공하나 처리 속도는 UDP보다 느릴 수 있습니다.


서블릿 동작 방식

1.사용자(클라이언트)가 URL을 입력하면 HTTP Request가 Servlet Container로 전송합니다.
2. 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성합니다.
3. web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾습니다.

위 해당 예시처럼 찾은 다음 아래와 같은 Servlet을 찾아냄

4. 해당 서블릿에서 service메소드를 호출한 후 클리아언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출합니다.

5. doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냅니다.

6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.

서블릿 컨테이너

위와 같은 과정을 쉽게 도와주기 위해서는 서블릿 컨테이너가 필요한데 이러한 서블릿 컨테이너는 Servlet 클래스의 규칙에 맞게 서블릿을 관리해주고 container에서 HttpServletRequest, HttpServletResponse두 객체를 생성하며 Get, Post여부에 따른 동적인 페이지를 생성하여 응답을 보낸다.

즉, 서블릿 컨테이너의 중요한 역할 중 하나는 서블릿 클래스의 인스턴스 생성, 요청 URL과 서블릿 인스턴스 매핑, 클라이언트 요청에 해당하는 서블릿을 찾은 후 서블릿에 작업을 위임하는 역할을 한다.

역할

웹서버와 통신 지원

서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해줍니다. 소켓을 만들고 listen, accept 등을 API로 제공하여 복잡한 과정을 생략할 수 있게 해준다.

  • AprLifecycleListener
  • JasperListener
  • JreMemoryLeakPreventionListener
  • GlobalResourcesLifecylceListener
  • ThreadLocalLeakPreventionListener

서블릿 생명주기 관리

서블릿 컨테이너는 서블릿의 탄생과 죽음을 관리합니다.
1. 서블릿 클래스를 로딩하여 인스턴스화
2. 초기화 메서드를 호출
3. 요청이 들어오면 적절한 서블릿 메소드를 호출
4. 서블릿 소멸 시 Garbage Collection을 진행

멀티쓰레드 지원 및 관리

원래는 쓰레드를 관리해야 하지만 서버가 다중 쓰레드를 생성 및 운영해주니 쓰레드의 안정성에 대해서 걱정하지 않아도 됩니다.

선언적 보안 관리

일반적으로 보안관리는 XML 배포 서술자에 다가 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 하지 않아도 보안관리가 가능합니다.

요약

📌 Servlet : HttpServlet을 상속하고, doGet 메소드와 doPost 메소드를 오버라이딩하여 웹을 다룰 수 있도록 하는 자바 클래스
📌 Servlet Container : 서블릿의 생명주기를 관리하며 웹 환경에서 서블릿이 구동될 수 있도록 해주는 프로그램

마치면서

Servlet을 공부하면서 웹 백엔드의 기초가 되는 지식들을 기반한 개발이구나 라는 생각이 많이 들었다. 또한 이러한 기술들을 우리는 무의식속에 사용을 해왔고 이렇게 지속적으로 발전했다라는 사항을 알 수 있었다

출처
https://mangkyu.tistory.com/14
https://velog.io/@betterfuture4/Spring-Dispatcher-Servlet-%EC%A0%95%EB%A6%AC
https://www.nowwatersblog.com/backend/directory/servlet#%EC%84%9C%EB%B8%94%EB%A6%BF%EC%9D%98%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0
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

profile
내가 공부한 것들을 적는 공간

0개의 댓글

관련 채용 정보