ysk(0soo)
Lifealong
ysk(0soo)
전체 방문자
오늘
어제
  • 분류 전체보기 (238)
    • Java (50)
      • whiteship-java-study (11)
      • Java (28)
      • time (6)
    • Spring (68)
      • JPA (15)
      • Spring (1)
      • SpringBoot (1)
      • SpringMVC (6)
      • Spring Security (22)
      • Jdbc (1)
      • RestDocs (14)
      • log (6)
    • Kotlin (3)
    • Web (2)
      • nginx (1)
    • Database (14)
      • MySQL (5)
      • PostgreSQL (1)
      • SQL (1)
      • Redis (4)
    • C, C++ (0)
    • Git (1)
    • Docker (2)
    • Cloud (3)
      • AWS (3)
    • 도서, 강의 (0)
      • t5 (0)
    • 기타 (7)
      • 프로그래밍 (1)
    • 끄적끄적 (0)
    • CS (14)
      • 운영체제(OS) (2)
      • 자료구조(Data Structure) (9)
    • 하루한개 (12)
      • 우아한 테크코스-10분테코톡 (12)
    • 스터디 (12)
      • 클린 아키텍처- 로버트마틴 (2)
      • JPA 프로그래밍 스터디 (10)
    • 테스트 (34)
      • JUnit (19)
      • nGrinder (2)
      • JMeter (0)
    • Infra (3)
    • 프로그래머스 백엔드 데브코스 3기 (0)
    • 디자인 패턴 (3)
    • Issue (4)
    • system (1)
      • grafana (0)
      • Prometheus (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

공지사항

인기 글

태그

  • restdocs custom
  • UserDetailsService
  • 동등성
  • junit5
  • 트랜잭션
  • DataJpaTest
  • VirtualThread Springboot
  • 정규표현식
  • node exporter basic auth
  • 동시성 제어
  • StructuredConcorrency
  • 가상 스레드 예외 핸들링
  • 동일성
  • mysql
  • querydsl
  • scope value
  • 인가(Authorization) 처리
  • 가상 스레드
  • AccessDecisionVoter 커스텀
  • 구조화된 동시성
  • jpa
  • java
  • nginx basic auth
  • restdocs enum
  • LocalDateTime
  • tree
  • AuthenticationException
  • FilterSecurityInterceptor
  • nGrinder
  • AccessDecisionManager

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ysk(0soo)

Lifealong

Web

Redirect VS Forward (리다이렉트와 포워드의 차이 )

2022. 9. 27. 17:18
  • Redirect VS Forward의 차이

    포워딩(Forwarding)과 리다이렉트(Redirect)는 JSP 환경에서 페이지에서 다른 페이지로 이동하는 페이지 전환 기능들이다.

    Redirect

    Redirect : 사전적 의미 : 우편물이나 문서 등을 다른 주소나 방향으로 연결해 보내는것
    • re(다시) + direct(지시하다, 보내다)
    에를들어, 웹 브라우저가 www.naver.com/post/abcd 라는 url로 요청을 웹서버로 보냈을때, 다른 url을 지시하는것을 리다이렉트라 한다.
    • 클라이언트는 서버로 부터 받은 응답 값이 상태코드 302라는 것을 보고 서버가 리다이렉트를 시킨거라는걸 알 수 있다.
      • 여기서 보통 클라이언트는 웹 브라우저라고 생각하면 된다.

    • 웹 브라우저가 302 코드를 보고 리다이렉트 해야하는 url로 브라우저가 직접 다시 요청을 보낸다.
      • 즉 클라이언트 입장에서 서버의 특정 URL로 요청을 보냈을때 다른 URL을 가라고 알려주는것.

    • redirect(리다이렉트)는 페이지 전환 주체가 클라이언트이다.
      • 새로운 페이지가 나온다고 생각하면 된다.
    • 또한, 리다이렉트 정보를 받기 전, 처음 보냈던 요청과는 별개의 요청이므로 새로운 request, response가 생성된다.
      • 처음 했던 요청과는 별개의 요청이다. 즉 새로운 request, response 객체가 생성되는것이다.
    • 또한, url 주소가 달라진다. (302 코드와 함께 새로 전환할 url을 넘겨주므로)
    • 리다이렉트는 클라이언트의 요청에 의해 DB에 변화가 생기는 작업에 주로 사용한다.

    Forward

    Forward : 사전적 의미 : 앞으로, 건네주다 서버에서 포워딩된 url의 리소스를 확인하여 클라이언트에 응답한다.
    • URL도 바뀌며, Response Code도 2xx로 정상 요청에 대한 응답으로 나오게 된다.
      • (400, 500 등 다른 에러가 나지 않았을 경우에.).
    • 클라이언트는 다른 페이지로 이동을 했는지 알 수 없다.
    • 클라이언트가 url에 대한 요청이 들어오면, 해당 url이 다른 url로 건네주는 행위를 포워딩이라고 하고,
    • HTTP로 요청을 받은 서버는 HTTP 응답 상태코드로 302를 보내고, 응답 메시지 헤더 중 Location 값으로 리다이렉트 되어야 할 주소를 설정해 리턴한다.
    • 서버는 Http(응답코드 : 302) 응답 메시지를 통해 www.naver.com/post/ekfmsrht 라는 다른 url로 다시 요청하라고
    • 이 두가지의 차이점은 페이지 이동이 어떻게 이루어지는가에 있다.
    • 동일한 웹 컨테이너에 있는 페이지로만 이동 할 수 있다.
    • 포워딩은 클라이언트와 통신없이 서버에서만 처리되는 것이기 때문에 리다이렉트보다 나은 성능을 보여준다.
    • 현재 실행중인 페이지와 Forwarding에 의해 호출될 페이지는 Request와 Response 객체를 공유한다.
      • 객체를 요청에 담고 해당 요청을 사용할 다음 자원에 전송한다는 뜻이다.
    • 포워딩이 일어나면 클라이언트 단에서는 아무런 동작을 하지 않으며, 모든 동작을 서버에서 처리한다.
      • 그래서 사용자가 최초로 요청한 URL 및 요청정보는 바뀌지 않는다.
      • 다음 url 에서도 유효한것이다.
    • 포워딩은 특정 url에 대해 외부에 공개되지 말아야 하는 부분을 가리는데 사용된다.
      • 시스템이나 DB에 변화가 생기지 않는 단순 조회, 검색 등에 사용한다.

    그렇다면 forward와 Redirect의 차이점은?

    포워드와 리다이렉트는 비슷하지만 다르다.
    •  

1. 리다이렉트는 url 주소가 달라지고, 포워드는 url 주소가 달라지지 않는다

  • 리다이렉트는 클라이언트가 서버에게 요청을 보내면 서버는 어떠한 일을 처리하고 클라이언트에게 새롭게 요청할 곳을 알려준다.
  • 리다이렉트의 결과 url 주소가 달라진다.
  • 포워드는 클라이언트가 요청을 보냈을 때 또 다른 서버에게 일을 넘긴다(forward).
    • 포워드의 경우 클라이언트는 서버에서 서블릿이 혼자 일을 처리했는지, 다른 서블릿에게 일을 위임했는지 알 필요가 없다.
    • 포워드가 실행되면 url주소는 바뀌지 않는다. 

 

2. 리다이렉트는 request, response 객체가 여러 번 생성되고, 포워드는 한 번만 생성되어 재사용(공유)할 수 있다.

 

 

  • 참조
    • https://kbj96.tistory.com/39
    • https://bellog.tistory.com/80
    • https://sdevstudy.tistory.com/26
    • 부스트코스 강좌
      • 이해되지 않으신다면 들어가서 보시면 됩니다
    ysk(0soo)
    ysk(0soo)
    백엔드 개발을 좋아합니다. java kotlin spring, infra 에 관심이 많습니다. email : kim206gh@naver.com github : https://github.com/devysk

    티스토리툴바