“HTTP를 써야 할까요, SOCKS5를 써야 할까요?”는 신규 고객에게서 가장 자주 받는 질문 중 하나이며, 솔직한 답은 무엇에 연결하느냐에 따라 다르다는 것입니다. 대부분의 경우 일상적인 웹 스크래핑에서는 둘이 서로 바꿔 써도 무방합니다. 차이는 경계선에서만 문제가 되기 시작하는데, 사람들이 잘못된 것을 골라서 코드와는 전혀 상관없는 문제를 하루 종일 디버깅하게 되는 곳이 바로 그 경계선입니다.
이 글은 그 차이에 대한 실용적인 가이드입니다. HTTP 프록시가 실제로 무엇을 하는지, SOCKS5 프록시는 무엇을 다르게 하는지, 각각 어디에서 우위를 갖는지, 그리고 선택을 위한 간단한 규칙까지 다룹니다. 프로토콜 역사 강의는 없고, 여러분이 해야 할 일을 바꾸는 부분만 다룹니다.
한 가지만 기억해야 한다면 이것입니다. HTTP 프록시는 웹 요청을 이해하고 그에 따라 행동할 수 있으며, SOCKS5 프록시는 바이트를 옮길 뿐 그 안에 무엇이 들어있는지 신경 쓰지 않습니다. 전자가 더 똑똑하고, 후자가 더 범용적입니다.
한 문장으로 정리한 차이
HTTP 프록시는 애플리케이션 계층에서 동작합니다. HTTP를 말할 줄 알기 때문에 요청 라인을 읽고, 대상 URL을 보고, 헤더를 검사하고 수정하며, 보는 내용을 바탕으로 결정을 내릴 수 있습니다. 자신이 웹 트래픽을 프록시하고 있다는 것을 압니다.
SOCKS5 프록시는 더 낮은 곳, 전송 계층 근처에서 동작합니다. 클라이언트와 목적지 사이에 터널을 열고 양방향으로 원시 바이트를 전달합니다. 그 안을 흐르는 것을 파싱하지 않습니다. HTTP에도 작동하지만, TCP나 UDP를 사용하는 다른 무엇에도 똑같이 잘 작동합니다.
이 단일한 아키텍처상의 차이가 아래의 모든 실용적인 구분을 만들어 냅니다.
HTTP 프록시가 요청을 처리하는 방식
클라이언트가 HTTP 프록시를 통해 요청을 보내면, 프록시는 그 전체를 볼 수 있습니다. 일반적인 http:// 요청의 경우, 프록시는 전체 URL을 읽고, 헤더를 다시 쓸 수 있으며, 응답을 캐싱할 수 있고, 필드를 주입하거나 제거할 수 있으며, 자신이 이해하는 요청을 전달합니다. https:// 요청의 경우, 클라이언트가 먼저 프록시에 CONNECT를 보내고, 프록시는 목적지로 터널을 열며, 그 이후 암호화된 트래픽은 프록시가 페이로드를 읽지 못한 채 그대로 통과합니다. 따라서 HTTP 프록시조차 HTTPS의 경우 결국 터널링을 하게 되지만, CONNECT를 통해 목적지 호스트와 포트는 여전히 알고 있으며, 인증과 라우팅은 여전히 HTTP 계층에서 처리합니다.
결론은 이렇습니다. HTTP 프록시는 웹을 인식합니다. 프록시가 요청에 대해 무언가를 하기를 원할 때는 유용하고, 그저 방해가 되지 않기를 원할 때는 무관합니다.
SOCKS5 프록시가 연결을 처리하는 방식
SOCKS5 프록시는 짧은 핸드셰이크(선택적 사용자명/비밀번호 인증, 그다음 목적지 호스트와 포트를 명시하는 연결 요청)를 수행한 후, 그 이후로는 단순한 파이프가 됩니다. 여러분의 바이트가 나가고, 목적지의 바이트가 돌아오며, 프록시는 그중 어느 것도 해석하지 않습니다. HTTP에 대한 개념이 없기 때문에 HTTP 헤더에 대한 개념도 없습니다.
이것은 한계가 아니라 특징입니다. 프로토콜을 파싱하지 않기 때문에 SOCKS5는 무엇이든 운반합니다. HTTP, HTTPS, WebSockets, 원시 TCP, 데이터베이스 연결, SSH, 커스텀 프로토콜, 그리고 (특히 SOCKS5의 경우) UDP까지 말입니다. 이 프록시는 설계상 프로토콜에 구애받지 않습니다.
HTTP 프록시가 우위를 갖는 경우
웹 스크래핑과 대부분의 브라우저 자동화. 압도적으로 많은 “이 URL을 가져오라”는 작업의 경우, HTTP 프록시는 자연스러운 선택입니다. 모든 HTTP 클라이언트와 라이브러리에서 잘 지원되며, 놀랄 일이 전혀 없습니다. 여러분의 작업이 웹사이트에 대한 요청이라면, HTTP가 기본값인 데는 이유가 있습니다.
헤더 수준의 제어나 가시성을 원할 때. HTTP 프록시는 요청을 이해하기 때문에, 그 주변의 도구는 요청 수준에서 로깅, 라우팅, 변환을 할 수 있습니다. 일반 HTTP의 경우 이는 직접적이며, HTTPS의 경우에도 프록시는 CONNECT를 통해 목적지를 여전히 볼 수 있습니다.
최대한의 도구 호환성. 모든 스크래핑 프레임워크, 모든 브라우저, 모든 HTTP 라이브러리는 HTTP 프록시를 일급으로 지원합니다. 일부는 SOCKS5 지원이 어색하거나 부분적입니다. 저항이 가장 적은 경로를 원한다면, HTTP는 거의 여러분과 부딪히지 않습니다.
SOCKS5 프록시가 우위를 갖는 경우
비 HTTP 트래픽. 자동화가 웹 요청이 아닌 무언가를 하는 순간, SOCKS5가 답이 됩니다. 메일 서버, 데이터베이스, IRC나 채팅 프로토콜, 게임 서버, 커스텀 TCP 서비스에 연결하는 것 등 HTTP가 아닌 모든 것에서, HTTP 프록시는 도움이 되지 않지만 SOCKS5는 가능합니다.
UDP 기반 프로토콜. SOCKS5는 UDP를 지원하는데, 이는 HTTP 프록시가 근본적으로 할 수 없는 것입니다. UDP 위에서 작동하는 무언가를 다루고 있다면, SOCKS5는 선호되는 정도가 아니라 작동하는 유일한 프록시 옵션입니다.
프록시 측 오버헤드가 더 낮음. HTTP를 파싱하고 판단하는 작업을 하지 않기 때문에, SOCKS5 프록시는 연결당 처리하는 작업이 더 적습니다. 매우 높은 연결량에서는 이것이 약간 더 낮은 지연 시간과 더 적은 요청당 오버헤드를 의미할 수 있습니다. 일반적인 스크래핑에서는 그 효과가 미미하지만, 규모가 커지면 실질적이며, 그래서 처리량이 높은 자동화 파이프라인이 SOCKS5에 의존하는 경우가 많습니다.
SOCKS 엔드포인트를 기대하는 도구. 일부 소프트웨어(특정 토렌트 클라이언트, SSH의 -D 동적 포워딩, 일부 프라이버시 도구)는 SOCKS를 네이티브로 말합니다. 여러분의 도구가 SOCKS5 프록시를 원한다면, HTTP 계층으로 감싸는 대신 그대로 제공하십시오.
둘 사이에 차이가 없는 것
대부분의 신화가 사는 곳이 바로 여기이므로, 단도직입적으로 말할 필요가 있습니다.
익명성과 차단율은 동일합니다. 프록시에 도달하는 데 사용하는 프로토콜은 목적지가 보는 IP, 그 IP의 평판, 봇 방지 시스템이 그것을 채점하는 방식을 바꾸지 않습니다. 레지덴셜 IP는 HTTP를 통하든 SOCKS5를 통하든 정확히 동일하게 신뢰할 수 있습니다. 누군가 SOCKS5가 “더 익명적”이거나 “탐지하기 더 어렵다”고 말한다면, 그것은 신화를 파는 것입니다. 목적지는 여러분의 종료 IP와 트래픽 지문을 보는 것이지, 여러분의 프록시 프로토콜을 보는 것이 아닙니다.
일반적인 작업 부하에서 속도는 대체로 동일합니다. SOCKS5의 오버헤드 이점은 실재하지만 작습니다. 수천 건의 요청을 수행하는 스크래퍼라면, 의미 있는 차이를 측정하지 못할 것입니다. 종료 IP까지의 네트워크 거리, 대상 서버 속도, 동시성 설정이 HTTP 대 SOCKS5보다 훨씬 더 지배적입니다.
지오 타기팅과 세션 제어는 동일합니다. Shifter 게이트웨이에서 국가, 주, 도시, ASN, 고정 세션(sticky-session) 타기팅은 어떤 프로토콜로 연결하든 동일하게 작동합니다. 타기팅은 사용자명에 있는 것이지, 프로토콜에 있는 것이 아닙니다.
다시 말해, 프로토콜 선택은 무엇에 연결하는지와 여러분의 도구가 무엇을 기대하는지의 문제이지, 차단을 덜 당하거나 더 잘 숨는 것과는 무관합니다.
Shifter 게이트웨이에서는 어떻게 보이는가
Shifter 레지덴셜 게이트웨이는 동일한 엔드포인트, 동일한 호스트, 동일한 포트, 동일한 인증정보로 HTTP, HTTPS, SOCKS5, SOCKS5h를 모두 지원합니다. 프로토콜은 클라이언트 측에서 선택하며, 서버 측에서는 아무것도 바뀌지 않습니다.
curl로 HTTP/HTTPS:
curl -x http://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443 https://api.ipify.org동일한 요청을 SOCKS5h로 (h는 DNS가 프록시에서 해석된다는 의미이며, 로컬 리졸버가 대상 호스트명을 전혀 보지 않도록 하려면 거의 항상 이것을 원할 것입니다):
curl -x socks5h://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443 https://api.ipify.org유일하게 바뀐 것은 스킴뿐이라는 점에 주목하십시오. http://가 socks5h://로 바뀔 뿐입니다. 사용자명(모든 타기팅 플래그 포함), 비밀번호, 호스트, 포트는 동일합니다. 그것이 전환의 전부입니다.
Python의 requests에서도 같은 패턴입니다:
import requests
# HTTP/HTTPSproxies = { "http": "http://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443", "https": "http://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443",}
# SOCKS5 (requires: pip install requests[socks])proxies_socks = { "http": "socks5h://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443", "https": "socks5h://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443",}
r = requests.get("https://api.ipify.org", proxies=proxies)print(r.text)알아둘 만한 한 가지는, requests에서 SOCKS 지원을 하려면 추가로 requests[socks] 설치가 필요하다는 점입니다(PySocks를 함께 가져옵니다). HTTP는 추가로 필요한 것이 없습니다. 이 패키징상의 마찰이 빠른 스크립트에서 HTTP가 기본값으로 남아있는 작지만 실질적인 이유입니다.
SOCKS5 대 SOCKS5h: DNS를 어디서 해석할까?
사람들을 헷갈리게 하는 각주 하나. 일반 socks5://는 여러분의 머신에서 목적지 호스트명을 해석한 다음, 결과 IP를 프록시로 보냅니다. socks5h://는 호스트명을 프록시로 보내서 프록시가 해석하도록 합니다. 프록시 용도로는 거의 항상 socks5h를 원하는데, 이유는 다음과 같습니다:
- DNS 조회를 로컬 네트워크 밖에 두는데, 이는 프라이버시와 종료 지역으로부터 지오상 올바른 DNS 응답을 받는 것 모두에 중요합니다.
- 로컬 리졸버가 대상이 프록시 지역에서 제공되기를 기대하는 것과 다른 IP를 반환하는 미묘한 버그의 부류를 피할 수 있습니다.
SOCKS5에서 지오 불일치 결과를 보고 있다면, socks5가 아니라 socks5h를 사용했는지 확인하십시오. 이것은 “지오 타기팅이 작동하지 않는다”는 놀랄 만큼 많은 티켓을 해결하는 한 글자짜리 수정입니다.
간단한 결정 규칙
순서도가 필요하지 않습니다. 순서대로 세 가지 질문만 하면 됩니다:
-
트래픽이 HTTP/HTTPS(웹 요청)인가? 그렇다면, 그리고 다른 특별한 이유가 없다면 HTTP를 사용하십시오. 기본값이고, 보편적으로 지원되며, 추가 패키지가 필요 없습니다. 이는 대부분의 스크래핑, 가격 모니터링, SERP 수집, 브라우저 자동화를 포함합니다.
-
트래픽이 HTTP가 아닌 무언가이거나 UDP를 사용하는가? SOCKS5를 사용하십시오. 메일, 데이터베이스, 커스텀 TCP/UDP 서비스, SOCKS를 네이티브로 말하는 도구 등 웹이 아닌 모든 것 말입니다. SOCKS5만이 이를 운반할 수 있습니다.
-
매우 높은 처리량의 파이프라인을 운영하며 연결당 오버헤드를 줄이고 싶은가? SOCKS5가 약간의 우위를 줍니다. 차이가 중요하다고 가정하기 전에 실제 작업 부하로 테스트해 보십시오. 대부분의 팀에서는 그렇지 않습니다.
이것이 결정의 전부입니다. 확신이 없으면 HTTP를 사용하십시오. 웹 요청이 아니라면 SOCKS5를 사용하십시오.
자주 묻는 질문
SOCKS5가 웹 스크래핑에서 HTTP보다 빠른가요? 잘해야 미미한 정도이고, 보통은 측정도 안 됩니다. SOCKS5는 프로토콜 파싱을 덜 하기 때문에 연결당 오버헤드가 약간 더 낮지만, 일반적인 스크래핑에서는 지연 시간이 프록시 프로토콜이 아니라 네트워크 거리와 대상 서버 응답 시간에 의해 지배됩니다. 웹 트래픽에서 속도 향상을 기대하고 SOCKS5로 전환하지 마십시오.
SOCKS5가 HTTP보다 더 익명적이거나 탐지하기 더 어렵나요? 아닙니다. 목적지는 여러분이 프록시에 어떻게 도달했는지가 아니라 여러분의 종료 IP와 트래픽 지문을 봅니다. 탐지와 차단율은 IP의 품질(레지덴셜인지 데이터센터인지), 요청 패턴, 지문에 달려 있지, HTTP 대 SOCKS5에 달려 있지 않습니다. 이것이 프록시 프로토콜에 대해 가장 흔한 오해입니다.
헤드리스 브라우저에서 SOCKS5를 사용할 수 있나요? 네, 대부분의 헤드리스 브라우저와 자동화 프레임워크가 SOCKS5를 지원하지만, 설정이 다양하고 일부는 HTTP 지원이 더 깔끔합니다. 단순한 웹 자동화라면 대개 HTTP가 덜 까다롭습니다. 브라우저에서 특별히 필요할 때 SOCKS5를 사용하십시오.
Shifter는 HTTP와 SOCKS5에 요금을 다르게 부과하나요? 아니요. 두 프로토콜 모두 동일한 레지덴셜 게이트웨이에서 동일한 GB당 가격으로 운영됩니다. 프로토콜 선택은 순전히 기술적인 것이며, 청구, 타기팅, 풀 접근에 영향을 미치지 않습니다.
socks5와 socks5h의 차이는 무엇인가요?
socks5h는 DNS를 프록시에서 해석하고, 일반 socks5는 먼저 여러분의 머신에서 해석합니다. 프록시 작업에서는 DNS가 종료 지역에서 이루어지고 로컬 리졸버가 대상 호스트명을 전혀 보지 않도록 거의 항상 socks5h를 원할 것입니다.
HTTP 프록시가 제 HTTPS 트래픽을 볼 수 있나요?
아니요. HTTPS의 경우, HTTP 프록시는 CONNECT를 통해 터널을 열고 암호화된 트래픽은 읽히지 않은 채 통과합니다. 프록시는 (CONNECT로부터) 목적지 호스트와 포트는 알지만 페이로드는 모릅니다. 여러분의 HTTPS는 어느 쪽이든 종단간 암호화되어 있습니다.
결론
여러분이 웹에서 하는 거의 모든 일에 대해 HTTP와 SOCKS5 둘 다 작동하며, HTTP가 마찰이 더 적은 기본값입니다. SOCKS5는 웹 요청을 벗어나거나, UDP가 필요하거나, 도구가 SOCKS를 네이티브로 말하는 순간부터 자기 자리를 얻습니다. 어느 것도 “더 낫다”고 할 수 없고, 서로 다른 작업을 위해 만들어진 것입니다.
그리고 결정적으로, 어느 쪽도 여러분이 차단당하는 빈도를 바꾸지 않습니다. 그것은 프로토콜이 아니라 IP 품질과 행동에 달려 있습니다. 차단이 문제라면, 답은 더 나은 레지덴셜 네트워크와 더 똑똑한 요청 패턴이지, http://를 socks5h://로 스킴만 바꾸는 것이 아닙니다.
Shifter에서는 두 프로토콜 모두 동일한 게이트웨이에서 동일한 타기팅과 동일한 가격으로 제공되므로, 각 작업에 맞는 것을 사용하고 연결 문자열에서 단어 하나만 바꿔서 전환할 수 있습니다. 레지덴셜 플랜으로 시작해서 여러분의 스택이 선호하는 방식으로 연결하십시오.