개발 환경에서 VPN은 단순히 웹 브라우저의 접속 경로만 바꾸는 도구가 아닙니다. GitHub 저장소를 복제하고, Docker 이미지를 내려받고, npm 패키지를 설치하는 과정은 서로 다른 프로그램과 연결 방식을 사용합니다. 브라우저에서는 페이지가 열리는데 터미널의 git clone이 멈추거나, npm은 정상인데 Docker가 타임아웃되는 이유도 여기에 있습니다.

안정적인 개발 환경을 만들려면 먼저 어떤 프로그램의 트래픽이 문제인지 분리해야 합니다. 데스크톱 클라이언트의 전체 터널 모드로 모든 연결을 넘길 수도 있지만, 사내 시스템이나 로컬 개발 서버까지 원격 경로를 거치면 오히려 인증과 접근성이 나빠질 수 있습니다. 일반적으로는 개발 도구에 필요한 연결만 프록시 또는 VPN으로 보내고, 로컬 네트워크와 업무용 내부망은 직접 연결하는 분할 터널링이 관리하기 쉽습니다.

개발자 VPN이 필요한 구간부터 확인하기

문제 재현 순서는 짧은 요청부터 시작하는 편이 좋습니다. 먼저 브라우저에서 GitHub 저장소 페이지와 패키지 레지스트리 접속을 확인하고, 그다음 저장소의 작은 변경 사항을 조회한 뒤 실제 복제나 이미지 다운로드를 시도합니다. 특정 단계에서만 지연이 나타나면 VPN 서버 전체가 느린 것이 아니라 DNS 조회, TLS 연결, 인증, 파일 전송 또는 레지스트리의 CDN 경로 중 한 부분이 병목일 수 있습니다.

110+

국가 커버리지

160+

회선 수

5

지원 플랫폼

무제한

동시 접속 기기

서버를 고를 때는 목적지와 가까운 곳만 무조건 선택하기보다 전체 경로를 비교해야 합니다. 개발자가 있는 지역과 GitHub 또는 이미지 레지스트리의 출구 지역 사이에 안정적인 경로가 형성되는지가 중요합니다. 가까운 진입 지점은 VPN 연결 시작 시간을 줄이는 데 유리할 수 있지만, 최종 서비스까지의 경로가 혼잡하면 더 먼 출구가 나은 결과를 낼 수도 있습니다.

프로토콜도 같은 방식으로 비교해야 합니다. WireGuard는 가벼운 터널 구성이 필요한 환경에서 널리 사용되며, Shadowsocks는 애플리케이션 프록시 방식으로 운용되는 경우가 많습니다. VMess와 Trojan은 호환 클라이언트와 서버의 전송 설정이 맞아야 하며, Hysteria2는 UDP 기반 특성과 클라이언트 지원 여부를 함께 확인해야 합니다. 이름이 비슷하다는 이유로 한 프로토콜의 구독 정보를 다른 클라이언트에 임의로 입력해서는 안 됩니다.

GitHub 연결과 Git 프록시 설정

GitHub 작업은 주로 HTTPS와 SSH 두 경로로 나뉩니다. HTTPS는 저장소 주소가 https://로 시작하며 Git의 HTTP 프록시 설정을 사용할 수 있습니다. SSH는 보통 별도의 SSH 설정과 포트 연결을 사용하므로 HTTPS용 프록시를 등록했다고 자동으로 해결되지 않습니다. 회사 방화벽이나 네트워크 정책 때문에 SSH가 불안정하다면 저장소 원격 주소를 HTTPS로 사용하는 것이 더 단순한 선택일 수 있습니다.

Git 전역 프록시를 적용하기 전에는 현재 설정을 확인하고, 테스트가 끝난 뒤 필요하면 해제할 수 있도록 기록해 두세요. 예를 들어 Git이 프록시를 사용하도록 설정하는 형태는 다음과 같습니다.

git config --global http.proxy http://127.0.0.1:PORT
git config --global https.proxy http://127.0.0.1:PORT
git config --global --get-regexp 'http.*proxy'

위의 PORT는 사용 중인 클라이언트가 실제로 제공하는 로컬 HTTP 프록시 포트로 바꿔야 합니다. VPN 터널만 제공하고 로컬 프록시 포트를 열지 않는 클라이언트라면 이 설정은 적합하지 않습니다. 반대로 Clash Verge나 sing-box처럼 로컬 HTTP 또는 SOCKS 포트를 제공하는 클라이언트는 Git이 이해할 수 있는 프록시 형식인지 확인해야 합니다. SOCKS 포트만 있다면 Git 버전과 빌드가 해당 형식을 어떻게 처리하는지 확인하고, 필요할 때는 HTTP 프록시 포트를 사용하세요.

SSH를 사용하는 경우에는 터미널에서 상세 로그를 확인해 인증 단계와 네트워크 단계를 구분할 수 있습니다. 연결이 성립되지 않는다면 키 권한, known_hosts, 계정 권한과 네트워크 경로를 각각 확인해야 합니다. 저장소를 읽을 권한이 없거나 키가 잘못된 문제는 VPN 서버를 바꿔도 해결되지 않습니다.

