WAS,WS,서블릿

마자나다·2024년 7월 5일

Spring

목록 보기
9/9
  • 컨테이너와 서블릿의 동작방식이 조금 감이 안온다.
  • WAS와 WA그리고 서블릿의 기본개념을 알아보자

WAS와 WA

WAS : Web Application Server

  • 웹 어플리케이션 서버의 약자로 동적 웹 컨텐츠를 제공해주는 서버이다.

WAS의 기능

  • 클라이언트로부터 HTTP 요청을 받아서, 처리결과를 HTTP 응답으로 전송한다.
  • 웹 어플리케이션의 비즈니스 로직을 수행할 수 있다. Java .NET PHP 대표 언어가 이정도로 있다.
  • DB연동을 통해 데이터를 영구적으로 보관하고 사용한다
  • 보안, 인증, 권한부여등 다양한 보안기능 또한 제공한다

WA : Web Application

  • 웹 어플리케이션의 약자로 정적 웹 컨텐츠를 제공해준다.

WA의 기능

  • 접근성 : 인터넷이 연결된 모든 곳에서 접근 할 수 있다.
  • HTML, CSS, 자바스크립트 등 웹 기술을 사용하여 사용자 인터페이스를 제공한다.
  • 다양한 운영체제와 브라우저에서 동작한다.
  • 클라우드, 인프라 등을 통해 쉽게 확장할 수 있다.

!정적 웹 컨텐츠 : HTML파일이나 Text파일 처럼 다른 가공이 필요없이 클라이언트에게 응답할수 있는 형태 (HTML 파일, CSS 파일, 이미지, JavaScript 파일, 비디오 파일 등.)
!동적 웹 컨텐츠 :동적 콘텐츠는 클라이언트의 요청에 따라 실시간으로 생성되는 콘텐츠. 사용자 입력, 세션 정보, 데이터베이스 질의 결과 등에 따라 콘텐츠가 달라진다.

?그럼 동적, 정적 데이터를 서로 다르게 다루니까 역할이 다른건가? => 그건 딱히 아니다. WAS도 정적 컨텐츠를 다룰 수 있다. 하지만 부하 분산을 위해 정적데이터는 WA를 사용하는 경우가 있다. (물론 WAS성능이 좋아져서 WAS만 써도 된다는 글을 본거같다..)

WAS의 동작방식

  • WAS의 내부에 서블릿 컨테이너를 사용하여 서블릿의 생명주기를 다룬다.
  • 스프링 부트는 내장서버로 Tomcat을 사용한다. 톰켓이 지금의 WAS이다.
  • 그럼 WAS에서 다루는 서블릿과 컨테이너란 무엇인가?

서블릿

  • 서블릿(Servlet)은 자바 기반의 웹 애플리케이션에서 클라이언트의 요청을 처리하고 동적 웹 콘텐츠를 생성하기 위한 서버 측 컴포넌트입니다.
  • 자바에서는 web에서 서블릿을 자주 사용하는 것을 인지하고, 서블릿을 구현한 HttpServlet클래스를 만들었다.
  • 이를 통해 클라이언트의 요청을 HttpServletRequest, HttpServletResponse로 받아 처리하는 함수를 실행 할 수 있는 것입니다.

컨테이너

  • 컨테이너란 스프링에서 bean을 관리하는 것으로, bean의 생성/관리/파괴를 담당한다. 빈은 스프링이 관리하는 객체이다.
    스프링 IoC(Inversion of Control) 컨테이너를 말합니다. 스프링 IoC 컨테이너는 애플리케이션에서 객체(bean)의 생성, 구성, 관리, 파괴를 담당합니다.

간략한 스프링 동작방식

  1. 클라이언트의 요청 수신 : 클라이언트가 URL에 접근하여 HTTP프로토콜을 통해 요청을 보낸다. 해당 요청은 HTTP프로토콜을 통해 서버에게 전달된다.
  2. WAS에서 즉 톰켓, 서블릿 컨테이너 처리 : WAS내의 서블릿 컨테이너가 요청을 처리한다. URL을 분석하여 해당 URL에 맞는 서블릿을 매핑한다.
  3. 디스패처 서블릿 전달 : 스프링 어플리케이션에선 모든 요청은 디스패쳐 서블릿에게 전달된다.
  4. 디스패쳐 서블릿에서 핸들러로 전달 => 핸들러를 통해 URL에 맞는 컨트롤러를 찾아 로직 수행.

WAS(톰켓)의 서블릿 관리 방식

  • 앞서말한 HttpServlet클래스는 Http요청을 처리하는데 필요한 기본적인 메서드와 기능을 제공한다.
  1. 요청 처리
    • 클라이언트로부터 HTTP 요청을 받아들이고 이를 처리한다.
    • HTTP 요청 메서드에 따라 적절한 메서드를 호출한다.
  2. 응답 생성
    • 요청을 처리한 후, 클라이언트에게 HTTP응답을 생성하고 반환한다.
  3. 서블릿 라이프사이클 관리
    • 서블릿의 초기화, 서비스, 소멸 등의 라이프사이클 메서드를 제공

톰켓 동작방식

  • 톰켓은 오픈소스로 제공되며 서블릿 컨테이너로 자주 사용된다
  • 톰켓은 먼저 스레드풀을 통해 관리할 스레드를 만들어놓는다.
  • 클라이언트 요청이 들어오면 톰켓은 스레드풀에 남은 스레드를 할당하여 서블릿을 통해 처리한다.
  • HttpServletRequest, HttpServletResponse를 생성하고, servlet을 확인하여 serlvet이 없다면 init() 함수를 호출해 초기화 합니다.
  • 초기화가 되었다면 service() 함수를 호출하여 클라이언트 요청을 처리 한다.
  • 반환값을 HttpServletResponse에 담아서 클라이언트에게 응답한다.
  • 톰켓이 종료되면 서블릿 컨테이너에서 서블릿의 destory()를 호출해 파괴한다.

이러한 기본동작들은 서블릿컨테이너가 동작할 수 있는 JVM환경이 있어야 한다.

  • 대략 이러한 WAS의 복잡한 로직떄문에 WS에서 정적인 컨텐츠를 처리하는 경우도 있다고 한다.

https://velog.io/@qf9ar8nv/WAS-WS-정리

profile
우왕좌왕 개발

0개의 댓글