리다이렉트(Redirect)와 포워드(Forward)의 차이는 무엇인가?

2022. 2. 7. 06:03· Network/Basic
목차
  1. 리다이렉트와 포워드
  2. 리다이렉트란?
  3. 포워드란?
  4. 리다이렉트와 포워드의 사용
반응형

리다이렉트와 포워드

특정 URL 접속 시 리다이렉트 또는 포워드가 일어나게 되면 작업 중인 페이지가 전환된다. 리다이렉트와 포워드는 페이지가 전환된다는 점에서 비슷한 역할을 한다. 하지만 이 둘 사이에는 페이지를 전환하는 주체가 다르다는 큰 차이점이 있는데, 이 차이점이 동작에 큰 영향을 미친다. 

 

리다이렉트는 페이지 전환 주체가 클라이언트이며, 포워드는 페이지 전환 주체가 서버이다. 클라이언트가 주체가 되어 페이지를 전환하는 방법은 접속한 URL이 아닌 다른 URL로 직접 접속하는 방법 밖에 없다. 반대로 서버가 전환 주체가 되면 URL 주소가 바뀌지 않고도 서버 내부의 동작을 통해 다른 응답을 클라이언트에 내려줄 수 있게 된다. 리다이렉트와 포워드가 무엇인지, 어떻게 동작이 다른지를 살펴볼 것이다.

 

 

리다이렉트란?

리다이렉트(Redirect)는 서버에서 클라이언트에서 요청한 URL에 대 응답에서 다른 URL로 재접속 하라고 명령을 보내는 것을 말한다. Re-Direct는 'URL을 다시 가리킨다' 라는 뜻을 가지며, 클라이언트는 해당 URL로 다시 요청하게 된다. 리다이렉트가 일어나면 URL 주소가 바뀌면서 다시 접속되는 것을 확인할 수 있어, 클라이언트 또한 리다이렉션이 일어났음을 알 수 있다. 

 

여기서 말하는 클라이언트는 보통 웹브라우저를 뜻한다. 웹브라우저는 서버에서 Redirect를 하라는 응답코드인 300번대 코드가 오게 되면, 리다이렉트를 해야되는 URL로 다시 요청을 보내는 역할을 한다.

 

그림1. 리다이렉트

 

예를 들어 [그림1]과 같이 클라이언트에서 kotlinworld.com/21를 서버에 요청했는데, 서버에서 해당 글이 kotlinworld.tech/2로 이동되었음을 확인한 경우 kotlinworld.tech/2로 리다이렉션을 명령하게 된다. 그러면 클라이언트는 다시 kotlinworld.tech/2를 요청하며, 서버는 해당 url 값의 html 문서를 리턴해 클라이언트에서 해당 문서를 확인할 수 있게 된다. 이때 웹브라우저 주소창의 kotlinworld.com/21이 kotlinworld.tech/2로 바뀌게 되어 클라이언트는 리다이렉션이 일어났음을 인지할 수 있다.

 

 

포워드란?

클라이언트가 한 번 더 요청을 보내도록 하는 리다이렉트와 다르게 포워드는 서버 내부에서 일어나는 호출이다. 클라이언트의  URL에 대한 요청이 들어오면 해당 URL이 다른 URL로 포워딩 된 것이 확인되었을 경우 서버에서 포워딩된 URL의 리소스를 확인하여 클라이언트에 응답한다.

 

포워딩이 일어나면 클라이언트 단에서는 아무런 동작을 하지 않으며, 모든 동작을 서버에서 처리한다. 따라서 클라이언트(웹브라우저)에서 요청한 URL은 물론 요청정보는 바뀌지 않는다.

 

그림2. 포워드

 

예를 들어 [그림2]와 같이 kotlinworld.com/95를 서버에 요청했는데, 서버에서 해당 글의 리소스가 kotlinworld.com/WEB-INF/95에 있음을 확인한 경우, kotlinworld.com/WEB-INF/95를 리소스를 확인하여 클라이언트에 응답하게 된다. 이 과정에서 클라이언트가 요청한 kotlinworld.com/95는 바뀌지 않고 요청 정보가 그대로 유지된다, 클라이언트 또한 포워딩이 일어났는지 조차 알지 못한다.

 

즉, 포워딩은 서버의 내부 동작이다.

 

 

리다이렉트와 포워드의 사용

사용자의 요청 정보가 바뀌어버리는 리다이렉트와 요청 정보는 그대로 유지한 체 서버 내부의 동작만 바뀌는 포워드는 적절히 사용되어야 한다.

 

리다이렉트는 클라이언트의 요청에 의해 서버의 DB에 변화가 생기는 작업에 사용된다. 예를 들어 DB의 유저 테이블을 변경하는 회원가입과 같은 경우에는 리다이렉트가 사용되어야 요청을 중복해서 보내는 것을 방지할 수 있다.

 

