spring - Servlet

Expert Inpyo·2022년 10월 20일
0

Java Spring

목록 보기
3/4

Servlet

출처
출처1
cgi 출처

정의

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

간단히 말해, 자바를 사용하여 웹을 만들기 위해 필요한 기술
클라이언트의 요청에 대한 결과를 응답해주는 역할을 수행함

자바로 구현된 CGI(Common Gateway Interface, 웹 서버 상에서 사용자 프로그램을 동작시키기 위한 조합)

특징

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
  • html을 사용해 요청에 응답
  • java Thread를 이용해 동작함
  • MVC에서 Controller
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet클래스를 상속받음
  • UDP보다 처리 속도가 느림
  • HTML 변경 시 Servlet을 재컴파일 해야하는 단점 존재

동적인 페이지 = 사용자가 요청한 시점에 페이지를 생성해 전달해주는 것

servlet은 웹 서버가 동적인 페이지를 제공할 수 있도록 도와줌
동적엔 페이지를 생성하는 어플리케이션 = CGI

동작 방식

  1. Servlet Request, Servlet Response 객체를 생성

  2. 설정 파일을 참고하여 매핑할 Servlet을 확인

  3. 해당 서블릿 인스턴스 존재의 유무를 확인하여 없으면 init() 메소드를 호출하여 생성

  4. Servlet Container에 스레드를 생성하고 service를 실행

  5. 응답을 처리하였으면 distory() 메소드를 실행하여 Servlet Request, Servlet Response 객체를 소멸

용어 정리

  • 서블릿 컨테이너
    • 서블릿을 관리해주는 컨테이너
      • 클라이언트의 요청을 받아주고 응답할 수 있게 웹서버와 소켓으로 통신
        • ex, 톰캣
    • 역할
      • 웹 서버와 통신 지원(서블릿 <=> 웹 서버간)
        • 서블릿 생명주기(Life Cycle) 관리
        • 멀티 쓰레드 지원 및 관리
        • 선언적인 보안 관리
[생명주기 관리]
서블릿 컨테이너가 동작하는 순간 서블릿 클래스를 로딩해 인스턴스화 + 초기화 메서드 호출 / 요청이 들어오면 적절한 서블릿 메서드를 찾아 동작함
서블릿 생명이 다하는 순간 GC(가비지 컬랙션)을 통해 메모리에서 제거

[통신 지원]
클라이언트의 Request를 받아주고 Response를 보낼 수 있게 웹 서버와 소켓을 만들어 통신함
소켓 생성 + 특정 포트 리스닝 + 연결 요청 들어오면 스트림을 생성해 요청 받음 => 이 과정 전체를 서블릿 컨테이너가 대신함

[멀티 쓰레드 관리]
해당 서블릿의 요청이 들어오면 쓰레드를 생성해 작업 수행
따라서, 동시에 여러 요청이 들어와도 멀티 쓰레드 환경으로 동시 다발적인 작업 가능
이렇게 한번 메모리에 올라간 쓰레드는 재생성할 필요 없음 => 메모리 관리에 유리

[선언적인 보안 관리]
보안관련 기능 지원함
따라서, 서블릿 or 자바 클래스 안에 보안 관련 메서드를 구현하지 안하도 괜찮음

  • HttpServletRequest
    • HTTP 프로토콜의 Request 정보를 서블릿에 전달하기 위한 목적으로 사용
    • header, 파라미터, 쿠키, URI, URL 등의 정보를 읽어들이는 메서드 + Body의 스트림을 읽어들이는 메서드를 가짐
  • HttpServletResponse
    • 해당 클라이언트에게 응답 보내기 위한 HttpServletReseponse 객체를 생성해 서블릿에게 전달하고 이 객체를 활용해 content type, 응답 코드, 응답 메시지 등을 전송함

한 줄 정리
서블릿은 동적인 웹 페이지를 만들 때 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술
웹 요청과 응답의 흐름을 간단한 메서드 호출만드로 체계적으로 다룰 수 있게 해주는 기술

profile
도전! 데이터 엔지니어

0개의 댓글