이 Laravel 프록시 통합 가이드를 마치면 다음을 이해하게 됩니다:
- Laravel에서 프록시가 무엇이며 어떻게 작동하는지
- 프록시가 필요한 시점과 이유
- Laravel 프로젝트에서 프록시 설정 방법
- Laravel에서 프록시 인증, SSL 인증서 문제, IP 로테이션 처리 방법
- Symfony의
HttpClient컴포넌트에 프록시를 통합하는 방법
자, 시작해 보겠습니다!
Laravel 프록시란 무엇인가요?
Laravel 프록시는 Laravel 백엔드와 외부 서버 사이의 중개자 역할을 합니다. 이를 통해 프로그래밍 방식으로 서버 트래픽을 프록시 서버를 통해 라우팅하여 IP 주소를 숨길 수 있습니다.
Laravel에서 프록시가 작동하는 방식은 다음과 같습니다:
- Laravel은 프록시가 구성된 HTTP 클라이언트 라이브러리를 사용하여 HTTP 요청을 보냅니다.
- 요청은 프록시 서버를 통과합니다.
- 프록시는 이를 대상 서버로 전달합니다.
- 대상 서버는 프록시에 응답합니다.
- 그런 다음 프록시는 응답을 Laravel로 반환합니다.
결과적으로 대상 서버는 Laravel 서버의 IP가 아닌 프록시 서버의 IP에서 요청이 오는 것으로 인식합니다. 이 메커니즘은 지역 제한 우회, 익명성 향상, 속도 제한 관리를 돕습니다.
Laravel에서 프록시 사용 사례
Laravel에서 프록시는 다양한 시나리오에서 유용하지만, 다음 세 가지가 가장 일반적입니다:
- 웹 스크래핑: 웹 스크래핑 API 구축 시 IP 차단, 속도 제한 또는 기타 차단 조치를 피하기 위해 프록시를 사용합니다. 자세한 내용은 Laravel을 활용한 웹 스크래핑 튜토리얼을 참조하세요.
- 타사 API의 속도 제한 우회: 프록시 IP를 순환하여 API 사용 할당량을 준수하고 속도 제한을 피하세요.
- 지역 제한 콘텐츠 접근: 특정 국가에서만 이용 가능한 서비스에 접근하기 위해 해당 지역의 프록시 서버를 선택합니다.
더 많은 예시는 웹 데이터 및 프록시 사용 사례 가이드를 참조하세요.
Laravel에서 프록시 사용하기: 단계별 가이드
이 섹션에서는 기본 HTTP 클라이언트를 사용하여 Laravel에 프록시를 통합하는 방법을 보여드립니다. Symfony HttpClient 사용자인 경우 걱정하지 마세요—본 문서 후반부에 해당 라이브러리와 프록시 통합 방법을 다룰 예정입니다.
참고: Laravel의 HTTP 클라이언트는 Guzzle을 기반으로 구축되었으므로, Guzzle 프록시 통합 가이드를 확인해 보시기 바랍니다.
통합을 시연하기 위해 다음을 수행하는 GET /api/v1/get-ip 엔드포인트를 생성하겠습니다:
- 구성된 프록시를 사용하여
https://httpbin.io/ip로GET요청을 전송합니다. - 응답에서 출구 IP 주소를 가져옵니다.
- Laravel 엔드포인트를 호출하는 클라이언트에게 해당 IP를 반환합니다.
모든 설정이 올바르게 이루어졌다면, 해당 API가 반환하는 IP는 프록시의 IP와 일치할 것입니다.
시작해 보겠습니다!
1단계: 프로젝트 설정
Laravel 애플리케이션이 이미 설정되어 있다면 이 단계를 건너뛰고 2단계로 진행하세요.
그렇지 않은 경우 아래 지침에 따라 새 Laravel 프로젝트를 생성하세요. 터미널을 열고 다음 Composer 생성 명령어를 실행하여 새 Laravel 프로젝트를 초기화하세요:
composer create-project laravel/laravel laravel-proxies-application
이 명령어는 laravel-proxies-application이라는 폴더에 새로운 Laravel 프로젝트를 생성합니다. 선호하는 PHP IDE에서 이 폴더를 열어주세요.
이 시점에서 위 폴더에는 기본 Laravel 파일 구조가 포함되어 있어야 합니다:

