개발 환경에서 VPN을 켰는데도 GitHub는 열리고 Docker 이미지나 npm 패키지 다운로드는 계속 멈추는 경우가 있습니다. 이는 ‘인터넷이 연결되었는가’와 ‘각 개발 도구의 트래픽이 올바른 경로를 사용하는가’가 서로 다른 문제이기 때문입니다. 브라우저는 시스템 프록시를 따르지만 Docker 데몬은 별도의 환경 변수나 데몬 설정을 사용할 수 있고, npm은 자체 프록시 설정을 우선 적용할 수 있습니다. 따라서 하나의 앱에서 연결이 된다는 이유만으로 모든 개발 도구가 같은 경로를 사용한다고 판단하면 안 됩니다.

이 글에서는 GitHub, Docker Hub와 컨테이너 레지스트리, npm 레지스트리를 각각 확인하는 순서와 VPN·프록시·분할 연결을 조합하는 방법을 설명합니다. 개인 개발자, 여러 기기를 관리하는 팀, 자동화된 CI 환경은 요구 사항이 다르므로 모든 트래픽을 한 번에 우회하는 방식보다 필요한 대상만 명확히 분리하는 구성이 관리하기 쉽습니다.

120+

지원 국가

250+

지원 회선

5

지원 플랫폼

不限

동시 접속 기기

먼저 트래픽 흐름을 구분하기

VPN은 운영체제의 가상 네트워크 인터페이스를 통해 트래픽을 전달하거나, 클라이언트 내부의 프록시 규칙을 사용합니다. 반면 HTTP 프록시는 브라우저나 명령줄 도구가 지정한 요청만 중계합니다. 전역 VPN은 설정이 단순하지만 사내 시스템, 로컬 개발 서버, 데이터베이스 연결까지 같은 경로를 통과할 수 있습니다. 분할 연결은 특정 도메인이나 애플리케이션만 VPN 또는 프록시로 보내고 나머지는 기존 연결을 유지하는 방식입니다.

GitHub 접속에는 HTTPS와 SSH가 모두 사용될 수 있습니다. HTTPS는 브라우저와 Git 클라이언트의 프록시 설정 영향을 받으며, SSH는 일반적인 HTTP 프록시 항목만으로 해결되지 않을 수 있습니다. Docker는 명령을 실행하는 셸과 이미지를 실제로 가져오는 Docker 데몬이 서로 다른 환경에 있을 수 있습니다. Docker Desktop, 원격 Docker 호스트, Linux의 systemd 서비스는 각각 프록시 설정 위치가 다르므로 어느 데몬이 작업을 수행하는지 먼저 확인해야 합니다.

대상 주로 사용하는 연결 확인할 설정 위치 주의할 점
GitHub 웹 HTTPS VPN 클라이언트 규칙, 시스템 프록시, 브라우저 브라우저만 연결되고 Git 명령은 별도 경로를 사용할 수 있음
Git 저장소 HTTPS 또는 SSH Git의 http.proxy, SSH 설정, 터미널 환경 변수 HTTPS 프록시 설정이 SSH 연결까지 자동으로 바꾸지는 않음
Docker 이미지 HTTPS Docker 데몬, Docker Desktop, 레지스트리 설정 셸의 프록시 변수만으로 데몬 다운로드가 바뀌지 않을 수 있음
npm 패키지 HTTPS npm config, .npmrc, 환경 변수 프로젝트 설정과 사용자 전역 설정이 충돌할 수 있음

VPN과 프록시를 용도별로 선택하기

개인 개발자가 노트북에서 GitHub, Docker, npm을 모두 사용한다면 먼저 공식 클라이언트에서 연결 가능한 노드를 선택하고, 전체 트래픽이 아니라 개발 도메인에만 규칙을 적용하는 방식을 고려할 수 있습니다. Windows와 macOS에서는 시스템 프록시 또는 가상 네트워크 모드를 제공하는 클라이언트가 많고, Linux에서는 공식 클라이언트 외에 Clash Verge나 sing-box 같은 호환 클라이언트로 구독을 가져와 규칙을 구성할 수 있습니다. 어떤 클라이언트를 사용하든 구독이 제공하는 Shadowsocks, VMess, Trojan, Hysteria2 또는 WireGuard 구성을 해당 앱이 실제로 지원하는지 확인해야 합니다.

프로토콜과 회선 유형은 같은 개념이 아닙니다. Shadowsocks, VMess, Trojan, Hysteria2, WireGuard는 연결을 구성하는 프로토콜이고, BGP나 IEPL은 네트워크 사업자가 설명하는 경로 또는 전송 품질의 범주입니다. BGP 경로라고 해서 모든 애플리케이션이 자동으로 빠른 것은 아니며, IEPL 회선도 클라이언트 설정과 서버 인증 정보가 맞아야 사용할 수 있습니다. 노드 이름에 ‘고속’이라는 표현이 있어도 현재 네트워크, 시간대, 대상 레지스트리와의 경로에 따라 결과가 달라질 수 있으므로 이름만으로 선택하지 마세요.

