자바 서블릿 컨테이너/엔진

Sunny·2022년 8월 30일
0

✨ React.js, 스프링 부트, AWS로 배우는 웹 개발 101


🔅 01. 개발을 시작하기 전에


🔅 1.2 배경 지식

1.2.1 하이퍼텍스트 트랜스퍼 프로토콜
1.2.2 자바스크립트 오브젝트 노테이션
1.2.3 서버란?
1.2.4 정적 웹 서버
1.2.5 동적 웹 서버
1.2.6 자바 서블릿 컨테이너/엔진


🚩 [사전지식1] 정적 페이지와 동적 페이지

🐳 정적 페이지 (Static Pages)

  • 바뀌지 않는 페이지
  • 웹 서버는 클라이언트가 요청한대로 파일 경로 이름을 받고, 경로와 일치하는 파일 컨텐츠(HTML, 이미지 등)을 반환

🐳 동적 페이지 (Dynamic Pages)

  • 인자에 따라 바뀌는 페이지
  • 인자의 내용에 맞게 동적인 컨텐츠를 반환함
  • 웹 서버에 의해 실행되는 프로그램을 통해 만들어진 결과물

🚩 [사전지식2] 웹 서버와 WAS

🐳 웹 서버

  • HTTP 프로토콜을 기반으로, 클라이언트의 요청을 서비스하는 기능을 담당
  • 요청에 맞게 2가지 기능 중 선택해서 수행
    - 정적 컨텐츠 제공 : WAS를 거치치 않고 바로 제공
    - 동적 컨텐츠 제공을 위한 요청 전달 : 클라이언트 요청을 WAS에 보내고, WAS에서 처리한 결과를 클라이언트에게 전달
  • 웹 서버 종류 : Apache, Ngnix 등

🐳 WAS (Web Application Server)

  • DB 조회 및 다양한 로직 처리 요구시 동적인 컨텐츠를 제공하기 위해 만들어진 App 서버
  • HTTP를 통해 애플리케이션을 수행해주는 미들웨어
  • WAS는 웹 컨테이너 혹은 서블릿 컨테이너라고도 불림
    (컨테이너 : JSP, Servlet을 실행시킬 수 있는 소프트웨어. 즉 WAS는 JSP, Servlet 구동 환경을 제공해줌)
  • 역할 : 웹 서버 + 웹 컨테이너
  • 주요 기능 :
    1. 프로그램 실행 환경 및 DB 접속 기능 제공
    2. 여러 트랜잭션 관리 기능
    3. 업무 처리하는 비즈니스 로직 수행
  • WAS 종류 : Tomcat 등

🚩 1.2.6. 자바 서블릿 컨테이너/엔진

🐳 Servlet(서블릿)

동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술.

  • 서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송함

ex) 로그인 시도를 할 때, 서버가 클라이언트에서 입력되는 아이디와 비밀번호를 확인하고 결과를 응답. 이러한 역할을 수행하는 것이 서블릿

  • 개발자들은 서블릿 엔진을 설치 한 후 서블릿 엔진에게 자기가 개발한 비즈니스 로직, 즉 클래스 파일과 해당 클래스 파일을 어느 요청에서 실행해야 하는지 알려줘야 한다. 이때 우리는 서블릿 엔진이 이해할 수 있는 형태로 클래스 파일을 작성해야 한다.

  • 구체적으로 서블릿 엔진이 이해할 수 있는 클래스란 javax.servlet.http.HttpServlet 의 상속받는 서브 클래스를 의미하며, 우리는 HttpServlet을 상속받는 클래스를 작성해 특정 형식에 맞춰 압축해 전달해준다. 이렇게 서블릿 엔진을 이용해 개발자는 서버를 처음부터 구현하지 않고도 각기 다른 비즈니스 로직을 구현하고 배포할 수 있다.

🐳 Servlet(서블릿)을 사용하는 이유

클라이언트의 각 요청과 매개변수에 따라 로직을 작성하는 것이 대부분의 백엔드 개발자가 해야 할 일이다. 그러나 비즈니스 요구사항에 따라 이 로직은 변한다.

개발자들은 아파치나 Ngnix 같은 서버 프로그램을 사용하지 못한다. 그렇다면 백엔드 개발자들은 비즈니스 요구사항에 따라 로직이 변경될 때마다 처음부터 끝까지 소켓 프로그래밍, HTTP 파싱, 스레드 풀 관리 등 모든 것을 새로 작성해야할까?

다행히 자바 프로그램 중 동적 웹 서버 구현을 도와주는 프로그램이 있으며, 이것이 바로 서블릿 엔진이다. 이것이 서블릿을 사용하는 이유이다. 아파치 톰캣이 서블릿 엔진에 해당한다.

🐳 Servlet(서블릿)의 동작 과정

클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 WAS에 위임한다. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행한다. 그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송한다.

  1. 클라이언트 요청
  2. HTTPServletRequest, HttpServletResponse 객체 생성
  3. web.xml 이 어느 서블릿에 대해 요청한 것인지 탐색
  4. 해당하는 서블릿에서 service() 메소드 탐색
  5. doGet() 또는 doPost() 호출
  6. 동적 페이지 생성 후, ServletResponse 객체에 응답 전송
  7. HttpServletRequest, HttpServletResponse 객체 소멸
profile
개발에 재미를 붙여보기 :)

0개의 댓글