톰캣 구현하기 미션 중 특정 API 요청을 처리하고 리다이렉션을 해야하는 요구사항이 있었다.
MDN 문서를 통해 학습을 하면서 응답에 302 Found를 반환할 경우 자동으로 리다이렉션 처리가 되는 것을 알았다.
300대의 다른 응답도 모두 리다이렉션이 가능한지 찾아보면서 300 Multiple Choices와 수동 리다이렉션에 대해 알게 되었다.
Multiple Choices 이라는 의미가 궁금하기도 하고 수동 리다이렉션에 대해 학습해보고자 작성한다
리다이렉션 종류
라다리렉션의 종류는 총 3가지로 나뉜다.
- 영구 리다이렉션
- 일시 리다이렉션
- 특수 리다이렉션
영구 리다이렉션
영구 리다이렉션은 기존 URL이 사용되지 않아야 할 때 사용된다.
즉, API 자체가 제거(또는 다른 API로 컨텐츠가 이동)되거나 도메인이 제거되는 등의 상황에서 사용된다.
영구 리다이렉션에 해당하는 상태코드는 다음과 같다.
- 301 Moved Permanently: 요청한 리소스가 영구적으로 새 위치로 이동
- 308 Permanent Redirect: 301과 유사하지만, 요청 메서드와 본문을 변경하지 않음
일시 리다이렉션
일시 리다이렉션은 리소스가 일시적으로 다른 URL에서 제공될 때 사용된다.
보통 서버가 유지보수를 한다던가, 일시적으로 트래픽을 분산시켜야하는 등등의 상황에서 사용된다.
해당하는 상태코드는 다음과 같다.
- 302 Found: 리소스가 일시적으로 다른 URL에 있음
- 303 See Other: 요청 결과가 다른 URL에 있음 (주로 POST 요청 후 사용)
- 307 Temporary Redirect: 302와 유사하지만, 요청 메서드와 본문을 변경하지 않음
특수 리다이렉션
특수 리다이렉션은 특정 조건이나 상황에 따라 다른 동작을 요구할 때 사용된다.
예를 들어 여러 옵션이 주어질 때나 조건부 요청을 처리할 때 사용된다고 한다.
해당하는 상태코드는 다음과 같다.
- 300 Multiple Choices: 클라이언트가 여러 옵션 중 하나를 선택해야 함
- 304 Not Modified: 조건부 GET 요청에 대해 리소스가 변경되지 않았음을 나타냄
조건부 GET 요청은 HTTP 캐싱 시에 사용되는 요청으로
클라이언트가 이미 가지고 있는 리소스에 대한 요청일 경우, If-Modified-Since 헤더의 정보 또는 ETag등을 통해 리소스가 수정되었는지를 확인한다.
수정되지 않았다면 불필요한 데이터 전송을 막아 네트워크 효율을 높힌다.
여러 옵션 중 하나를 선택해야 한다라는 300 Multiple Choices이 조금은 와닺지 않아 더 살펴보자.
300 Multiple Choices
300 Multiple Choices은 수동 리다이렉션이라고도 불리는데, 바로 요청 응답 시 응답 본문을 통해 여러개의 HTML을 제공한다.
각 HTML은 사용자가 선택할 수 있는 옵션에 해당된다.
예시로 아래와 같은 응답을 확인할 수 있다.
HTTP/1.1 300 Multiple Choices
Content-Type: text/html; charset=UTF-8
Location: https://example.com/document.en.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Choose Your Preferred Option</title>
</head>
<body>
<h1>Multiple Choices Available</h1>
<p>선택 가능한 언어:</p>
<ul>
<li><a href="https://example.com/document.en.html">English Version</a></li>
<li><a href="https://example.com/document.fr.html">Version Française</a></li>
<li><a href="https://example.com/document.de.html">Deutsche Version</a></li>
</ul>
<p>선택 가능한 형식:</p>
<ul>
<li><a href="https://example.com/document.pdf">PDF Document</a></li>
<li><a href="https://example.com/document.html">HTML Page</a></li>
<li><a href="https://example.com/document.txt">Plain Text</a></li>
</ul>
</body>
</html>
다음과 같은 상황에서 사용되지만 추가적인 사용자의 요청이 필요하고 검색 엔진 최적화에 좋지 않는 등 자주 사용되지는 않는다고 한다.
- 다국어 웹사이트에서 사용자에게 언어 선택 옵션 제공
- 여러 포맷(예: PDF, HTML, TXT)으로 제공되는 문서에 대한 선택 제공
- 모바일과 데스크톱 버전 중 선택 제공
'우아한테크코스 6기 > 4단계' 카테고리의 다른 글
API 성능 개선하기 2탄 (feat. 검색 전문 인덱스 적용하기) (1) | 2024.09.28 |
---|---|
API 성능 개선하기 1탄 (feat. N + 1과 불필요한 쿼리 개선) (0) | 2024.09.25 |
ApplicationContext vs ServletContext (0) | 2024.09.17 |
Tomcat의 Coyote와 Catalina에 대해 알아보자 (1) | 2024.09.08 |
Tomcat의 전체 구조와 역할에 대해 알아보자 (0) | 2024.09.07 |