[TIL] 2024-08-07

성장일기·2024년 8월 7일

회고

목록 보기
21/37

중요 학습 내용 [Servlet]

Forwarding & Redirect

Forwarding

  • 클라이언트의 요청을 서블릿 컨테이너 내에서 Dispatcher Servlet이 요청을 받아 다른 서블릿으로 요청과 응답을 위임
  • 위임받은 서블릿이 Dispatcher Servlet으로부터의 요청과 응답을 처리하여 클라이언트에게 전달
  • 클라이언트는 서버 내부의 동작은 모르나, 요청에 의한 응답을 받음

특징

  • 클라이언트 입장에서는 새로고침과 같은 요청을 여러번 반복요청할 수 있기에, 서버의 조회 처리에 관한 요청을 하는 것에 적합

    클라이언트의 요청이 서버에서의 insert에 해당하는 요청이라면, 서버가 위협받을 수 있다.

Redirect

  • 클라이언트 요청을 받은 서버의 서블릿이 response를 통해 별도의 추가 요청을 하도록 하여 브라우저가 다른 서블릿 객체나 다른 리소스를 요청하도록 함

특징

  • 클라이언트 입장에서는 새로고침과 같은 요청을 여러번 반복요청하더라도 redirect된 다른 요청에 대한 response를 받는다. 따라서 insert, update, delete 등 서버 내부적으로 관리되는 데이터에 영향을 미치는 작업을 처리하는 것에 적합

    redirect를 포함하는 요청은 일반적으로 client가 지칭한 원래 요청과 다르기에 새로고침을 하더라도 forward에 비해 상대적으로 서버에 대한 위협 가능성이 적다

HTTP 통신 한계

  • Connectionless(비연결성)
    : 클라이언트와 서버가 통신할 당시에만 연결을 이루고 이후에는 연결을 갖지 않는다.

  • Stateless(무상태성)
    : 클라이언트가 통신을 하더라도, 서버와 클라이언트가 서로의 상태를 공유하지않기에 않는다.

  • HTTP 통신의 한계를 극복할 수 있다.
  • 클라이언트(브라우저)가 상태를 유지하는 방법

  • 클라이언트(브라우저)의 최초 요청 시 서버에 도달하는 쿠키에 서버에 대한 정보를 담아 클라이언트에 전달하면, 이후 통신에 해당 쿠키를 활용하여 브라우저에서는 서버에 대한 상태를 알 수 있다(무상태성 극복)

  • ex)

    • 로그인정보를 cookie에 저장하여 자동 로그인 기능 제공 가능
    • 웹 사이트 방문자 추적 가능

Session

  • 서버가 상태를 유지하는 방법

  • 일반적으로 session ID는 쿠키에 담겨 전달되고, 서버는 브라우저의 최초 요청을 통해 세션을 생성한다.

  • 클라이언트(브라우저)는 생성된 Session ID를 이후 서버 요청시에 쿠키를 통해 서버에 전달하고, 서버에서는 서블릿이 session ID에 맞는 정보를 전달할 수 있다.

  • ex)

    • 사용자 로그인 상태 유지
    • 쇼핑 카트 정보 유지

Filter & Wrapper

Filter

  • 클라이언트의 request에 대해 servlet으로 전달되기 전에 전처리를 하고, response에 대해 후처리를 할 수 있다.
  • request/response와 서블릿 사이에 전달되는 데이터를 가로채어, 변경과 필터링 작업을 수행
  • 인증 필터, 압축 필터, 리소스 접근 트리거 이벤트 필터, 로깅 필터, 이미지 변환 필터, 토크나이저 필터 등 다양하게 사용 가능

Filter Lifecycle

Wrapper

  • client의 요청에 대해서 request나 response 데이터를 wrapping하여 filter에서 처리할 수 있다.

cf)

  • Servlet 계층
    Servlet (인터페이스) -> HttpServlet(추상클래스)

  • Filter 계층
    Filter (인터페이스) -> 직접구현

  • Wrapper 계층
    HttpServletRequest (인터페이스) -> HttpServletRequestWrapper (구현 클래스)
    HttpServletResponse (인터페이스) -> HttpServletResponseWrapper (구현 클래스)

profile
엔지니어로의 성장일지

0개의 댓글