node-fetch에서 프록시 사용 방법

이 단계별 가이드에서 Node-Fetch에서 프록시를 설정하는 방법을 알아보세요.
2 분 읽기
How to Set a Proxy in Node-Fetch blog image

Node.js는 서버 측 및 네트워크 애플리케이션을 생성할 수 있는 인기 있는 JavaScript 런타임 환경입니다. 예를 들어, Node.js에서 원격 API나 웹사이트에서 데이터를 가져와야 할 경우, 애플리케이션과 인터넷 사이의 중개자 역할을 하는 웹 프록시 서버를 사용할 수 있습니다. 이를 통해 네트워크 제한을 우회하고, 지역 차단된 콘텐츠에 접근하며, IP 주소를 숨길 수 있습니다.

대부분의 현대적 자바스크립트 애플리케이션은 HTTP 요청을 위해 Fetch API를 사용합니다. 이 API는 웹 브라우저에서 내장 기능으로 제공되며, Node.js v16부터는 외부 의존성 없이 사용할 수 있습니다. 그러나 한 가지 문제가 있습니다: Node.js 내장 fetch 기능은 웹 브라우저에서 제공되는 것과 동일하며 프록시와 함께 작동할 수 없습니다.

다행히 간단한 해결책이 있습니다: node-fetch 라이브러리입니다. 이 라이브러리는 Node.js 전용 기능을 추가한 Node.js용 Fetch API를 포함하며, Node.js HTTP 에이전트와의 연동 기능도 제공합니다. HTTP 에이전트는 연결 풀링을 관리하여 HTTP 요청에 연결을 재사용할 수 있게 해주는 도구입니다. 즉, HTTP 에이전트를 사용해 프록시를 통과하는 Fetch 요청을 설정할 수 있습니다.

이 글에서는 node-fetch와 https-proxy-agent 라이브러리를 함께 사용하여 HTTP 및 HTTPS 프록시를 모두 지원하는 HTTP 에이전트를 만드는 방법을 배웁니다. 또한 웹 스크래핑 요구 사항에 맞는 다양한 프록시 유형과 기능을 제공하는 Bright Data 프록시 서비스에 대해서도 알아봅니다.

node-fetch에서 프록시 사용 방법

이 튜토리얼을 시작하기 전에 다음 사전 요구 사항이 필요합니다:

  • Node.js가 정상적으로 설치되어 있어야 합니다.
  • 웹 프록시 접근 권한. 테스트 목적으로 Node.js를 사용하여 자체 웹 프록시를 설정할 수도 있습니다.

이들 전제 조건을 갖추셨다면 시작할 준비가 된 것입니다!

Node.js 프로젝트 생성

먼저 Node.js 프로젝트를 생성하고 npm으로 초기화해야 합니다. 이를 위해 터미널을 열고 다음 명령어를 실행하세요:

mkdir node-fetch-proxy
cd node-fetch-proxy
npm init -y

이 명령어는 node-fetch-proxy라는 폴더를 생성하고, 해당 폴더로 이동한 후 기본값이 설정된 package.json 파일을 생성합니다.

node-fetch 및 https-proxy-agent 설치

다음으로, 프로젝트의 종속성으로 node-fetchhttps-proxy-agent 라이브러리를 설치해야 합니다. 다음 명령어를 사용하세요:

npm install –-save node-fetch https-proxy-agent

이 명령어는 라이브러리를 프로젝트의 node_modules 폴더에 설치하고 package.json 파일을 업데이트합니다.

HttpsProxyAgent와 node-fetch를 사용하여 프록시를 통한 HTTP 요청 수행

node-fetchhttps-proxy-agent 라이브러리를 설치한 후, https-proxy-agent 라이브러리의 HttpsProxyAgent 클래스와 node-fetch 라이브러리의 fetch 함수를 함께 사용하여 프록시를 통해 HTTP 호출을 수행해야 합니다. 이를 위해 프로젝트 폴더에 proxy.mjs라는 파일을 생성하고 다음 코드를 추가하세요:

import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';

