GitHub clone이 느리고 Docker 이미지 pull이 자주 멈추거나 npm·pip 설치가 오래 걸린다면 단순히 인터넷 회선의 최고 속도만 확인해서는 부족합니다. 개발 도구마다 연결 방식과 프록시 상속 여부가 다르기 때문입니다. 브라우저는 VPN에 연결된 것처럼 보이는데 터미널의 Git, Docker 데몬 또는 CI 작업은 여전히 직접 연결을 사용할 수 있습니다. 반대로 모든 트래픽을 한꺼번에 우회하면 사내 저장소, 로컬 레지스트리와 클라우드 개발 환경까지 불필요하게 느려질 수 있습니다.
이 글에서는 PC 클라이언트와 명령줄 도구를 분리해 확인하고, GitHub·Docker Hub·npm·PyPI에 맞는 규칙을 구성하는 방법을 설명합니다. 핵심은 “VPN을 켰는가”가 아니라 실제 프로세스가 어떤 프록시 진입점과 출구를 사용하는지 검증하는 것입니다. 개발 환경에서는 다운로드 속도뿐 아니라 연결 재사용, 중단 후 재시도, 인증 정보 보호, CI/CD에서의 비밀값 관리까지 함께 고려해야 합니다.
개발 환경에서 먼저 병목을 구분하기
다운로드가 느릴 때 가장 먼저 해야 할 일은 대상과 단계별 증상을 나누는 것입니다. GitHub 저장소의 웹페이지는 열리지만 clone만 느리다면 Git이 사용하는 HTTPS 또는 SSH 연결과 브라우저의 연결 경로가 다를 수 있습니다. Docker는 명령을 실행하는 터미널보다 Docker Desktop 또는 별도의 Docker 데몬이 실제 이미지 레이어를 다운로드합니다. npm과 pip는 패키지 메타데이터를 조회한 뒤 여러 파일을 병렬로 받으므로 DNS, 연결 재사용과 레지스트리 응답 지연의 영향을 함께 받습니다.
또한 “멈춤”이라는 표현도 세분화해야 합니다. 처음부터 주소를 찾지 못하는 경우는 DNS 또는 직접 연결 규칙 문제일 수 있고, 연결 후 오랫동안 응답이 없으면 프록시 핸드셰이크나 국제 경로의 문제일 수 있습니다. 일부 레이어만 반복해서 실패하면 Docker 데몬의 프록시 설정, 인증, 저장 공간 또는 대상 레지스트리의 응답 문제를 의심해야 합니다. 오류 문구를 무조건 네트워크 오류로 분류하지 말고 명령, 대상 도메인, 발생 단계와 재시도 결과를 함께 기록하세요.
90+
국가 커버리지
200+
회선 수
5
지원 플랫폼
무제한
동시 접속 기기
06VPN은 Windows, macOS, iOS, Android, Linux를 지원하므로 개발 PC와 보조 기기에서 같은 계정의 연결 구성을 사용할 수 있습니다. 다만 기기 수가 제한되지 않는다는 사실이 하나의 터널이 모든 앱을 자동으로 처리한다는 뜻은 아닙니다. 공식 클라이언트에서 시스템 프록시나 터널 모드를 활성화했는지, 별도 호환 클라이언트에서 구독을 정확히 가져왔는지, 실제 명령줄 프로그램이 로컬 프록시 포트를 사용하도록 설정했는지를 따로 확인해야 합니다.
- ✅ 브라우저, 터미널, Docker 데몬을 서로 다른 프로세스로 구분해 테스트합니다.
- ✅ 연결 전후 외부 IP와 DNS 결과를 비교하고 대상 도메인의 로그를 확인합니다.
- ✅ 사내 Git 서버, localhost, 로컬 패키지 저장소는 불필요하게 우회하지 않습니다.
- ❌ 두 개의 VPN 또는 프록시 클라이언트를 동시에 전체 모드로 실행하지 않습니다.
- ❌ 공개된 프록시 설정이나 구독 링크를 저장소의 설정 파일에 커밋하지 않습니다.
VPN 클라이언트와 개발 도구의 경로 맞추기
클라이언트 구성은 크게 시스템 프록시 방식과 터널 방식으로 나눌 수 있습니다. 시스템 프록시는 운영체제의 프록시 설정을 따르는 브라우저와 앱에 편리하지만, 모든 터미널 도구나 Docker 데몬이 이를 자동으로 상속하지는 않습니다. 터널 모드 또는 가상 네트워크 어댑터 방식은 더 넓은 트래픽을 처리할 수 있지만, 라우팅 우선순위와 제외 규칙을 잘못 설정하면 로컬 서비스까지 원격 경로로 보내게 됩니다.
개발 목적이라면 처음부터 전체 트래픽을 무조건 우회하기보다 규칙 모드에서 필요한 외부 저장소와 패키지 레지스트리만 확인하는 편이 관리하기 쉽습니다. GitHub의 HTTPS 도메인, Docker Hub 및 사용하는 이미지 저장소, npm과 PyPI의 실제 레지스트리 도메인이 어떤 규칙에 매칭되는지 로그에서 확인하세요. 도메인 하나만 추가하고 관련 인증·API·CDN 도메인을 빠뜨리면 로그인은 되지만 clone이나 패키지 다운로드가 중간에 실패할 수 있습니다.
구독 링크를 공식 클라이언트나 Clash Verge, sing-box, Shadowrocket과 같은 호환 클라이언트에 가져올 때는 “단일 노드”보다 구독 가져오기를 우선하세요. 구독에는 서버 주소, 포트, 프로토콜과 전송 매개변수가 포함될 수 있으며, 제공되는 구성에 따라 Shadowsocks, VMess, Trojan, VLESS, Hysteria2, WireGuard 등이 표시될 수 있습니다. 프로토콜 이름만으로 속도를 단정할 수는 없습니다. 로컬 통신사, 국제 라우팅, 출구 서버 부하, 대상 저장소의 응답과 클라이언트 구현이 함께 결과를 결정합니다.
# 터미널에서 사용할 로컬 프록시 예시
export HTTP_PROXY=http://127.0.0.1:포트
export HTTPS_PROXY=http://127.0.0.1:포트
export ALL_PROXY=socks5://127.0.0.1:포트
# 작업 후 현재 셸에서만 해제
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
위 예시의 포트는 사용하는 클라이언트가 실제로 제공하는 로컬 포트로 바꿔야 합니다. 임의의 포트를 입력한다고 연결되는 것은 아닙니다. SOCKS5를 지원하지 않는 도구에 SOCKS5 주소를 넣거나, HTTP 프록시 포트에 SOCKS5 형식을 넣으면 연결 실패가 발생할 수 있습니다. 회사 네트워크나 공유 개발 PC에서는 환경 변수에 프록시 인증 정보를 평문으로 넣지 말고, 셸 기록과 프로세스 목록에 노출되지 않는 방법을 사용하세요.
GitHub·Docker·npm·pip별 설정과 검증
GitHub clone과 Git 작업
Git은 HTTPS와 SSH에서 설정 지점이 다릅니다. HTTPS 저장소를 사용한다면 Git 자체의 HTTP 프록시 설정이나 현재 셸의 환경 변수가 영향을 줄 수 있습니다. SSH는 Git의 HTTP 프록시 설정을 그대로 사용하지 않으므로 SSH 클라이언트의 프록시 지원 방식, 별도 터널 또는 HTTPS 전환 여부를 따로 검토해야 합니다. 먼저 현재 저장소의 원격 주소가 HTTPS인지 SSH인지 확인하고, 브라우저가 아니라 실제로 clone을 실행하는 터미널에서 경로를 테스트하세요.
git remote -v
git config --global --get http.proxy
git config --global --get https.proxy
전역 프록시를 설정하면 모든 Git 저장소에 적용되므로 사내 Git 서버나 로컬 네트워크 저장소까지 우회할 수 있습니다. 특정 도메인만 프록시로 보내려면 Git의 호스트별 설정을 검토하고, 업무 환경의 내부 도메인은 예외로 두세요. 인증 토큰은 원격 URL에 직접 포함하지 말고 자격 증명 관리 기능을 사용해야 합니다. clone이 멈출 때는 저장소 자체의 크기, 서브모듈 접근, LFS 파일 다운로드가 별도 경로를 사용하는지도 확인해야 합니다.
Docker 이미지 pull
Docker에서 가장 흔한 실수는 터미널에 프록시 환경 변수를 설정하면 Docker 이미지도 자동으로 같은 경로를 사용할 것이라고 생각하는 것입니다. 실제 다운로드 주체가 Docker 데몬이라면 데몬 서비스 또는 Docker Desktop의 네트워크 설정에 프록시를 적용해야 합니다. 설정을 변경한 뒤에는 데몬을 다시 시작하고, 새 설정이 적용되었는지 로그와 간단한 이미지 작업으로 확인하세요.
Docker Hub에서 이미지를 가져올 때는 이미지 이름 해석, 인증 토큰 발급, 매니페스트 조회, 각 레이어 다운로드가 이어집니다. 한 단계라도 직접 연결로 빠지면 전체 작업이 실패할 수 있습니다. 사설 레지스트리를 사용하는 경우에는 해당 주소를 직접 연결로 유지해야 하는지, VPN 출구에서 접근해야 하는지 조직 정책을 먼저 확인하세요. 프록시를 구성하더라도 인증서 검증을 끄거나 안전하지 않은 레지스트리를 허용하는 방식으로 문제를 해결해서는 안 됩니다.
npm과 pip 패키지 설치
npm은 레지스트리 주소와 프록시 설정이 함께 작동합니다. 현재 프로젝트가 기본 레지스트리를 사용하는지, 조직에서 별도 레지스트리를 지정했는지 확인하고 사용자 설정과 프로젝트 설정이 충돌하지 않는지 살펴보세요. pip도 인덱스 주소, 추가 인덱스, 인증서 검증과 프록시 설정이 서로 영향을 줄 수 있습니다. 설치가 느리다고 검증 옵션을 비활성화하거나 출처가 불명확한 미러를 무조건 추가하는 것은 공급망 위험을 키울 수 있습니다.
npm config get registry
npm config get proxy
npm config get https-proxy
python -m pip config list
python -m pip install --dry-run 패키지이름
패키지 관리자는 캐시를 활용하므로 첫 다운로드와 이후 설치 속도를 동일하게 비교하면 안 됩니다. 잠시 멈춘 뒤 재개되는지, 특정 패키지에서만 실패하는지, 메타데이터는 빠르지만 파일 다운로드만 느린지 구분하세요. 프로젝트의 lock 파일을 임의로 삭제하거나 버전을 바꾸는 것은 네트워크 문제를 해결하지 못하며 재현성을 해칠 수 있습니다. 먼저 레지스트리, DNS, 프록시, 인증과 캐시 상태를 순서대로 확인하는 것이 좋습니다.
실제로 설정하고 단계별로 테스트하기
다음 순서는 설정 변경을 최소화하면서 원인을 좁히는 방법입니다. 먼저 VPN을 연결하지 않은 상태에서 GitHub, Docker Hub, npm 또는 PyPI 작업 중 문제가 발생하는 명령을 하나 선택해 오류 메시지를 저장합니다. 같은 네트워크에서 클라이언트를 연결한 뒤 외부 IP와 DNS 결과를 확인하고, 터미널이 로컬 프록시 환경 변수를 읽는지 점검합니다. 이후 Git, Docker, npm·pip를 한꺼번에 바꾸지 말고 하나씩 실행해 어떤 프로세스에서 차이가 생기는지 기록하세요.
- 클라이언트에서 구독을 업데이트하고 하나의 노드를 선택합니다.
- 시스템 프록시 또는 터널 모드가 실제로 활성화되었는지 확인합니다.
- 터미널에서 프록시 환경 변수를 임시로 설정하고 DNS와 외부 IP를 확인합니다.
- Git HTTPS clone, Docker pull, npm 설치, pip 설치를 각각 실행합니다.
- 실패한 명령의 대상 도메인과 연결 로그에서 직접 연결인지 프록시 연결인지 확인합니다.
- 정상 작동 후 사내망과 로컬 주소가 직접 연결되는 예외 규칙을 다시 확인합니다.
테스트 중에는 노드를 계속 바꾸지 않는 것이 좋습니다. 노드를 바꾸면 출구 주소와 라우팅이 동시에 변해 원인을 비교하기 어려워집니다. 한 노드에서 연결이 성립하지 않으면 다른 프로토콜을 제공하는 노드를 시험할 수 있지만, 매번 클라이언트 모드와 명령줄 설정을 동일하게 유지하세요. 연결 후 외부 IP가 바뀌어도 Git이나 Docker가 같은 경로를 사용한다는 뜻은 아니므로, 반드시 실제 명령을 실행해야 합니다.
| 도구 | 실제 확인 대상 | 자주 놓치는 부분 |
|---|---|---|
| Git | HTTPS 또는 SSH의 연결 방식과 Git 프록시 설정 | 서브모듈과 LFS가 별도 다운로드를 수행함 |
| Docker | Docker 데몬 또는 Desktop의 프록시 설정 | 터미널 환경 변수만으로 데몬 경로가 바뀌지 않음 |
| npm | 레지스트리, HTTPS 프록시와 인증 설정 | 사용자 설정과 프로젝트 설정이 충돌할 수 있음 |
| pip | 인덱스 주소, 추가 인덱스와 인증서 검증 | 패키지 출처를 속도만으로 선택하면 안 됨 |
| CI/CD | 러너의 환경 변수와 Docker 실행 환경 | 개발 PC의 VPN 설정이 원격 러너에 상속되지 않음 |
CI/CD 보안과 비용별 선택 기준
CI/CD에서는 개발자의 PC에서 작동한 설정을 그대로 기대할 수 없습니다. GitHub Actions, 자체 러너, 클라우드 빌드 서버는 각각 다른 네트워크에 있으며, 로컬 VPN 클라이언트의 연결을 공유하지 않습니다. 러너에서 필요한 저장소와 레지스트리에 접근해야 한다면 조직이 승인한 네트워크 경로, 러너 전용 프록시 또는 공식 미러 정책을 사용해야 합니다. 토큰, 레지스트리 비밀번호와 구독 링크는 로그에 출력되지 않도록 시크릿 저장소에 넣고, 명령어 인자나 Docker 이미지 레이어에 포함하지 마세요.
CI 작업의 재시도는 도움이 되지만 무제한 재시도는 장애를 숨기고 레지스트리에 불필요한 부하를 줄 수 있습니다. 연결 실패, 이름 확인 실패, 일시적인 서버 응답 지연을 구분하고, 재시도 전에는 같은 노드와 출구를 계속 사용할 수 있는지 확인하세요. 캐시를 활용할 때도 의존성 무결성과 lock 파일 검증을 유지해야 합니다. VPN은 네트워크 경로를 보조할 뿐, 악성 패키지와 잘못된 이미지 태그를 검증해 주지 않습니다.
개인 개발자는 필요한 데이터 사용량과 사용하는 기기 수를 기준으로 비용을 판단할 수 있습니다. 06VPN의 월 구독은 ¥9.9/월에 60GB, ¥18/월에 250GB, ¥28/월에 500GB이며 트래픽은 개통일 기준으로 매월 재설정됩니다. 중간에 상위 요금제로 변경하면 남은 기간을 기준으로 차액이 계산됩니다. 사용 기간보다 다운로드량이 중요한 경우에는 ¥158/300GB, ¥358/1000GB, ¥658/3000GB의 트래픽 패키지를 고려할 수 있으며, 트래픽 패키지는 소진될 때까지 사용하고 만료되지 않습니다.
¥9.9
월 구독 시작가
60GB
시작 요금제 트래픽
¥158
300GB 트래픽 패키지
7일
무조건 환불
결제 방식은 Alipay, WeChat Pay와 USDT를 지원하며 이메일 주소 없이 사용자 이름과 비밀번호로 등록할 수 있습니다. 처음에는 작은 월 구독으로 실제 개발 도구의 경로를 검증하고, Docker 이미지와 의존성 다운로드가 많아 사용량이 반복적으로 증가할 때 상위 요금제나 트래픽 패키지를 비교하는 접근이 안전합니다. 모든 개발 도구를 항상 우회할 필요가 없다면 규칙 분할을 통해 트래픽을 관리하는 것이 비용과 성능을 함께 조절하는 방법입니다.
- ✅ 개인 PC와 CI 러너의 네트워크 구성을 별도로 문서화합니다.
- ✅ Git·Docker·패키지 관리자의 인증 정보는 환경 변수와 시크릿 저장소로 보호합니다.
- ✅ 필요한 레지스트리만 프록시로 보내고 내부 저장소는 조직 정책에 맞춰 직결합니다.
- ✅ 먼저 실제 작업으로 검증한 뒤 사용량에 맞춰 월 구독 또는 트래픽 패키지를 선택합니다.
- ❌ 속도 문제를 해결하려고 TLS 인증서 검증이나 패키지 무결성 확인을 끄지 않습니다.