[TIL] 2024-08-06

성장일기·2024년 8월 6일

회고

목록 보기
20/37

중요 학습 내용 [Servlet]

CGI(Common Gateway Interface) vs Servlet

  • Common Gateway Interface: 요청 1건 당 1스레드로, 새로운 요청이 생길 때마다 Applicaiton을 생성
  • Servlet: 여러 요청을 여러 스레드로 동시에 처리 가능. 요청별로 별도의 어플리케이션을 생성하지 않고, 멀티스레드로 여러 요청을 처리할 수 있다.

Servlet Container

  • Apache Tomcat은 Servlet Container와 JSP container로 각각 Controller와 View의 역할을 담당한다.
  • Servlet: Servlet Container에서 요청 처리를 위한 서버 측 컴포넌트
  • 서블릿 생명주기 관리: 서블릿의 로드, 초기화, 요청 처리, 종료 등의 생명주기를 관리
  • 동적 데이터 서빙: HTTP 요청을 서블릿으로 전달하여, 서블릿이 생성한 동적 응답 반환
  • JSP 처리: JSP 페이지를 서블릿으로 컴파일하고 실행하여, 동적으로 생성된 데이터 전달
  • Apache Tomcat는 Web Server와 Servlet Container 기능을 모두 포함하여 자체적으로 HTTP 요청을 서블릿으로 전달하고, 정적 파일도 서빙 가능

Servlet LifeCycle

  • Servlet은 Servlet Container로부터 생성되어 LifeCycle를 갖는다.
  1. init() [load-on-startup]

    • Servlet Container로부터 호출되어 최초 요청에만 인스턴스가 생성된다.
  2. service()

    • 이후 service()에 따른 doGet(), doPost() 등을 통해 요청에 맞는 데이터 처리
  3. destroy()

    • 서버 종료 시, 메모리 반납시 사용

깨달은 점 💡

  • Node, Flask, Django 등 다른 서버들에서는 CGI로 싱글스레드와 같이 처리되는 줄 알았다.
    • Flask나 Django는 wsgi나 asgi 등의 Gateway Interface를 통해 싱글스레드로 생기는 문제를 대체할 수 있다.
    • Node나 asgi 등, 비동기 통신을 하면, 싱글스레드일지라도 비동기처리를 통해 마치 멀티스레드와 같은 작업을 하는 것처럼 요청을 처리할 수 있다.
      • 내부적으로 이벤트 기반 루프 모델을 사용하여 이벤트 큐에 여러 작업에 대해 콜백을 하나씩 처리한다.
    • 아무런 생각 없이 프로젝트에 적용했던 개념에 대한 확실한 의의를 깨달았다.
profile
엔지니어로의 성장일지

0개의 댓글