핵심 판단: HTTPS Git은 Git 프록시 설정으로 분리해 점검하고, SSH Git은 SSH 연결·키 인증·방화벽을 별도로 확인해야 합니다.

Docker 이미지 다운로드가 멈출 때

Docker에서 가장 자주 놓치는 부분은 이미지를 내려받는 주체가 현재 터미널이 아니라 Docker daemon일 수 있다는 점입니다. Docker Desktop에서는 백그라운드 엔진이 별도 환경에서 실행될 수 있고, Linux에서는 systemd 서비스로 동작하는 daemon이 터미널의 환경 변수를 읽지 않을 수 있습니다. 따라서 셸에서 HTTP_PROXY를 설정했는데도 docker pull이 같은 위치에서 멈춘다면 daemon의 네트워크 설정을 따로 확인해야 합니다.

대상 주요 연결 주체 확인할 설정 주의할 점
Git HTTPS Git 프로세스 Git의 http.proxy, https.proxy SSH 원격 주소에는 그대로 적용되지 않음
npm 설치 npm CLI npm proxy, https-proxy, 환경 변수 인증서와 사내 레지스트리 정책을 함께 확인
Docker pull Docker daemon Docker Engine 또는 Desktop의 daemon 프록시 셸 프록시와 별도로 적용될 수 있음
컨테이너 내부 요청 컨테이너 프로세스 컨테이너 환경 변수와 네트워크 이미지 다운로드 설정과 실행 중 요청은 서로 다름

Docker Desktop 사용자는 애플리케이션의 엔진 또는 프록시 관련 설정에서 현재 VPN 클라이언트가 제공하는 경로를 지정할 수 있는지 확인합니다. Linux daemon은 배포판과 설치 방식에 따라 설정 파일 위치와 서비스 재시작 절차가 달라질 수 있으므로, 운영 중인 환경의 공식 문서를 기준으로 변경해야 합니다. 설정을 바꾼 뒤에는 daemon 재시작으로 실행 중인 컨테이너에 영향이 생길 수 있으므로 개발 작업을 저장하고 점검 시간을 확보하는 것이 좋습니다.

이미지 레지스트리의 인증 오류와 다운로드 지연도 구분해야 합니다. 인증 토큰이 만료됐거나 비공개 레지스트리 권한이 없다면 네트워크가 빨라도 pull은 실패합니다. 반대로 일부 레이어만 반복적으로 대기한다면 출구 경로, DNS, 레지스트리 CDN 또는 프록시의 대용량 전송 처리 방식을 점검할 수 있습니다. VPN을 켠 뒤 모든 레지스트리를 무조건 같은 출구로 보내기보다 업무용 레지스트리와 공개 레지스트리의 정책을 나누는 편이 안전합니다.

npm 패키지 설치와 터미널 환경 변수

npm은 설정 파일과 환경 변수를 함께 참조할 수 있습니다. 현재 적용된 값을 먼저 확인하면 시스템 전체 프록시, 사용자 설정, 프로젝트별 설정이 충돌하는지 파악하기 쉽습니다.

npm config get registry
npm config get proxy
npm config get https-proxy
npm install

필요한 경우 npm 설정에 프록시를 지정할 수 있지만, 인증 정보가 포함된 주소를 셸 기록이나 프로젝트 파일에 그대로 남기지 않도록 주의해야 합니다. 조직에서 자체 레지스트리를 사용한다면 공개 레지스트리로 임의 변경하기보다 관리자에게 제공받은 주소와 인증 방식을 사용해야 합니다. 패키지 무결성을 위해 인증서 검증을 끄는 방식은 임시 해결책으로도 권장하기 어렵습니다.

일부 CLI 도구는 다음과 같은 표준 환경 변수를 참조합니다. 다만 모든 프로그램이 동일하게 동작하는 것은 아니므로, 도구별 문서를 확인하고 현재 셸에서만 임시 적용하는 것이 안전합니다.

export HTTP_PROXY=http://127.0.0.1:PORT
export HTTPS_PROXY=http://127.0.0.1:PORT
export NO_PROXY=localhost,127.0.0.1

Windows에서는 PowerShell의 환경 변수 문법이 다르고, macOS와 Linux의 셸 설정 파일도 사용 중인 셸에 따라 달라질 수 있습니다. 중요한 점은 새 터미널을 열었을 때 설정이 의도하지 않게 계속 남아 있지 않은지 확인하는 것입니다. 로컬 API, 데이터베이스, Docker 컨테이너 주소를 NO_PROXY에 넣으면 개발 중인 서비스가 불필요하게 VPN 프록시를 거치지 않게 할 수 있습니다.

실전 설정: 클라이언트부터 검증까지