// <proxy_url>을 실제 프록시 URL로 대체하세요
const agent = new HttpsProxyAgent('<proxy_url>');

// 에이전트 옵션을 사용하여 프록시를 통해 HTTP 요청을 수행
// <target_url>을 요청할 URL로 교체
fetch('<target_url>', { agent })
  .then((response) => response.text())
  .then((text) => console.log(text))
  .catch((error) => console.error(error));

이 코드는 다음 작업을 수행합니다:

  • Node.js용 브라우저 호환 Fetch API를 제공하는 node-fetch 라이브러리에서 fetch 함수를 임포트합니다.
  • https-proxy-agent 라이브러리에서 HttpsProxyAgent 클래스를 가져옵니다. 이 클래스는 HTTPS 프록시를 지원하는 HTTP 에이전트를 생성합니다.
  • 프로xy URL을 사용하여 HttpsProxyAgent 인스턴스를 생성합니다. <proxy_url> 을 실제 프로xy URL로 대체해야 하며, 다음 형식을 가져야 합니다: http://username:password@host:port.
  • 에이전트 옵션을 사용하여 fetch 함수를 호출하여 프록시를 통해 HTTP 요청을 수행합니다. 요청할 URL을 <target_url> 로 대체해야 하며, 이는 유효한 HTTP 또는 HTTPS URL이어야 합니다.
  • 응답을 처리하고 발생하는 오류를 출력합니다.

코드를 저장하고 다음 명령어를 실행하세요:

node proxy.mjs

이 명령어는 코드를 실행하고 프록시를 통해 HTTP 요청을 수행합니다. 터미널에 응답 텍스트 또는 오류가 표시되어야 합니다.

node-fetch에서 프록시 사용의 한계

이 방법은 간단한 프록시 사용 시 효과적이지만, 웹 스크래핑과 같은 실제 사용 사례에서는 더 정교한 접근이 필요하다는 점을 알게 될 것입니다. 많은 웹사이트와 웹 API는 잘 알려진 프록시의 IP 주소를 차단하여 필요한 데이터 수집을 어렵게 만듭니다.

또한 사이트는 방문자의 위치에 따라 콘텐츠를 숨기는 지역적 제한을 가질 수 있습니다. 예를 들어, 일부 미국 신문사는 일반 데이터 보호 규정(GDPR) 및 전자 사생활 보호 지침(ePrivacy Directive) 준수의 어려움으로 인해 유럽 방문자의 웹사이트 접근을 차단합니다.

다행히 Bright Data 프록시 서비스와 같은 고급 프록시는 이러한 제한을 우회할 수 있도록 여러 유형의 프록시를 제공합니다.

Bright Data 프록시 서비스

웹 스크래핑을 위한 안정적이고 확장 가능한 프록시 서비스를 찾고 있다면 더 이상 찾아볼 필요가 없습니다. Bright Data는 195개국에서 400M+ monthly개의 IP 주소를 제공하며 99.9% 가동률을 자랑하는 선도적인 프록시 솔루션 공급업체입니다.

Bright Data 프록시 서버를 사용하면 사용 사례와 예산에 따라 주거용, 데이터센터, 인터넷 서비스 제공업체(ISP), 모바일 또는 슈퍼 프록시 등 다양한 유형의 프록시 중에서 선택할 수 있습니다. 이러한 다양한 선택지는 알려진 프록시 IP 주소를 차단하는 사이트에서 콘텐츠를 획득해야 하는 웹 스크레이퍼를 생성할 때 유용합니다.

통제할 수 없는 위치에서 실행되는 일반 프록시에 의존하는 대신, Bright Data 프록시를 사용하면 스크래핑하려는 콘텐츠에 일반적으로 접근하는 사용자 유형에 가장 적합한 프록시 유형을 선택할 수 있습니다. 또한 지오 타게팅, IP 로테이션, 세션 제어와 같은 고급 기능을 활용하여 애플리케이션이 차단되지 않도록 보장할 수 있습니다.

Bright Data 프록시 유형