프록시를 사용할 때는 인증 정보가 셸 기록, 프로세스 목록, CI 로그에 노출되지 않도록 해야 합니다. 특히 npm의 .npmrc에 토큰이나 비밀번호를 평문으로 저장하면 저장소에 실수로 커밋될 수 있습니다. VPN 클라이언트의 구독 링크도 서버 주소와 인증 정보가 포함될 수 있으므로 터미널, 이슈, 화면 녹화에 전체 내용을 남기지 않는 것이 좋습니다.

실제 설정 순서: GitHub·Docker·npm을 따로 점검하기

설정을 시작하기 전에 현재 어떤 도구가 어디로 연결되는지 기준을 남겨두세요. Git 원격 저장소 주소가 HTTPS인지 SSH인지 확인하고, Docker에서 사용하는 레지스트리와 npm이 바라보는 레지스트리를 확인합니다. 이 과정은 속도 측정보다 중요합니다. 대상 주소가 서로 다른데 하나의 결과만 보고 전체 환경을 판단하면 잘못된 규칙을 만들 수 있습니다.

  1. VPN 클라이언트에 구독을 가져옵니다. 노드 목록이 갱신되지 않으면 링크가 완전하게 복사되었는지, 구독 형식과 클라이언트가 호환되는지 먼저 확인합니다.
  2. 가장 가까운 노드 하나를 선택한 뒤 연결합니다. 처음부터 여러 개의 프록시 앱과 노드를 동시에 켜지 말고, 변경한 항목을 기록합니다.
  3. Git 원격 주소가 HTTPS라면 Git의 프록시 설정과 셸의 HTTPS 프록시 변수를 각각 점검합니다. SSH라면 SSH가 사용하는 호스트와 포트, 키 인증, 별도 프록시 구성을 확인합니다.
  4. Docker 명령을 실행하는 터미널과 Docker 데몬이 같은 컴퓨터에 있는지 확인합니다. 원격 데몬이라면 로컬 VPN만 바꿔서는 원격 호스트의 이미지 다운로드 경로가 바뀌지 않습니다.
  5. npm의 현재 설정을 확인하고 프로젝트 .npmrc, 사용자 전역 .npmrc, 환경 변수에 중복된 registry 또는 proxy 값이 있는지 살펴봅니다.
  6. 각 대상을 독립적으로 확인합니다. Git은 저장소 조회와 작은 fetch, Docker는 필요한 이미지의 pull, npm은 프로젝트 의존성 설치처럼 실제 작업과 가까운 방식으로 검사합니다.

명령줄에서 프록시 환경 변수를 임시로 적용하는 방법은 편리하지만 영구 해결책은 아닙니다. 셸을 닫으면 사라지는지, 새 터미널에서도 남아 있는지 확인하세요. Git에 저장한 프록시 값은 다른 프로젝트에도 적용될 수 있고, npm 설정은 사용자 계정 전체에 영향을 줄 수 있습니다. 문제가 해결된 뒤에는 사용하지 않는 전역 설정을 제거하고 필요한 프로젝트에만 명시하는 편이 재현성을 높입니다.

분할 연결으로 개발 환경을 안정화하기

분할 연결의 핵심은 ‘무엇을 VPN으로 보낼 것인가’뿐 아니라 ‘무엇을 직접 연결로 남길 것인가’를 함께 정의하는 것입니다. GitHub와 필요한 패키지 레지스트리는 VPN 또는 프록시 경로에 넣고, localhost, 사내 Git 서버, 개발용 데이터베이스, 로컬 컨테이너 간 통신은 직접 연결로 남기는 구성이 일반적으로 관리하기 쉽습니다. 다만 회사 네트워크 정책이나 서비스 약관에 따라 허용되는 방식이 다를 수 있으므로 조직의 보안 규칙을 우선해야 합니다.

도메인 기반 규칙은 cdn, API, 인증, 리디렉션 주소가 분리된 서비스에서 누락이 생길 수 있습니다. GitHub 화면은 열리지만 저장소 API나 릴리스 파일만 실패한다면 메인 도메인 하나만 등록한 것이 원인일 수 있습니다. Docker 역시 이미지 이름에 따라 다른 레지스트리 주소를 사용하며, npm은 기본 레지스트리와 프로젝트에서 지정한 사설 레지스트리가 다를 수 있습니다. 규칙을 넓게 잡기 전에 개발 도구가 실제로 요청하는 호스트를 로그에서 확인하고 필요한 범위만 추가하세요.