아래 순서는 특정 클라이언트의 메뉴 이름에 의존하지 않는 기본 점검 절차입니다. Windows, macOS, Android, iOS, Linux 공식 클라이언트는 로그인 후 다운로드 화면에서 제공되는 버전을 사용하고, 호환 클라이언트는 구독 링크를 지원되는 형식으로 가져옵니다. 설정을 바꾸기 전 현재 Git과 npm 설정을 복사해 두면 원상 복구가 쉽습니다.

  1. 클라이언트를 준비합니다. 계정에 로그인한 뒤 현재 운영체제에 맞는 공식 클라이언트 또는 호환 클라이언트를 선택합니다. 구독을 가져온 뒤 사용 가능한 프로토콜과 서버 목록이 정상적으로 표시되는지 확인합니다.
  2. 기본 서버를 선택합니다. 개발자가 있는 지역, GitHub, 패키지 레지스트리, 이미지 레지스트리까지의 경로를 고려해 가까운 진입 지점과 목적지에 적합한 출구를 비교합니다. 연결 직후 웹페이지 하나만 열지 말고 Git, npm, Docker를 각각 시험합니다.
  3. 분할 터널링을 정합니다. 사내 도메인, 로컬호스트, 사설 IP, 프린터와 개발용 데이터베이스처럼 직접 연결해야 하는 대상을 예외로 둡니다. 반대로 GitHub나 외부 레지스트리처럼 원격 경로가 필요한 대상은 클라이언트 규칙 또는 애플리케이션 프록시로 지정합니다.
  4. Git과 npm을 따로 설정합니다. 클라이언트가 제공하는 로컬 HTTP 포트를 확인한 뒤 Git의 HTTP 프록시와 npm의 프록시 값을 각각 적용합니다. 한 프로그램이 정상이라고 다른 프로그램까지 자동으로 설정됐다고 보지 않습니다.
  5. Docker daemon을 검증합니다. Docker Desktop 또는 Linux Engine이 실제로 어느 네트워크 환경에서 실행되는지 확인하고, 필요한 경우 daemon 프록시를 별도로 설정합니다. 이후 이미지 pull과 컨테이너 내부의 외부 요청을 구분해 테스트합니다.
  6. 복구 절차를 남깁니다. 연결 해제, 프록시 제거, DNS 원복, 분할 터널링 예외 삭제 방법을 메모합니다. 문제가 생겼을 때 서버·프로토콜·프록시 값을 동시에 바꾸지 말고 하나씩 되돌려 원인을 좁힙니다.
작업 순서의 결론: VPN 연결을 먼저 안정화한 뒤 Git, npm, Docker daemon을 각각 설정하고, 마지막에 분할 터널링 예외를 추가해야 문제 발생 지점을 추적하기 쉽습니다.

DNS와 분할 터널링을 함께 점검하기

DNS는 도메인 이름을 IP 주소로 바꾸는 과정이므로, VPN 터널과 별개로 잘못된 서버를 사용하면 연결 지연이나 접속 실패가 발생할 수 있습니다. 특히 분할 터널링에서 DNS 요청은 직접 연결로 보내면서 실제 데이터는 VPN으로 보내거나, 반대로 모든 DNS를 터널 안으로 보내면 정책이 서로 어긋날 수 있습니다. 결과적으로 명령은 실행되지만 특정 레지스트리만 잘못된 주소로 해석되는 상황이 생길 수 있습니다.

클라이언트에 DNS 보호 또는 원격 DNS 옵션이 있다면 어떤 요청이 터널을 통과하는지 확인합니다. 로컬 개발 도메인과 사내 도메인은 조직의 DNS가 필요할 수 있으므로 예외 규칙을 신중하게 구성해야 합니다. 반대로 외부 저장소와 레지스트리의 이름 조회가 특정 네트워크에서 불안정하다면 VPN이 제공하는 DNS 정책을 비교할 수 있습니다.

CI 환경에서는 개발 PC의 VPN 설정을 그대로 복사하기보다 러너의 네트워크 정책과 비밀 변수 관리 방식을 먼저 확인해야 합니다. 프록시 인증 정보가 로그에 출력되지 않도록 하고, 저장소 주소나 토큰을 명령행에 직접 남기지 않는 방식으로 구성해야 합니다. VPN이 연결돼 있어도 CI 제공업체의 실행 환경에서 해당 경로를 사용할 수 없다면 작업은 실패할 수 있으므로, 러너에서 DNS 조회, Git 접근, 이미지 pull을 독립적으로 확인하는 절차가 필요합니다.

VFVPN은 Windows, macOS, iOS, Android, Linux를 지원하며 공식 클라이언트와 호환 클라이언트에서 구독을 가져와 사용할 수 있습니다. 110+ 국가와 160+ 회선 중 개발 작업에 맞는 경로를 비교하고, 필요한 애플리케이션만 터널에 포함하면 GitHub 저장소, Docker 이미지, npm 패키지 작업을 더 체계적으로 점검할 수 있습니다. 연결 자체보다 중요한 것은 각 도구의 실제 연결 주체와 예외 규칙을 정확히 구분하는 것입니다.