Bright Data는 다양한 웹 스크래핑 시나리오에 맞춰 여러 유형의 프록시를 제공합니다. 주요 프록시 유형은 다음과 같습니다:

  • 주거용 프록시는 개인용 컴퓨터나 노트북과 같은 실제 기기를 통해 인터넷 요청을 전달하며, 주거용 ISP를 통해 웹에 연결됩니다. 이러한 프록시는 일반 사용자와 혼합되어 프록시 요청이 차단될 가능성을 줄여주므로 웹 스크래핑 활동에 탁월합니다.
  • 슈퍼 프록시 서버는 게이트웨이 역할을 하여 Bright Data의 광범위한 주거용 프록시 네트워크에 대한 접근을 제공합니다. 단일 슈퍼 프록시 URL로 특정 IP 주소를 지정할 필요 없이 모든 주거용 프록시에 연결할 수 있습니다. 또한 슈퍼 프록시는 사용하려는 주거용 프록시의 국가, 도시, ISP 또는 ASN 선택을 포함한 다양한 설정을 세부적으로 조정할 수 있는 유연성을 제공합니다.
  • 데이터센터 프록시는 데이터센터 시설 내에 위치한 서버에 할당된 IP 주소를 사용합니다. 데이터센터 프록시는 웹사이트 및 API에 의해 탐지 및 차단될 가능성이 높지만, 프록시 요청을 차단하지 않는 URL에서 데이터를 액세스하는 앱에는 여전히 유용합니다. 웹 스크래핑 트래픽이 주거용, 비즈니스용 또는 모바일 IP 주소에서 발생할 필요가 없는 웹 스크래핑 프로젝트에 가장 적합합니다.
  • ISP 프록시는 ISP가 호스팅하는 서버에 할당된 IP 주소입니다. ISP 프록시는 주거용 프록시와 유사하지만, IP 주소가 주거용 또는 비즈니스용일 수 있다는 점이 다릅니다. 이로 인해 주거용과 비즈니스 트래픽이 혼합된 사이트를 스크래핑할 때 적합합니다.

프록시 관리자 및 API

다양한 선택지 속에서 프록시 사용을 관리하는 것은 복잡할 수 있습니다. 다행히 Bright Data 프록시 관리자를 사용하면 프록시를 쉽게 구성 및 관리하고, 사용량과 성능을 모니터링하며, 문제 해결을 수행할 수 있습니다.

또한 Bright Data API 및 통합 기능을 활용하여 프록시를 코드에 원활하게 통합할 수 있습니다. 스크래핑 브라우저 API는 익숙한 도구(예: Playwright 및 Puppeteer)에서 프록시를 쉽게 사용할 수 있게 해주며, 웹 언락커는 일반적으로 스크레이퍼의 사이트 접근을 차단하는 방어 체계를 극복하는 데 도움을 줍니다.

결론

이 글에서는 node-fetch 라이브러리와 https-proxy-agent 라이브러리를 함께 사용하여 HTTPS 프록시를 지원하는 HTTP 에이전트를 만드는 방법을 알아보았습니다. 또한 웹 스크래핑 요구 사항에 맞는 다양한 프록시 유형과 기능을 제공하는 Bright Data 프록시 서비스에 대해서도 살펴보았습니다.

Node.js에서 fetch 요청에 웹 프록시를 사용하면 네트워크 제한을 극복하고, 지역 차단 콘텐츠에 접근하거나, IP 주소를 숨길 수 있습니다. 그러나 node-fetch와 https-proxy-agent를 이용한 단순 프록시 설정은 익명성, 지역 타겟팅, IP 로테이션 또는 기타 고급 기능이 필요한 일부 웹 스크래핑 시나리오에는 충분하지 않을 수 있습니다. 이러한 경우에는 Bright Data 프록시 사용을 고려해야 합니다.

Bright Data의 프록시 서비스는 차단이나 속도 제한 없이 모든 웹사이트나 API에 접근할 수 있도록 다양한 기능을 제공합니다. 사용 사례와 예산에 따라 다양한 유형의 프록시 중에서 선택할 수도 있습니다. Bright Data 프록시 서비스를 시작하려면 지금 무료 체험판에 가입하세요.