오늘의하루

Web Server, WAS, Servlet 정리 본문

Spring

Web Server, WAS, Servlet 정리

오늘의하루_master 2023. 8. 22. 03:20

웹서버 (Web Server)

  • HTTP 기반으로 동작
  • "정적 리소스 제공", 기타 부가기능
  • 정적(파일) HTML, CSS, JavaScript, 이미지, 영상
  • 예) NGINX, APACHE

웹 애플리케이션 서버 (WAS - Web Application Server)

  • HTTP 기반으로 동작
  • 웹 서버 기능 포함 + 정적 리소스 제공 가능
  • 프로그램 코드를 실행해서 "애플리케이션 로직 수행"
    • 동적 HTML, HTTP API (JSON)
    • 서블릿, JSP, 스프링 MVC
  • 예) 톰캣, Jetty, Undertow

기본 웹 시스템 구성 - WAS + DB

단점

  • WAS가 너무 많은 역할을 담당하기 때문에 서버 과부하 우려된다.
    • WAS는 쉽게 죽는다.
  • 중요한 애플리케이션 로직이 정적 리소스때문에 수행이 어려울 수 있다.
  • WAS 장애시 오류 화면조차 노출이 불가능하다.

단점을 보완한 웹 시스템 구성 - WEB + WAS + DB

  • 정적 리소스는 웹 서버가 처리한다.
    • 웹 서버는 잘 죽지 않는다.
    • WAS, DB 장애시 웹 서버가 오류 화면을 제공할 수 있다.
  • 웹 서버는 애플리케이션 로직같은 동적인 처리가 필요하면 WAS에 요청을 위임한다.
  • 그러므로 WAS는 중요한 애플리케이션 로직 처리만 담당하면 되기 때문에 가벼워 진다.
  • 효율적인 리소스 관리가 가능하다.

서블릿

  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
  • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
  • 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있게된다.

서블릿의 HTTP 요청,응답 흐름

  • Client의 요청이 오면 WAS는 Request, Reponse 객체를 새로 만들어서 요청에 맞는 서블릿 객체를 호출한다.
  • 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용할 수 있다.
  • 서블릿에서 처리후 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력할 수 있다.
  • WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성한다.

서블릿 컨테이너

톰캣 처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.

  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다.
  • 서블릿 객체는 싱글톤으로 관리한다.
  • JSP도 서블릿으로 변환 되어서 사용한다.
  • 동시 요청을 위한 멀티 쓰레드 처리를 지원한다.

쓰레드란?

애플리케이션 코드를 하나하나 순차적으로 실행하는 것을 쓰레드라고 한다.

  • 쓰레드가 없다면 자바 애플리케이션 실행이 불가능하다.
  • 쓰레드는 한번에 하나의 코드 라인만 수행한다.
  • 동시 처리가 필요하면 쓰레드를 추가로 생성해야한다.

쓰레드 풀

필요한 쓰레드를 쓰레드 풀에 보관하여 관리한다.

  • 쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리한다.
    • 톰캣의 경우 최대 200개가 기본 설정이며 변경가능하다.
  • 최대 쓰레드 수를 너무 낮게하면 서버는 여유롭지만 클라이언트는 금방 응답 지연된다.
  • 최대 쓰레드 수를 너무 높게하면 메모리 리소스 임계점 초과로 서버가 다운될 수 있다.

WAS의 멀티 쓰레드 지원

  • 멀티 쓰레드에 대한 부분은 WAS가 처리한다.
  • 개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 된다.
  • 멀티 쓰레드 환경이므로 싱글톤 객체(서블릿, 빈)는 주의해서 사용해야한다.
    • 공유 변수 사용을 조심해야한다.

기타 용어 설명

SSR : 서버 사이드 렌더링

HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달하는 방법

  • 주로 정적인 화면에 사용한다.
    • 자바스크립트를 사용하면 화면 일부를 동적으로 변경하긴 할 수 있다.
  • 관련 기술 : JSP, 타임리프 -> 백엔드 개발자

CSR : 클라이언트 사이드 렌더링

HTML 결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용한다.

  • 주로 동적인 화면에 사용한다.
  • 웹 환경을 마치 앱처럼 필요한 부분부분 변경할 수 있다.
  • 관련 기술 : React, Vue.js -> 프런트엔드 개발자

'Spring' 카테고리의 다른 글

[Spring 검증] @ModelAttribute와 @RequestBody의 차이  (0) 2023.08.28
Spring HandlerMapping & Adapter, ViewResolver  (0) 2023.08.23
Spring Web관련 Scope  (0) 2023.08.22
Spring Bean Scope  (0) 2023.08.21
Spring Bean 생명 주기 콜백  (0) 2023.08.21
Comments