“로테이팅 레지덴셜 프록시”는 이 분야에서 누구나 쓰는 표현이지만, 그 이면의 작동 방식은 거의 설명되지 않는다. IP는 어디서 오는가? 요청하지 않았는데도 종료 IP가 바뀌는 이유는 무엇인가? “로테이팅”이 실제로 통제하는 것은 무엇이며, “고정” IP가 결코 완전히 영구적이지 않은 이유는 무엇인가? 이 배관 구조를 이해하면 이 모든 질문에 답할 수 있으며, 프록시의 동작과 씨름하는 것과 의도적으로 사용하는 것의 차이가 여기서 갈린다.
이것은 고정 vs 로테이팅 선택과 레지덴셜 IP의 구조의 밑바탕이 되는 메커니즘이다. 실제로 무슨 일이 일어나는지 살펴보자.
개별 IP가 아니라 게이트웨이에 연결한다
가장 먼저 이해해야 할 것은, 개별 레지덴셜 IP에 직접 연결하는 것이 아니며, IP 목록을 관리하는 것도 아니라는 점이다. 당신은 p.shifter.io:443이라는 단일 게이트웨이 엔드포인트에 연결하고, 게이트웨이가 요청을 풀 안의 수백만 개 레지덴셜 IP 중 하나를 통해 내보낸다. 어떤 IP를 받게 되는지는 모두 인증에 사용하는 사용자 이름에 표현된다.
customer-USERNAME-country-us-sid-abc123-ttl-600게이트웨이는 이 사용자 이름을 읽고, 요청한 타겟팅(여기서는 미국)에 맞는 IP로 풀을 필터링한 뒤 하나를 골라 그 IP를 통해 요청을 내보낸다. 당신은 하나의 주소와 통신하고, 풀은 그 뒤에 자리한다. 로테이션이 수고 없이 느껴지는 이유가 바로 여기에 있다. 게이트웨이가 할당을 담당하고, 당신은 원하는 것을 설명하기만 하면 된다.
풀은 살아 있으므로 로테이션이 기본값이다
레지덴셜 풀은 고정된 목록이 아니다. 하루 동안 기기가 온라인/오프라인 상태를 오가며 생겨나고 사라지는 실제 가정용 연결로 구성되므로, 사용 가능한 종료 IP 집합은 계속해서 변한다. 특정 세션을 요청하지 않고 연결을 열면, 게이트웨이는 그 순간 사용 가능한 것 중에서 새로운 종료 IP를 그냥 할당한다. 이것이 “로테이팅”이 가장 기본적으로 의미하는 바다. 새 연결은 새 IP를 받는다.
즉 로테이션은 켜고 끄는 특별한 모드가 아니다. 게이트웨이에 IP를 유지해 달라고 요청하지 않았을 때 살아 있는 풀이 보이는 자연스러운 동작이다. 세션 제어를 생략하면 모든 새 연결이 로테이션된다.
세션 토큰과 TTL로 로테이션을 통제한다
사용자 이름 안의 두 가지 설정이 로테이션할지 그대로 유지할지를 결정하며, 이것이 전부다.
- **세션 id(
sid)**는 게이트웨이에게 “이 토큰을 제시할 때마다 같은 종료 IP로 계속 내보내 달라”고 지시한다. 이것이 고정 세션이다. - **TTL(
ttl)**은 그 IP를 얼마나 오래 유지할지를 나타내며, 예를 들어 600초다.
둘 다 설정하면 그 기간 동안 안정된 IP를 얻는다. 생략하면 매 연결마다 로테이션된다. 중요한 점은, 이것이 요청마다 사용자 이름을 바꿔서 선택하는 것이며, 다른 제품이나 엔드포인트가 아니라 같은 게이트웨이가 둘 다 처리한다는 것이다. 그래서 고정 vs 로테이팅은 작업 단위마다 내리는 결정이지, 구매하는 요금제가 아니다.
고정 IP가 결코 완전히 영구적이지 않은 이유: CGNAT와 기기 변동
여기서부터는 데이터센터 프록시는 신경 쓸 필요가 없는 솔직한 부분이다. 레지덴셜 종료 IP는 당신이 통제하지 않는 실제 가정용 연결에 속하며, 가정용 연결은 임대한 서버처럼 안정적이지 않다. 특히 두 가지 요인이 이를 계속 흔들어놓는다.
대부분의 가정용 연결은 이제 CGNAT(통신사 등급 NAT) 뒤에 있으며, ISP가 여러 가입자에게 하나의 공용 IPv4 주소를 공유시키고 이를 재할당할 수 있다. 가입자의 공용 IP는 임대 갱신이나 NAT 재할당 시 바뀔 수 있으며, 당신이나 게이트웨이가 아무것도 하지 않아도 그렇다. 그리고 기기 자체가 오프라인이 될 수도 있다. 누군가 노트북을 닫거나 휴대폰이 Wi-Fi에서 끊기면, 그 종료 경로는 사라진다.
이런 이유로 고정 세션은 보장이 아니라 최선의 노력이다. 게이트웨이는 TTL 안에서 가능한 한 오래 당신의 IP를 유지하지만, 근본이 되는 가정용 연결이 바뀌거나 끊기면 TTL이 끝나기 전에 새 IP를 받게 된다. 다시 말해 로테이션은 어느 정도는 기능이고, 어느 정도는 네트워크 현실의 반영이다. 레지덴셜 IP는 실제 가정이 움직이기 때문에 움직이며, 이를 기반으로 구축된 모든 시스템은 이를 예상해야 한다.
요청하지 않았는데 IP가 바뀐 이유
이 조각들을 합치면, 작업 중간에 발생하는 미스터리한 IP 변경이 더 이상 미스터리가 아니게 된다. 거의 항상 다음 중 하나다.
- 세션 토큰이 없는 경우, 그래서 설계상 매 연결마다 로테이션된다. 한 번의 작업에 하나의 IP만 사용될 것이라고 가정했던 사람들이 가장 흔히 겪는 놀라움이다.
- TTL이 만료된 고정 세션, 그래서 게이트웨이가 IP를 해제하고 새 IP를 할당했다.
- TTL 전에 근본이 되는 가정용 IP가 끊긴 고정 세션(기기 오프라인 또는 CGNAT 재할당), 이는 조기 변경을 강제한다.
- 클라이언트가 유지 연결을 재사용하지 않고 새로 연 연결. HTTP 클라이언트가 연결을 재사용하지 않으면,
sid로 고정하지 않는 한 각 요청이 새로운 로테이션 이벤트처럼 보일 수 있다. 이것이 언어별 가이드에서 클라이언트 재사용을 강조하는 또 다른 이유다.
이것이 스크래핑 방식에 의미하는 바
실용적인 결론은 메커니즘에서 직접 도출된다.
작업에 맞게 로테이션을 조정하라. 익명성을 원하고 많은 IP에 부하를 분산하고 싶을 때는 세션을 생략해 로테이션하라. 하나의 일관된 방문자처럼 보여야 하는 모든 작업, 예를 들어 다중 페이지 페이지네이션 시퀀스, 로그인된 세션, 또는 여러 단계로 이루어진 흐름에는 sid와 ttl을 사용해 고정하라. 작업을 신원에 이렇게 매핑하는 것이 바로 로드 밸런싱 패턴이다.
변경될 수도 있는 고정 IP를 감안해 설계하라. 고정은 최선의 노력이므로, 긴 세션은 종료 IP가 중간에 바뀌더라도 살아남을 수 있어야 하며, 그런 일이 발생하면 쿠키나 상태를 다시 확립해야 한다. IP가 전체 작업 동안 고정되어 있다고 가정하지 말아야 한다.
지역 타겟팅은 부분집합 안에서 로테이션된다. 국가, 도시, ASN을 타겟팅하면 게이트웨이는 풀을 그 부분집합으로 필터링하고 그 안에서 로테이션한다. “로테이팅 US 레지덴셜”은 연결마다 새로운 미국 IP를 의미하며, ASN이나 도시 단위 타겟팅은 로테이션이 이루어지는 부분집합을 좁힐 뿐이다.
풀의 품질이 로테이션이 주는 것을 결정한다. 로테이션은 그 뒤에 있는 풀만큼만 좋다. 크고 깨끗한 풀은 매 신규 IP가 좋은 IP라는 것을 의미하며, 작거나 오염된 풀은 로테이션이 단지 플래그된 주소들을 순환시킬 뿐이고, 성공률이 이를 그대로 반영한다. 이것이 IP 신뢰도와 풀 크기가 로테이션 메커니즘 자체보다 더 중요한 이유다.
결론
레지덴셜 프록시 로테이션은 마법도 아니고 미스터리도 아니다. 게이트웨이는 실제 가정용 연결로 이루어진 살아 있는 풀에서 종료 IP를 할당하고, 사용자 이름에 있는 세션 토큰과 TTL로 로테이션할지 고정할지를 통제하며, 이 모든 것은 CGNAT와 기기 변동 때문에 가정용 IP가 생겨나고 사라진다는 현실에 의해 제약된다. 세션을 생략해 로테이션하고, sid와 ttl을 설정해 고정하되, 고정을 최선의 노력으로 취급하고 IP가 바뀔 가능성을 염두에 두고 구축하라. 작업에 맞게 선택하면, 그 이후의 모든 것, 세션, 로그인, 페이지네이션, 지역 타겟팅이 더 쉬워진다.
로테이션을 실제로 유용하게 만드는 것은 그 밑에 있는 풀이다. 우리의 레지덴셜 프록시는 크고 깨끗한 풀에서 운영되므로, 게이트웨이가 로테이팅이든 고정이든 당신에게 건네주는 모든 종료 IP는 사용할 가치가 있으며, GB당 가격 정책은 순환시키는 IP 개수가 아니라 실제로 보내는 요청에 대해서만 비용을 지불하게 한다는 것을 의미한다.