핵심 결론: GitHub, Docker, npm은 같은 개발 작업에 포함되어도 프록시를 읽는 위치와 실제 연결 주체가 다릅니다. 대상별로 경로를 나누고, Docker 데몬과 npm 설정을 별도로 점검해야 문제를 반복하지 않습니다.

팀과 CI 환경에서의 운영 기준

팀 환경에서는 개인 컴퓨터에서 작동한 설정을 그대로 복사하기보다 구성 요소를 분리해 문서화해야 합니다. 어떤 도메인을 프록시로 보낼지, 어떤 레지스트리를 사용할지, 인증 정보는 어디에 저장할지, 장애 시 직접 연결로 전환할지 등을 정해 두면 신규 구성원이 같은 문제를 반복하지 않습니다. 구독 링크를 여러 사람에게 평문으로 전달하기보다는 접근 권한과 교체 절차를 별도로 관리해야 합니다.

CI에서는 실행기가 VPN에 직접 연결되는지, 사설 네트워크 안의 프록시를 사용하는지, 아니면 레지스트리 캐시를 사용하는지 먼저 결정합니다. 비밀 값은 CI의 secret 저장소나 실행 환경의 보호된 변수로 주입하고 로그에 출력되지 않도록 마스킹해야 합니다. Docker 빌드 중 npm install이 실행된다면 호스트의 npm 설정이 빌드 컨테이너 안으로 자동 전달되지 않을 수 있습니다. 반대로 프록시 변수를 이미지 레이어에 기록하면 나중에 이미지 기록을 통해 인증 정보가 노출될 수 있으므로 빌드 단계와 최종 이미지에 전달되는 값을 구분해야 합니다.

속도 개선을 평가할 때는 단순히 브라우저 페이지가 열리는지만 보지 말고 저장소 fetch, 이미지 pull, 패키지 설치처럼 실제 업무의 병목을 기준으로 비교하세요. 특정 노드가 한 대상에는 적합하지만 다른 레지스트리에는 불리할 수 있으므로 모든 도구에 하나의 노드를 고정할 필요는 없습니다. 또한 VPN을 사용하지 않는 환경에서도 재현할 수 있도록 레지스트리 주소, 프록시 범위, 예외 규칙과 원상 복구 방법을 문서에 남겨 두는 것이 좋습니다.

선택 기준: 개인 개발자는 공식 클라이언트와 분할 연결로 단순하게 시작하고, 팀은 규칙과 비밀 관리 절차를 표준화하며, CI는 실행기와 Docker 데몬의 위치를 기준으로 별도 설계하세요. 가격보다 먼저 실제 다운로드 경로와 운영 책임을 확인하는 것이 안전합니다.

예산과 문제 해결 순서

개인 사용량이 일정하다면 월 구독은 월별 트래픽이 개통일을 기준으로 재설정되는 구조입니다. 선택지는 월 60GB에 ¥9.9, 월 250GB에 ¥18, 월 500GB에 ¥28이며, 중도 업그레이드 시 차액은 남은 날짜를 기준으로 계산됩니다. 사용량이 매달 반복되지 않고 한 번의 대형 작업이나 장기 프로젝트에 집중된다면 유효기간이 없는 트래픽 패키지인 300GB ¥158, 1000GB ¥358, 3000GB ¥658도 비교할 수 있습니다. 모든 요금제는 동시에 연결하는 기기 수가 제한되지 않으며, 첫 결제 후 14일 무조건 환불 정책이 적용되는지 결제 전 안내와 약관에서 다시 확인하세요.

문제가 생기면 노드를 즉시 계속 바꾸기보다 순서를 지키는 편이 빠릅니다. 첫째, VPN 자체가 연결되었는지 확인합니다. 둘째, GitHub·레지스트리·npm 중 어느 대상만 실패하는지 분리합니다. 셋째, 앱의 규칙과 시스템 프록시, 명령줄 환경 변수의 중복을 확인합니다. 넷째, Docker 데몬이나 CI 실행기처럼 실제 요청을 보내는 주체를 찾습니다. 마지막으로 인증 실패, DNS 오류, TLS 오류, 연결 시간 초과를 구분해 해당 설정만 수정합니다.

결국 개발자 VPN 설정의 목표는 모든 연결을 무조건 우회하는 것이 아니라, 필요한 개발 트래픽이 예측 가능한 경로를 사용하도록 만드는 데 있습니다. 공식 클라이언트나 호환 클라이언트에 구독을 가져온 뒤 Git, Docker, npm을 각각 검증하고, 분할 연결과 비밀 관리 원칙을 적용하면 개인 개발 환경과 팀·CI 환경 모두에서 변경 원인을 추적하기 쉬워집니다.