키로 원래 주소를 찾았습니다. 이제 브라우저를 그 주소로 보냅니다. 어떤 응답으로 보내는지가 이 서비스의 두 기능을 좌우합니다.
응답 코드의 뜻 자체는 HTTP 상태 코드 개념에서 다뤘습니다. 여기서는 단축기에서 그 선택이 만드는 결과만 봅니다.
영구와 임시의 차이가 만드는 것
영구 이동으로 답하면 브라우저가 그 대응을 기억합니다. 다음부터는 우리 서버를 지나지 않고 곧바로 목적지로 갑니다.
| 항목 | 영구 이동 | 임시 이동 |
|---|---|---|
| 두 번째 방문 | 우리를 지나지 않는다 | 지나간다 |
| 사용자 체감 | 더 빠르다 | 왕복 한 번 |
| 우리 서버 부하 | 크게 줄어든다 | 조회마다 받는다 |
| 조회 수 세기 | 첫 방문만 센다 | 모두 센다 |
| 대상 주소 변경 | 반영되지 않는다 | 반영된다 |
이 요구사항에서는 임시를 고른다
요구사항에 조회 수 세기가 있습니다. 영구로 답하면 그 기능이 동작하지 않습니다. 첫 방문만 세고 나머지는 보이지 않으므로 숫자가 실제보다 훨씬 작게 나옵니다.
그리고 만료 기능도 영향을 받습니다. 브라우저가 기억한 대응은 우리가 만료시켜도 그 브라우저에서는 계속 동작합니다.
조회 초당 1만 를 모두 받는 대가를 냅니다. 그 부하를 감당하는 것이 다음 개념의 주제입니다.
되돌릴 수 없는 선택이다
영구 이동은 브라우저에 오래 남습니다. 잘못 응답한 대응을 우리가 지울 방법이 없습니다.
잘못된 목적지로 영구 이동을 보내면
그 브라우저는 우리에게 다시 묻지 않는다
그래서 영구를 고르려면 그 대응이 절대 바뀌지 않는다는 확신이 필요합니다. 단축 링크는 대상이 바뀌거나 만료되는 종류라 그 확신이 없습니다.
응답 본문을 비워 둔다
리디렉션 응답에는 본문이 필요 없습니다. 목적지 주소만 헤더에 담으면 됩니다. 조회 초당 1만 에 본문이 붙으면 그만큼의 전송량이 곱해집니다.
조회 수를 응답 경로에서 세지 않는다
리디렉션은 50ms 안에 끝나야 합니다. 조회 수를 세는 저장을 그 경로에서 기다리면 예산을 씁니다.
목적지를 먼저 응답한다
조회 수는 뒤로 넘겨 모아서 센다
정확한 실시간 숫자가 필요한 기능이 아니므로 모아서 세는 편이 맞습니다. 몇 초 늦게 반영되는 것을 요구사항에서 허용해 두면 이 선택이 자유로워집니다.