포워드는 특정 URL에 대해 외부에 공개되지 말아야 하는 부분을 가리는데 사용하거나 조회를 위해 사용된다. 스프링의 경우 /WEB-INF에 있는 view에 대한 정보들이 외부에 직접 공개되지 말아야 할 때 내부에서 포워딩을 통해 /WEB-INF 경로를 가리키도록 한다. 예를 들어 kotlinworld.com/95 로 요청을 하면  kotlinworld.com/WEB-INF/95를 응답하는 형식이다.

반응형
저작자표시 비영리 변경금지
  1. 리다이렉트와 포워드
  2. 리다이렉트란?
  3. 포워드란?
  4. 리다이렉트와 포워드의 사용


 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com

'Network/Basic' 카테고리의 다른 글
  • UUID란 무엇이고 어떻게 구성되는가? 언어별(Kotlin, Java, JavaScript, C#, Python) UUID 만드는법 알아보기
  • [JSON] JSON은 무엇인가?
  • URI, URL, URN 의 차이 한 번에 정리하기 : 리소스 구분 관점에서 보는 URI, URL, URN의 차이
  • [인터넷 프로토콜] TCP란 무엇인가? 패킷 전송을 위한 정보의 관점에서 보는 TCP(Transmission Control Protocol)
Dev.Cho
Dev.Cho
'조세영의 Kotlin World'는 Kotlin를 전문적으로 다루는 개인 기술 블로그입니다. Kotlin 세계에 대한 양질의 자료를 제공하며 Kotlin, Android, Spring, CI, CD 분야에 대해 다룹니다.
Dev.Cho
조세영의 Kotlin World
Dev.Cho
전체
오늘
어제

블로그 메뉴

  • LinkedIn
  • GitHub
  • 분류 전체보기 (491)
    • Kotlin (104)
      • Class and Interface (19)
      • Variable and Function (8)
      • Modifier (5)
      • Collection (14)
      • Time (8)
      • 동시성 제어 (7)
      • Reactive Programming (2)
      • Paradigm (2)
      • Kotlin 자료구조 (15)
      • Design Patterns (11)
      • Algorithm (3)
      • Exception (1)
      • 기타 (9)
      • Update History (0)
    • Coroutines (32)
      • Coroutine Basics (18)
      • Flow (9)
      • CoroutineScope (3)
      • Debugging (2)
    • Testing Codes (28)
      • Test 기본 (3)
      • JUnit5 (9)
      • MockK (6)
      • Testing Coroutines (1)
      • Testing Android (8)
      • Test 기타 (1)
    • Spring (50)
      • Dependency Injection (18)
      • Settings (5)
      • REST API (0)
      • DevTools (1)
      • MVC (18)
      • Error (2)
      • MongoDB (2)
      • Database (4)
    • Android (39)
      • Architecture (2)
      • Component (5)
      • Manifest (1)
      • Lifecycle (2)
      • Dependency Injection (17)
      • Resource (1)
      • Storage (1)
      • Security and Optimization (1)
      • WebView (2)
      • Error (6)
    • Android Jetpack Compose (33)
      • Compose (6)
      • Compose Modifier (13)
      • Compose Resource (4)
      • Compose State (4)
      • Compose Side Effect (6)
    • Android Jetpack Compose UI (48)
      • Compose Layout (14)
      • Compose Text (10)
      • Compose Button (5)
      • Compose Dialog (2)
      • Compose TextField (0)
      • Compose UIs (4)
      • Compose Animation (1)
      • Compose Canvas (12)
    • Android Jetpack (10)
      • Datastore (5)
      • ViewModel (4)
      • LiveData (1)
      • Paging (0)
    • KMP (5)
    • Programming (4)
    • Machine (9)
      • JVM (7)
      • Linux (2)
    • CI, CD (74)
      • Gradle (12)
      • Groovy Gradle (5)
      • Git (25)
      • Git Remote (5)
      • GitHub (5)
      • GitHub Actions (21)
    • Network (33)
      • GraphQL (12)
      • HTTP (11)
      • Basic (9)
    • 오픈소스 (3)
    • Database (3)
      • MongoDB (3)
    • IDE (6)
      • Android Studio (2)
      • Intellij (4)
    • Firebase (1)
    • Javascript (9)

공지사항

  • 코틀린 코루틴 완전 정복 강의 in 인프런 오픈
  • 코틀린 코루틴의 정석 책 출간
  • Kotlin Coroutines 공식 기술 문서 한국어 번⋯
  • GitHub에서 조세영의 Kotlin World를 Foll⋯
  • 문의&제안

인기 글

태그

  • Kotlin
  • 의존성 주입
  • 유닛 테스팅
  • github
  • 스프링
  • 코틀린
  • HTTP
  • dagger2
  • junit5
  • Spring
  • github actions
  • junit4
  • junit
  • Dependency Injection
  • Jetpack Compose
  • GraphQL
  • compose
  • 안드로이드
  • Class
  • Coroutine
  • Android
  • flow
  • Unit Testing
  • 코루틴
  • GIT
  • java
  • kotlin spring
  • gradle
  • Android Compose
  • Spring boot

최근 글

반응형
hELLO · Designed By 정상우.v4.3.0
Dev.Cho
리다이렉트(Redirect)와 포워드(Forward)의 차이는 무엇인가?
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.