훌륭합니다! 이제 Laravel 프로젝트가 준비되었습니다.
2단계: 테스트 API 엔드포인트 정의
프로젝트 디렉토리에서 다음 Artisan 명령어를 실행하여 새 컨트롤러를 생성하세요:
php artisan make:controller IPController
이 명령은 /app/Http/Controllers 디렉터리에 IPController.php 파일을 생성하며, 기본 내용은 다음과 같습니다:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class IPController extends Controller
{
//
}
이제 IPController.php에 아래 getIP() 메서드를 추가합니다:
public function getIP(): JsonResponse
{
// "/ip" 엔드포인트에 GET 요청을 보내 서버 IP를 가져옴
$response = Http::get('https://httpbin.io/ip');
// 응답 데이터 가져오기
$responseData = $response->json();
// 응답 데이터 반환
return response()->json($responseData);
}
이 메서드는 Laravel의 Http 클라이언트를 사용하여 https://httpbin.io/ip에서 IP 주소를 가져오고 JSON 형식으로 반환합니다.
다음 두 가지 임포트를 잊지 말고 포함하세요:
use IlluminateHttpJsonResponse;
use IlluminateSupportFacadesHttp;
Laravel 애플리케이션이 상태 비저장(stateless) API를 제공하도록 하려면 install:api 아티산 명령을 사용하여 API 라우팅을 활성화하세요:
php artisan install:api
이 메서드를 API 엔드포인트로 노출하려면 routes/api.php 파일에 다음 라우트를 추가하세요:
use AppHttpControllersIPController;
Route::get('/v1/get-ip', [IPController::class, 'getIP']);
새 API 엔드포인트는 다음 주소에서 접근 가능합니다:
/api/v1/get-ip
참고: 각 Laravel API는 기본적으로 /api 경로 아래에서 사용할 수 있습니다.
/api/v1/get-ip 엔드포인트를 테스트해 볼 시간입니다!
Laravel 개발 서버를 시작하려면 다음을 실행하세요:
php artisan serve
이제 서버가 로컬 포트 8000에서 대기 중입니다.
cURL을 사용하여 /api/v1/get-ip 엔드포인트에 GET 요청을 수행하세요:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
참고: Windows에서는 curl을 curl.exe로 대체하세요. cURL로 GET 요청을 보내는 방법에 대한 자세한 내용은 가이드를 참조하세요.
다음과 유사한 응답을 받아야 합니다:
{
"origin": "45.89.222.18"
}
위 응답은 HttpBin의 /ip 엔드포인트에서 생성된 응답과 정확히 동일합니다. 이는 Laravel API가 완벽하게 작동함을 확인시켜 줍니다. 특히 표시된 IP 주소는 여러분 컴퓨터의 공인 IP입니다. 다음으로, 해당 IP를 숨기기 위해 프록시를 통합해 보겠습니다!
3단계: 프록시 획득
Laravel 애플리케이션에서 프록시를 사용하려면 먼저 작동하는 프록시 서버에 접근할 수 있어야 합니다.
무료 프록시 URL을 제공하는 웹사이트가 많지만, 주의가 필요합니다—프록시 인프라 유지에는 비용이 많이 듭니다. 서비스가 무료로 프록시를 제공한다면, 그 자금을 어떻게 조달하는지 스스로에게 물어보세요. 종종 그 답은 데이터 수집이나 트래픽 재라우팅 같은 의심스러운 관행과 관련이 있습니다.
참고: 무료 프록시는 테스트나 교육 목적으로만 사용해야 하며, 절대 실제 운영 환경에서 사용해서는 안 됩니다.
신뢰할 수 있는 프록시가 필요하다면 무료 체험판이나 제한된 무료 플랜을 제공하는 평판 좋은 공급자를 선택하세요. 예를 들어, 저희 무료 프록시를 사용해 볼 수 있습니다.
일반적인 프록시 URL 형식은 다음과 같습니다:
<프로토콜>://<호스트>:<포트>
여기서:
protocol은프록시 서버에 연결하는 데 필요한 프로토콜입니다(예:http,https,socks5).host는프록시 서버의 IP 주소 또는 도메인입니다port는트래픽을 라우팅하는 데 사용되는 포트입니다
이 예시에서는 프록시 URL이 다음과 같다고 가정합니다:
http://66.29.154.103:3128
이를 getIP() 메서드 내 변수에 저장합니다:
$proxyUrl = 'http://66.29.154.103:3128';
이제 Laravel에서 Http를 사용해 프록시를 설정하는 방법을 살펴보겠습니다!
4단계: Http에 프록시 통합
Http 클라이언트를 사용해 Laravel에 프록시를 통합하려면 약간의 추가 설정만 필요합니다:
$proxyUrl = 'http://66.29.154.103:3128';
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
$responseData = $response->json();
보시다시피, withOptions() 메서드를 사용하여 프록시 URL을 옵션으로 전달하기만 하면 됩니다. 이는 Laravel의 HTTP 클라이언트가 Guzzle의 프록시 옵션을 사용하여 요청을 지정된 프록시 서버를 통해 라우팅하도록 지시합니다.
대단하네요! Laravel 프록시 통합 완료.
5단계: 모든 것 통합하기
프록시 통합이 적용된 최종 Laravel API 로직은 다음과 같아야 합니다:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateHttpJsonResponse;
use IlluminateSupportFacadesHttp;
class IPController extends Controller
{
public function getIP(): JsonResponse
{
// 프록시 서버의 URL
$proxyUrl = 'http://66.29.154.103:3128'; // 실제 프록시 URL로 교체
// 프록시 서버를 통해 /ip 엔드포인트에 GET 요청 수행
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
// 응답 데이터 가져오기
$responseData = $response->json();
// 응답 데이터 반환
return response()->json($responseData);
}
}
로컬에서 Laravel을 실행하여 테스트하세요:
php artisan serve
다시 /api/v1/get-ip 엔드포인트에 연결:
curl -X GET 'http://localhost:8000/api/v1/get-ip'
이번에는 다음과 같은 결과가 출력됩니다:
{
"origin": "66.29.154.103"
}
"origin" 필드에는 프록시 서버의 IP 주소가 표시되며, 이는 실제 IP가 프록시 뒤에 숨겨졌음을 확인시켜 줍니다.
경고: 무료 프록시 서버는 종종 불안정하거나 수명이 짧습니다. 이 예시를 시도할 때쯤이면 예시 프록시가 더 이상 작동하지 않을 수 있습니다. 필요한 경우 테스트 전에 $proxyUrl을 현재 활성화된 주소로 교체하십시오.
참고: 요청 시 SSL 오류가 발생하면 아래 고급 사용 사례 섹션에 제공된 문제 해결 팁을 참조하십시오.
고급 사용 사례
Laravel과 프록시 통합의 기본을 배웠지만, 고려해야 할 다른 고급 시나리오도 있습니다.
프록시 인증
프리미엄 프록시는 종종 인증을 요구하여 권한 있는 사용자만 접근할 수 있도록 합니다. 이 경우 올바른 자격 증명을 지정하지 않으면 다음과 같은 오류가 발생합니다:
cURL error 56: CONNECT tunnel failed, response 407
인증이 필요한 프록시의 URL은 일반적으로 다음과 같은 형식을 따릅니다:
<프로토콜>://<사용자명>:<비밀번호>@<호스트>:<포트>
여기서 username과 password는 인증 자격 증명입니다.
Laravel의 Http 클래스(내부적으로 Guzzle 기반)는 인증된 프록시를 완벽하게 지원합니다. 따라서 크게 변경할 필요는 없습니다. 프록시 URL에 인증 자격 증명을 직접 포함시키기만 하면 됩니다:
$proxyUrl = '<프로토콜>://<사용자명>:<비밀번호>@<호스트>:<포트>';
예시:
// 사용자명과 비밀번호를 사용하는 인증 프록시
$proxyUrl = 'http://<username>:<password>@<host>:<port>';
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
$proxyUrl 값을 유효한 인증된 프록시 URL로 대체하세요.
이제Http가 트래픽을 설정된 인증된 프록시 서버로 라우팅합니다!
SSL 인증서 문제 방지
Laravel의 Http 클라이언트를 사용하여 프록시를 설정할 때 다음과 같은 SSL 인증서 검증 오류로 인해 요청이 실패할 수 있습니다:
cURL error 60: SSL certificate problem: self-signed certificate in certificate chain
이는 일반적으로 프록시 서버가 자체 서명 SSL 인증서를 사용할 때 발생합니다.
프록시 서버를 신뢰하고 로컬 또는 안전한 환경에서만 테스트하는 경우 다음과 같이 SSL 검증을 비활성화할 수 있습니다:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => false, // SSL 인증서 검증 비활성화
])->get('https://httpbin.io/ip');
경고: SSL 검증을 비활성화하면 중간자 공격에 노출될 수 있습니다. 따라서 신뢰할 수 있는 환경에서만 이 옵션을 사용하십시오.
반면 프록시 서버의 인증서 파일 (예: proxy-ca.crt)이 있다면 다음과 같이 SSL 검증을 위해 사용할 수 있습니다:
$response = Http::withOptions([
'proxy' => $proxyUrl,
'verify' => storage_path('certs/proxy-ca.crt'), // CA 번들 경로
])->get('https://httpbin.io/ip');
proxy-ca.crt 파일이 안전하고 접근 가능한 디렉터리(예: storage/certs/)에 저장되어 있으며 Laravel이 이를 읽을 수 있는 권한이 있는지 확인하십시오.
위 방법 중 하나를 적용하면 프록시로 인한 SSL 검증 오류가 사라질 것입니다.
프록시 로테이션
동일한 프록시 서버를 반복적으로 사용하면 대상 웹사이트에서 해당 프록시의 IP 주소를 감지하여 차단할 가능성이 높습니다. 이를 방지하려면 요청마다 다른 프록시 서버를 사용하는 방식으로 프록시 서버를 로테이션할수 있습니다.
Laravel에서 프록시를 회전시키는 단계는 다음과 같습니다:
- 여러 프록시 URL을 포함하는 배열 생성
- 각 요청 전에 무작위로 하나 선택
- 선택된 프록시를 HTTP 클라이언트 구성에 설정
다음 코드로 구현합니다:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateHttpJsonResponse;
use IlluminateSupportFacadesHttp;
function getRandomProxyUrl(): string
{
// 유효한 프록시 URL 목록 (사용자 프록시 URL로 대체)
$proxies = [
'<protocol_1>://<proxy_host_1>:<port_1>',
// ...
'<protocol_n>://<proxy_host_n>:<port_n>',
];
// 목록에서 무작위로 선택한 프록시 URL 반환
return $proxies[array_rand($proxies)];
}
class IPController extends Controller
{
public function getIP(): JsonResponse
{
// 프록시 서버의 URL
$proxyUrl = getRandomProxyUrl();
// 프록시 서버를 통해 /ip 엔드포인트에 GET 요청 수행
$response = Http::withOptions([
'proxy' => $proxyUrl
])->get('https://httpbin.io/ip');
// 응답 데이터 가져오기
$responseData = $response->json();
// 응답 데이터 반환
return response()->json($responseData);
}
}
위 코드 조각은 프록시 로테이션을 시뮬레이션하기 위해 목록에서 프록시를 무작위로 선택하는 방법을 보여줍니다. 이 접근 방식은 작동하지만 몇 가지 단점이 있습니다:
- 신뢰할 수 있는 프록시 서버 풀을 유지 관리해야 하며, 이는 종종 비용이 발생합니다.
- 효과적인 로테이션을 위해서는 프록시 풀이 충분히 커야 합니다. 대규모 풀이 없다면 동일한 프록시가 반복적으로 사용되어 탐지 및 차단될 수 있습니다.
이러한 한계를 극복하려면 Bright Data의 회전 프록시 네트워크를 활용하는 것을 고려해 보십시오. 해당 인프라가 자동으로 IP 주소를 회전시켜 주며 다음과 같은 혜택을 제공합니다:
- 195개국에 걸쳐 15억 개 이상의 IP 주소
- 높은 가동률과 99.9% 성공률
다음 섹션에서는 Laravel에서 Bright Data의 회전 프록시를 사용하는 방법을 보여드리겠습니다.
Laravel에서 Bright Data 프록시 사용하기
Bright Data는 포춘 500대 기업 및 20,000명 이상의 고객을 지원하는 세계 최대 규모의 프록시 네트워크 중 하나를 운영합니다. 그들의 프록시 네트워크에는 다음이 포함됩니다:
- 데이터센터 프록시 – 770,000개 이상의 데이터센터 IP.
- 주거용 프록시 – 195개 이상의 국가에서 1억 5천만 개 이상의 주거용 IP.
- ISP 프록시 – 70만 개 이상의 ISP IP 주소.
Laravel에서 Bright Data의 주거용 프록시를 사용하려면 아래 단계를 따르세요.
아직 계정이 없다면 Bright Data에 가입하세요. 이미 계정이 있다면 로그인하여 사용자 대시보드로 이동하세요:

로그인 후 “프록시 제품 받기” 버튼을 클릭하여 진행하세요:

“프록시 및 스크래핑 인프라” 페이지로 이동합니다:

표에서 “주거용(Residential)” 행을 찾아 클릭하세요:

주거용 프록시 페이지로 이동합니다:

처음 이용하시는 경우, 마법사를 따라 필요에 맞게 프록시 서비스를 구성하세요. 추가 지원이 필요하시면 24시간 연중무휴 지원팀에 문의해 주십시오.
“개요” 탭에서 프록시의 호스트, 포트, 사용자 이름, 비밀번호를 확인하세요:

이 정보를 사용하여 프록시 URL을 생성하세요:
$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';
자리 표시자(<brightdata_proxy_username>, <brightdata_proxy_password>, <brightdata_proxy_host>, <brightdata_proxy_port>)를 실제 프록시 자격 증명 정보로 대체하세요.
프록시 제품 활성화 설정에서 “Off”를 “On”으로 전환하고, 나머지 지침을 따라 설정을 완료하세요:

프록시 URL 설정이 완료되면, 이제 Http 클라이언트를 사용하여 Laravel에 통합할 수 있습니다. Laravel에서 회전하는 Bright Data 주거용 프록시를 통해 요청을 보내는 로직은 다음과 같습니다:
public function getIp()
{
// TODO: Bright Data 프록시 정보로 자리 표시자를 대체하세요
$proxyUrl = 'http://<brightdata_proxy_username>:<brightdata_proxy_password>@<brightdata_proxy_host>:<brightdata_proxy_port>';
// 프록시를 통해 "/ip"로 GET 요청 수행
$response = Http::withOptions([
'proxy' => $proxyUrl,
])->get('https://httpbin.org/ip');
// 응답 데이터 가져오기
$responseData = $response->json();
return response()->json($responseData);
}
위 스크립트를 실행할 때마다 다른 출구 IP를 확인할 수 있습니다.
Bright Data의 자동 회전 프록시를 사용하면 Laravel 프록시 회전이 그 어느 때보다 쉬워집니다!
[추가] Symfony의 HttpClient 프록시 통합
Laravel의 기본 HTTP 클라이언트 Http보다 Symfony의 HttpClient 컴포넌트를 선호한다고 가정해 보겠습니다.
Laravel에서 HttpClient에 프록시 통합을 구현하려면 아래 지침을 따르세요.
먼저, Composer를 통해 Symfony HTTP 클라이언트 패키지를 설치해야 합니다:
composer require symfony/http-client
다음으로 Symfony의 HttpClient를 프록시와 함께 다음과 같이 사용할 수 있습니다:
<?php
namespace AppHttpControllers;
use SymfonyContractsHttpClientHttpClientInterface;
use IlluminateHttpJsonResponse;
class IpController extends Controller
{
// HttpClient 인스턴스 저장 위치
private $client;
public function __construct(HttpClientInterface $client)
{
// HttpClient 프라이빗 인스턴스 초기화
$this->client = $client;
}
public function getIp(): JsonResponse
{
// 사용자의 프록시 URL
$proxyUrl = 'http://66.29.154.103:3128'; // 사용자의 프록시 URL로 대체
// 프록시를 통해 "/ip" 엔드포인트로 GET 요청 수행
$response = $this->client->request('GET', 'https://httpbin.io/ip', [
'proxy' => $proxyUrl,
]);
// 응답 JSON을 파싱하여 반환
$responseData = $response->toArray();
return response()->json($responseData);
}
}
이 설정으로 Symfony의 HttpClient를 사용하여 프록시를 통해 요청을 보낼 수 있습니다.
결론
이 프록시 통합 튜토리얼에서는 프록시의 중요성과 Laravel에서 사용하는 방법을 배웠습니다. Laravel의 기본 HTTP 클라이언트와 Symfony의 HttpClient를 모두 사용하여 Laravel에서 프록시를 쉽게 구성하는 방법을 다루었습니다.
또한 무료 프록시 서비스가 신뢰할 수 없고 위험할 수 있는 이유도 확인했습니다. 안정적인 성능, 보안 및 확장성을 위해 신뢰할 수 있는 프록시 제공업체를 선택해야 합니다. 시간과 노력을 절약하고 시장에서 최고의 프록시 제공업체인 Bright Data로 바로 가보세요.
지금 바로 계정을 생성하고 저희 프록시를 무료로 테스트해 보세요!