Web, WAS, DispatcherServlet 그리고 HttpServlet? Servlet?

김재현·2023년 11월 30일
0

TIL

목록 보기
45/88
post-thumbnail

오늘의 알고리즘

>숫자 짝궁_자바
>체육복_자바


Web, WAS, DispatcherServlet

그동안 이름은 많이 들어봤던 녀석들이지만 머릿속에 둥둥 떠다니고 있었는데, 이번 기회에 정리하며 공부해보았다.
현재 Spring을 학습중이라 spring 중점으로 정리되었을 수 있다.

순서

  1. 클라이언트의 요청
  2. Web Server
  3. WAS (Web Application Server)
  4. DispatcherServlet(Spring MVC에서)
  5. 컨트롤러와 뷰
  6. 웹 서버를 통한 응답 전달

Web Server, WAS

간단하게 정리하자면, 각각의 역할을 나눠서 작업하여 서버 부하를 방지한다.

  • Web Server: 정적인 파일 처리 (HTML, 이미지 등)
  • WAS: 동적인 컨텐츠에 대한 요청 처리 (Java, PHP 등)

웹 서버가 클라이언트와 응답을 주고받으며 처리할만한 응답이라면 여기서 다 쳐내고, 동적인 것도 필요하면 WAS에게 일을 시킨다.
WAS 저거 DB랑 놀고있는거봐라

WAS는 Java Servlet 컨테이너를 포함하고 있어서 Java 웹 애플리케이션(우리가 만드는 Spring 서버)을 실행한다.
이는 곧 DispatcherServlet이 요청을 받는 다는 것을 의미한다.

(다른 그림, 같은 의미)

Dispatcher Servlet

그림은 View를 반환하는 Server Side Rendering이다.
(JSON으로 반환하면 프론트가 처리해주는 Client Side Rendering도 있음. 일단 중요하지 않다.)

  • Handler Mapping을 통해 어떤 Controller로 매핑할지 확인
  • Handler Adapter를 사용해 Controller로 요청 전달

--> 그 후엔 알다시피 CRUD 등등...

컨트롤러는 모델 데이터를 생성하여 view에게 넘겨준다.

View

모델을 기반으로 최종적인 응답을 생성한다. (HTML, JSON, XML, ... ) Spring MVC에서는 주로 JSP, Thymeleaf, FreeMarker 등을 사용하여 구현.

--> 생성된 이 모든 것이 다시 WAS를 빠져나가고 Web을 통해 클라이언트 응답으로 간다.


출처1: 스파르타 코딩클럽
출처2: WAS에 독립된 Web Server를 두는 이유
출처3: Spring 을 이용한 웹 서비스 구조
출처4: Request 흐름과 WAS에 대한 아주 짧은 이야기


HttpServlet? Servlet?

그럼 그동안 써왔던 HttpServletRequest, ServletRequest, HttpServletResponse, ServletResponse 는 어디에서 쓰이며 어떤 차이가 있는가? Request만을 예시로 얘기해겠다.

생성 위치

웹 컨테이너가 ServletRequest의 구현체를 생성하여 서블릿에 전달한다.
WAS에서 생성되어 DispatcherServlet으로 전달되는것이다!

둘의 차이점

  • ServletRequest에는 파라미터, 헤더, 세션 등이 포함되어있다.

  • HttpServletRequest는 ServletRequest의 하위 인터페이스이다.
    HTTP 요청을 처리하는 데 활용(특화된 메서드와 기능 제공)
    메서드, 헤더, 쿠키, 세션 등의 정보를 다룰 때 사용된다.

확실히 servletRequest 보다 기능이 많은 것을 볼 수 있다.

정리해보자면

  • ServletRequest는 모든 종류의 서블릿 요청에 대한 일반적인 인터페이스를 제공
  • HttpServletRequest는 HTTP 프로토콜을 기반으로 하는 HTTP 요청에 특화된 메서드와 기능을 추가로 제공

주로 HTTP 요청을 다룰 때는 HttpServletRequest를 사용하는 것이 편리하겠다!


도대체 요청과 응답이 어떻게 처리되는건지 X-BOX 처럼만 느껴졌는데, 오늘 공부를 통해 전체적인 흐름을 정확히 이해 할 수 있었다. 그동안은 구름 속에서 코딩을 했다면... 앞으로는 요청을 받아 처리하는데 이러한 흐름을 알기 때문에 명확히 코드를 짤 수 있겠다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글