HTTP Referer란 무엇일까?

..·2024년 8월 14일

finder

목록 보기
12/23

시작하기 전에

HTTP Referer에 대해 알게 된 경위와 그 과정에서 있었던 사건 위주로 기록한 내용입니다.



의식의 흐름

데이터를 다루는 일이 재미있어서 데이터 사이언스 스터디를 듣고 있다.
사실 이전에는 잘 몰랐는데 데이터와 관련해서 엔지니어/분석가/사이언티스트가 각각 역할이 다르다는 것을 알게 되었고, 나는 백엔드 개발 경험을 쌓았지만 데이터 엔지니어링이 즐거워서 관심을 가지고 있는 상태라는 것도 알았다.

데이터 사이언스 스터디를 들으면서 데이터를 시각화하는 과정도 재밌지만, 어떤 데이터베이스를 사용하고 데이터의 어떤 구조를 이용하여 효율적으로 서비스를 만들 수 있는지 기여하는 일을 하고 싶다고 생각했다.


일단 데이터가 있어야지

항상 혼자 백엔드 프레임워크를 공부하든 뭘 하든 기본적인 CRUD 이외에도 서비스의 구색을 갖추기 위해서는 해당 서비스에 알맞은 데이터가 필요할 때가 많다.
서비스의 형태를 갖추기 위해서는 데이터가 필수이기 때문이다.
그래서 내가 공부하면서 만들었던 프로젝트 중에서 데이터를 제대로 갖추지 못하여 서비스라고 말할 수 없는 상태일 때가 많았고, 이러한 문제 때문에 서비스에 대한 아이디어를 내더라도 구체적으로 구현까지 마친 경험이 없었다.

이러한 문제를 해결하기 위해서는 직접 데이터를 수집하는 방법 밖엔 없다고 생각했다.


수집할 데이터에 대해 생각하기

최근에 내가 관람 기록을 남겼던 영화들을 가지고 데이터를 분석하고 시각화하는 시간을 가졌다.
이때 나의 개인 데이터를 구하는 방법은, 직접 스프레드시트에 내용을 작성하는 방법뿐이었다.
이번에도 비슷한 서비스 중에서 무엇이 있을까 생각하다가, 평소에 사용하는 OTT 서비스에서 가끔씩 서비스 종료 예정 작품이 생겨나지만 이러한 데이터를 한 번에 알아보기 어려웠던 경험이 떠올랐다.

[OTT 플랫폼 이름] 종료 예정작

OTT 사이트에서 종료 예정 작품에 대한 정보를 제공하고 있는 경우도 있었지만 그렇지 않은 곳도 있었다.
크롤링의 개념은 알고 있었지만, 실제로 크롤링을 해 본 적은 없어서 먼저 API를 살펴보았다.



API 살펴보기

Authorization 값 추가하기

요청 API를 그대로 복사해서 새로운 요청을 시도했을 때 오류 메시지를 확인했다. 요청 헤더에 JWT를 추가하는 것을 확인하고, 헤더에 Authorization을 추가하여 다시 요청했다. 하지만 이번에도 제대로 된 응답을 얻을 수 없었다.

헤더의 다른 값 확인하기

API 요청 헤더에 존재하는 값을 살펴보다가 Referrer, Referer라는 항목을 확인할 수 있었다. 예시로 살펴보았던 헤더의 Referrer에는 도메인 주소 값을 가지고 있었고, Referer에는 특정 경로가 포함된 URL 값을 가지고 있었다.
2개의 값을 어떻게 사용하는가에 따른 차이가 궁금해서 각각 하나씩만 이용한 요청을 시도해 보았다.

1. Referrer만 사용했을 때

https://도메인 주소 값을 요청 헤더에 포함한 경우에는 서버 오류(500)가 발생했다.

2. Referer만 사용했을 때

https://도메인 주소/경로 값을 요청 헤더에 포함한 경우에는 key가 없다는 오류 메시지가 반환되었지만 서버 오류가 발생하지는 않았다.

3. 모두 사용했을 때

Referer와 Referrer 값을 모두 사용한 요청에서는 웹 사이트에서 확인했던 데이터를 제대로 얻을 수 있었다.



HTTP Referer란?

HTTP Referer란 웹 페이지에서 요청할 때, 해당 요청이 어디서 발생했는지를 나타내는 정보이다.
웹 서버에게 사용자가 어떤 페이지나 사이트에서 현재 페이지로 이동했는지 알리는 역할을 하며, 웹 사이트 운영자는 이 정보를 통해 사이트 유입에 대한 분석을 할 수 있고, 접근 권한 부여와 같은 보안 설정을 할 수 있다.

HTTP에서 상태를 표현하는 방법

HTTP는 Stateless로 설계된 프로토콜이라, 모든 요청이 독립적이라는 특징을 갖는다. 하지만 웹 애플리케이션에서는 상태가 필요한 경우가 있는데, Referer를 통해 이전에 살펴본 페이지의 URL을 서버에 전송하여 사이트 내부에서 요청한 경우에만 응답을 주거나, 데이터를 제공하는 방식으로 사용할 수 있다.

Referer와 Referrer의 차이

그런데 Referer와 Referrer는 어떤 차이가 있는 걸까?
원래 올바른 명칭은 Referrer이지만, 오타로 인해 Referer로 사용된 이후로 HTTP에서는 Referer로 사용한다고 한다.
HTTP에서는 Referer라는 명칭으로 사용하는데, 자바스크립트에서 사용할 때에는 referrer로 사용한다는 것을 알 수 있었다.


보안 상의 문제

위에서 HTTP Referer를 통해 접근 가능했던 API가 있었지만, 그렇지 않은 경우도 있었다. 요청 헤더의 값을 사용해서 접근해 봤지만, 결과적으로 API로는 접근할 수 없다는 것을 확인했다.



마무리

수집할 데이터에 대해 생각도 해보고 API를 테스트를 하는 과정에서 HTTP Referer에 대해 알아볼 수 있었다. API를 작성하는 과정에서는 단순히 데이터를 주고받는 것뿐만 아니라 이를 요청하는 위치에 따라 권한을 부여하는 것과 같은 보안적인 요소도 고민할 필요가 있다는 것을 다시 한번 상기할 수 있었다.

API를 활용하여 데이터를 수집할 수 있는 것은 운이 좋은 경우이고, 대부분 원하는 데이터를 얻기 위해서는 크롤링이 필요하다는 것을 느꼈다. 그래서 크롤링에 대해 공부하기 위해 파이썬을 이용한 웹 크롤링과 스크레이핑이라는 책을 빌려서 읽고 있다. 지금은 도서관에서 빌려서 읽고 있지만, 계속 공부하기 좋은 책인 것 같아서 구매 의향이 생겼다.

0개의 댓글