개발자가 VPN을 사용할 때 GitHub 웹페이지 하나만 빨라지는 것으로는 충분하지 않습니다. 실제 개발 환경에서는 Git 저장소를 복제하고, 릴리스 파일을 내려받고, Docker Hub에서 이미지를 가져오며, npm과 다른 패키지 저장소에 접근하고, API 요청과 CI 작업까지 처리해야 합니다. 브라우저에서 GitHub가 잘 열린다고 해서 터미널, Docker 데몬, 패키지 매니저가 같은 경로를 사용하는 것은 아니기 때문에 각각의 네트워크 흐름을 분리해서 확인해야 합니다.
가장 안정적인 구성은 VPN 클라이언트의 기본 연결만 켜는 데서 끝나지 않습니다. 운영체제 전체 트래픽을 VPN으로 보낼지, Git과 패키지 매니저에만 터미널 프록시를 적용할지, Docker 데몬에 별도의 프록시를 지정할지 결정해야 합니다. 여기에 DNS가 어느 경로로 질의되는지, 사내 서비스와 로컬 개발 서버를 직접 연결할지까지 함께 정리해야 불필요한 장애를 줄일 수 있습니다.
90+
국가 커버리지
200+
지원 회선
5
지원 플랫폼
무제한
동시 연결 기기
개발 트래픽을 종류별로 나누어 보세요
개발 환경의 속도 문제를 해결하려면 먼저 ‘인터넷이 느리다’는 표현을 더 작은 요청으로 나눠야 합니다. GitHub의 웹 인터페이스와 Git 프로토콜은 같은 도메인을 사용하더라도 클라이언트 동작이 다를 수 있습니다. 저장소 복제는 여러 연결과 큰 파일 전송을 포함하고, 릴리스 다운로드는 CDN과 리디렉션을 거칠 수 있습니다. 브라우저에서 페이지가 열렸다는 사실만으로 Git 명령이 정상이라고 판단해서는 안 됩니다.
Docker는 더 복잡합니다. 터미널에서 실행하는 docker pull 명령은 명령 자체가 아니라 Docker 데몬이 레지스트리에 연결하도록 요청합니다. 따라서 터미널에 HTTP 프록시 환경 변수를 설정해도 데몬의 네트워크 경로가 자동으로 바뀌지 않을 수 있습니다. Docker Desktop을 사용하는지, Linux에서 systemd 서비스로 Docker Engine을 실행하는지에 따라 설정 위치도 달라집니다.
npm, pnpm, yarn 같은 패키지 매니저는 레지스트리 주소, 패키지 메타데이터, 압축 파일, 인증 요청을 여러 단계로 처리합니다. 하나의 패키지만 느린 경우에는 전체 VPN보다 레지스트리 선택이나 DNS 해석 문제가 원인일 수 있습니다. 회사 내부 패키지와 공개 패키지를 함께 사용한다면 모든 요청을 하나의 프록시로 보내기보다 도메인별 규칙을 설계하는 편이 안전합니다.
- ✅ 브라우저, Git, Docker 데몬, 패키지 매니저, API 요청을 각각 테스트하세요.
- ✅ 연결 후에는 대상 도메인, DNS 응답, 리디렉션 결과를 함께 확인하세요.
- ✅ 사내 Git, 로컬호스트, 개발용 데이터베이스는 직접 연결이 필요한지 먼저 판단하세요.
- ❌ 터미널에 프록시를 설정했다고 Docker 데몬과 CI까지 같은 경로를 사용한다고 가정하지 마세요.
VPN 클라이언트와 프로토콜을 개발 환경에 맞게 선택하기
Windows, macOS, iOS, Android, Linux에서 PeeVPN을 사용하려면 먼저 운영체제에 맞는 공식 클라이언트와 구독 방식을 확인하세요. 데스크톱에서는 공식 앱으로 전체 연결을 구성하거나, Clash Verge·sing-box와 같은 호환 클라이언트에 구독 링크를 가져와 규칙을 세밀하게 관리할 수 있습니다. macOS와 Windows에서 여러 개발 도구를 동시에 사용한다면 규칙 기반 분할 연결이 편리하지만, 처음부터 복잡한 규칙을 직접 작성하기보다 기본 모드로 연결을 확인한 뒤 범위를 넓히는 편이 좋습니다.
Linux에서는 배포판과 사용 중인 클라이언트에 따라 구성이 달라질 수 있습니다. sing-box 기반 설정, 시스템 프록시, 환경 변수, Docker 서비스 설정은 서로 다른 계층입니다. 하나를 변경했다고 나머지 계층까지 바뀌지 않으므로 변경 전후에 실제 프로세스가 어떤 프록시와 DNS를 사용하는지 확인해야 합니다.
프로토콜은 단순한 속도 등급이 아닙니다. Shadowsocks는 로컬 프록시 방식으로 활용하기 쉬워 Git이나 패키지 매니저에 선택적으로 적용하기 좋습니다. VMess와 VLESS는 전송 계층과 보안 설정까지 함께 해석해야 하며, 프로토콜 이름만으로 암호화 수준을 판단할 수 없습니다. Trojan은 TLS 관련 서버 이름과 인증서 처리가 정확해야 하고, Hysteria2는 UDP 기반 전송 특성 때문에 현재 네트워크에서 UDP가 제한되는지 살펴봐야 합니다. WireGuard는 운영체제의 VPN 인터페이스와 결합하는 방식이므로 시스템 라우팅과 DNS 설정을 함께 확인해야 합니다.
Clash Verge나 sing-box를 사용할 때는 구독 가져오기가 성공했는지보다 실제로 규칙이 적용되는지를 확인하세요. 규칙 그룹에 선택된 노드가 없거나, 개발 도메인이 DIRECT로 분류되어 있으면 클라이언트가 연결된 상태여도 원하는 경로를 사용하지 않습니다. Shadowrocket은 주로 iOS 환경에서 구독과 규칙을 관리할 때 활용할 수 있지만, 앱이 지원하는 프로토콜과 시스템 VPN 권한을 먼저 확인해야 합니다.
터미널 프록시를 설정하고 Git과 패키지 다운로드를 확인하기
브라우저와 별도로 터미널 프로그램에 프록시를 적용하려면 먼저 VPN 클라이언트가 제공하는 로컬 HTTP 또는 SOCKS 프록시 주소와 포트를 확인해야 합니다. 값은 클라이언트마다 다르므로 예시 값을 실제 설정으로 오해하지 말고, 아래의 PROXY_URL 부분을 자신의 로컬 프록시 주소로 바꾸세요. 프록시가 인증을 요구한다면 사용자 이름과 비밀번호를 명령어에 직접 넣지 않는 것이 좋습니다.
- VPN 클라이언트에서 로컬 HTTP 또는 SOCKS 프록시가 활성화되어 있는지 확인합니다.
- 현재 셸에서만 사용할 환경 변수를 설정하고, 먼저 대상 도메인에 대한 간단한 요청을 실행합니다.
- Git의 원격 주소와 프록시 설정이 서로 충돌하지 않는지 확인합니다.
- 패키지 매니저의 레지스트리와 프록시 설정을 점검한 뒤 작은 패키지 요청으로 테스트합니다.
- 문제가 해결되면 셸 설정 파일이나 프로젝트 설정에 영구 반영할 범위를 결정합니다.
# 현재 셸에서만 적용하는 예시
export HTTP_PROXY="PROXY_URL"
export HTTPS_PROXY="PROXY_URL"
export ALL_PROXY="PROXY_URL"
# Git에 등록된 프록시 확인
git config --global --get http.proxy
git config --global --get https.proxy
# npm 설정 확인
npm config get registry
npm config get proxy
npm config get https-proxy
Git은 원격 저장소 주소의 스킴에 따라 설정이 다르게 작동할 수 있습니다. HTTPS 원격 저장소를 사용한다면 http.proxy와 https.proxy가 영향을 줄 수 있고, SSH 원격 저장소는 Git의 HTTP 프록시 설정을 그대로 사용하지 않습니다. SSH를 프록시로 통과시키려면 클라이언트가 제공하는 SOCKS 지원과 SSH의 ProxyCommand 구성을 별도로 확인해야 합니다. 연결이 되지 않을 때 원격 주소를 무작정 바꾸기보다 현재 주소가 HTTPS인지 SSH인지 먼저 확인하세요.
npm에서는 글로벌 설정에 프록시가 남아 있으면 VPN을 끈 뒤에도 모든 요청이 존재하지 않는 로컬 포트로 향할 수 있습니다. 네트워크를 바꾼 뒤 패키지 설치가 실패한다면 npm config list로 적용된 설정을 확인하고, 더 이상 필요하지 않은 프록시를 제거하세요. 회사 내부 레지스트리와 공개 레지스트리를 함께 사용한다면 인증 토큰이 포함된 설정 파일을 프로젝트 저장소에 커밋하지 않도록 주의해야 합니다.
Docker 데몬과 Docker Hub 경로를 따로 구성하기
Docker 다운로드가 느릴 때 가장 먼저 확인할 것은 명령을 실행한 셸이 아니라 Docker 데몬의 연결 경로입니다. Docker CLI는 데몬에 작업을 요청하고, 실제 이미지 레이어를 가져오는 주체는 데몬입니다. 따라서 운영체제 전체 VPN을 사용하지 않는 환경에서는 Docker 데몬에 프록시를 지정해야 할 수 있습니다. Docker Desktop은 앱 설정에서 프록시를 관리하는 경우가 있고, Linux 서비스는 systemd 드롭인 설정이나 배포판의 Docker 설정을 사용할 수 있습니다.
설정하기 전에는 현재 이미지 이름이 Docker Hub를 가리키는지, 사설 레지스트리나 회사 내부 미러를 가리키는지 확인하세요. 사설 레지스트리는 내부 네트워크에서만 접근해야 할 수 있으므로 전체 트래픽을 외부 프록시로 보내면 오히려 인증 실패나 연결 거부가 발생할 수 있습니다. 공개 레지스트리만 VPN 경로로 보내고 내부 레지스트리는 직접 연결하는 분할 규칙이 필요한지 검토하세요.
Docker 데몬에 프록시를 적용한 뒤에는 데몬을 다시 시작해야 변경이 반영되는 환경이 있습니다. 변경 전에 현재 설정과 서비스 상태를 기록하고, 재시작 후 로그에서 프록시 주소가 노출되지 않는지 확인하세요. 공개 터미널이나 CI 로그에 환경 변수 전체를 출력하는 진단 명령을 남기지 않는 것도 중요합니다.
# Docker 환경에서 우선 확인할 항목
docker info
docker context show
docker system info
# 이미지 레지스트리와 태그를 명시적으로 확인
docker image inspect IMAGE_NAME
docker pull이 실패할 때는 DNS, TLS, 레지스트리 인증, 프록시의 HTTPS 처리, 특정 이미지 레이어의 응답 지연을 나눠서 살펴보세요. 웹 브라우저에서 Docker Hub가 열린다는 사실만으로 이미지 다운로드가 정상이라고 할 수 없습니다. 반대로 작은 이미지가 내려와도 큰 레이어에서 문제가 재현될 수 있으므로, 실제 업무에 사용하는 이미지와 같은 레지스트리 경로를 기준으로 확인해야 합니다.
DNS와 분할 연결을 함께 점검하기
VPN을 켰는데 GitHub나 Docker Hub가 여전히 느리다면 데이터 경로뿐 아니라 DNS 경로도 확인해야 합니다. DNS가 로컬 네트워크에서 처리되고 실제 연결은 VPN으로 나가거나, 반대로 DNS는 VPN을 통과하지만 일부 도메인은 직접 연결되는 식으로 경로가 엇갈릴 수 있습니다. 이런 불일치는 지역별 CDN 선택, 인증서 검증, 사내 도메인 접근에 영향을 줄 수 있습니다.
분할 연결은 모든 트래픽을 VPN으로 보내지 않고 도메인이나 주소 범위에 따라 직접 연결과 VPN 연결을 나누는 방식입니다. 개발자에게는 사내 Git과 외부 GitHub, 내부 패키지 저장소와 공개 npm 레지스트리, 로컬 데이터베이스와 외부 API를 분리할 때 유용합니다. 다만 도메인 목록이 불완전하면 일부 요청만 다른 경로로 빠져 로그인이나 다운로드가 중간에 실패할 수 있습니다.
- ✅ 공개 Git 호스팅, 공개 패키지 레지스트리, 컨테이너 레지스트리의 실제 도메인을 확인하세요.
- ✅ 사내 도메인과 개발 서버는 조직의 네트워크 정책에 따라 직접 연결 여부를 결정하세요.
- ✅ DNS 규칙과 프록시 규칙이 같은 대상에 적용되는지 함께 확인하세요.
- ❌ 모든 도메인을 무조건 VPN으로 보내면 내부 서비스와 로컬 개발 환경이 깨질 수 있습니다.
DNS 확인은 운영체제 명령어와 클라이언트 로그를 함께 보는 방식이 좋습니다. Windows에서는 nslookup, macOS와 Linux에서는 dig 또는 nslookup을 사용할 수 있습니다. 결과의 주소가 예상과 다르다고 즉시 오류로 판단하지 말고, 현재 VPN 모드와 DNS 서버, 해당 서비스의 CDN 구조를 함께 확인하세요. 중요한 것은 특정 IP를 외워 두는 것이 아니라 같은 조건에서 VPN 전후의 해석과 접속 결과가 일관적인지 보는 것입니다.
CI와 장기 유지 관리에서 자격 증명을 보호하기
로컬 컴퓨터에서 잘 작동하는 프록시 설정이 CI 환경에서 그대로 작동한다고 볼 수는 없습니다. CI 러너는 별도의 네트워크에 있고, Docker-in-Docker나 원격 Docker 데몬을 사용할 수도 있습니다. 이 경우 프록시를 설정해야 하는 위치는 작업 셸, 빌드 컨테이너, Docker 데몬, 러너 자체 중 하나이거나 여러 곳일 수 있습니다. 먼저 파이프라인이 실제로 어느 프로세스에서 Git clone, npm install, 이미지 pull을 수행하는지 확인하세요.
CI 변수에는 프록시 인증 정보와 패키지 레지스트리 토큰을 평문으로 기록하지 말고 비밀 변수 기능을 사용하세요. 로그 마스킹이 모든 변형된 문자열을 가려 준다고 가정해서도 안 됩니다. URL 인코딩, 디버그 출력, 오류 메시지, 의존성 설정 파일을 통해 일부 정보가 노출될 수 있으므로 로그 수준을 낮추고 작업이 끝난 뒤 임시 파일을 삭제하세요.
속도 개선을 위해 캐시를 활용하는 것도 중요합니다. Git의 작업 공간 캐시, 패키지 매니저 캐시, Docker 레이어 캐시는 반복 다운로드를 줄일 수 있지만, 오래된 캐시가 최신 보안 업데이트를 가리는 문제도 생길 수 있습니다. 캐시를 무조건 비활성화하거나 무기한 유지하기보다 프로젝트의 업데이트 정책과 무결성 검증 방식을 기준으로 관리하세요. Docker 이미지는 태그만 믿기보다 조직이 정한 방식으로 출처와 다이제스트를 확인하는 편이 안전합니다.
마지막으로 문제가 발생할 때는 한 번에 여러 설정을 바꾸지 마세요. VPN 노드를 바꾼 뒤 Git 프록시와 DNS까지 동시에 수정하면 어떤 변경이 효과가 있었는지 알기 어렵습니다. 먼저 기본 연결에서 브라우저와 터미널을 비교하고, 그다음 Docker 데몬, 패키지 레지스트리, CI 러너 순서로 범위를 넓히세요. 변경 사항과 원래 값을 간단히 기록해 두면 VPN을 끄거나 다른 네트워크로 이동했을 때 복구하기도 쉽습니다.