블로그로 돌아가기

GitLab용 프록시: 팀과 CI/CD 파이프라인을 위한 안정적인 접근 설정 방법

GitLab이 귀하의 지역에서 차단되었거나 사용할 수 없습니까? 팀이 원활하게 작업하고 CI/CD 파이프라인이 중단되지 않도록 GitLab을 위한 프록시 설정 방법을 설명합니다.

📅2026년 7월 19일
```html

GitLab은 전 세계 수천 개 팀이 사용하는 인기 있는 코드 저장 및 DevOps 프로세스 관리 플랫폼입니다. 그러나 제공업체, 기업 네트워크 또는 국가 차원에서 GitLab에 대한 접근이 차단된 경우 어떻게 해야 할까요? 더 나쁜 것은 CI/CD 파이프라인이 밤중에 중단되는 경우입니다. 이는 러너가 리포지토리에 접근할 수 없기 때문입니다.

이 기사에서는 Git 클라이언트, GitLab 러너 및 기업 서버 수준에서 GitLab용 프록시를 설정하는 방법을 알아보겠습니다. 이를 통해 팀 전체가 전 세계 어디에서나 안정적으로 작업할 수 있습니다.

GitLab용 프록시가 필요한 이유: 실제 시나리오

프록시를 설정하기 전에 해결하려는 문제가 무엇인지 이해하는 것이 중요합니다. 상황은 다양하며, 이에 따라 프록시 유형과 연결 방법이 달라집니다.

시나리오 1: GitLab이 제공업체 또는 국가 차원에서 차단됨

일부 국가 및 기업 네트워크에서는 gitlab.com에 대한 접근이 제한됩니다. 개발자가 터미널을 열고 git pull을 입력하면 타임아웃이 발생합니다. 이 경우 프록시는 중개자 역할을 합니다: 트래픽이 gitlab.com으로 직접 가지 않고, 제한이 없는 국가의 중간 서버를 통해 이동합니다.

시나리오 2: 다양한 국가의 분산 팀

상상해 보세요: 팀의 일부는 러시아에서, 일부는 카자흐스탄에서, 일부는 유럽에서 작업하고 있습니다. 각자 다른 네트워크 조건과 제한이 있습니다. 모든 사람이 안정적으로 동일한 속도로 작업할 수 있도록 기업은 모든 트래픽이 단일 채널을 통해 GitLab로 이동하도록 기업 프록시 서버를 배포합니다.

시나리오 3: CI/CD 러너가 외부 종속성에 접근할 수 없음

GitLab 러너가 파이프라인을 시작하고 npm install 또는 pip install 단계에서 모든 것이 중단됩니다. 이는 러너가 인터넷에 대한 직접 접근이 없는 폐쇄 네트워크에 있기 때문입니다. 프록시는 러너가 외부 종속성을 받을 수 있도록 하여 전체 서버에 대한 인터넷 접근을 열지 않습니다.

시나리오 4: 기업 방화벽 뒤에 있는 자체 호스팅 GitLab

기업은 내부 네트워크에 자체 GitLab 서버를 유지합니다. 원격 개발자는 이에 연결해야 합니다. 전체 트래픽에 대해 VPN을 사용하는 대신 GitLab 트래픽에 대해서만 프록시를 설정할 수 있습니다. 이는 더 빠르고 관리가 간편합니다.

시나리오 5: 트래픽 모니터링 및 감사

대기업은 모든 트래픽을 기업 프록시를 통해 리포지토리로 전송하여 활동을 기록하고 누가 무엇을 푸시하는지 모니터링하며 원하지 않는 작업을 차단합니다. 이는 보안 요구 사항이지 차단 우회가 아닙니다.

설정 전에 이해해야 할 사항:

GitLab용 프록시는 동시에 세 가지 수준에서 필요할 수 있습니다: 개발자의 머신(Git 클라이언트), GitLab 러너가 있는 서버(CI/CD), 그리고 자체 호스팅 GitLab 서버. 각 수준은 별도로 설정됩니다.

GitLab에 적합한 프록시 유형

GitLab은 HTTPS 및 SSH 프로토콜을 사용합니다. 이는 어떤 유형의 프록시가 적용 가능한지, 어떤 것은 적용되지 않는지를 즉시 결정합니다. 옵션을 살펴보겠습니다.

프록시 유형 프로토콜 GitLab에 적합 사용 시기
HTTP/HTTPS 프록시 HTTP, HTTPS ✓ 예 HTTPS를 통한 Git, GitLab 웹 인터페이스
SOCKS5 프록시 TCP (모든) ✓ 예 (최고의 옵션) HTTPS 및 SSH를 통한 Git, CI/CD
SOCKS4 프록시 TCP ~ 부분적으로 SOCKS5가 없을 경우에만
투명 프록시 HTTP ✗ 아니요 적합하지 않음 — 차단 우회를 하지 않음

GitLab과 작업할 때 최적의 선택은 SOCKS5입니다. 이는 TCP 수준에서 작동하므로 HTTPS 연결(웹 인터페이스, HTTPS를 통한 git clone)과 SSH 연결(포트 22 또는 443에서 SSH를 통한 git push/pull)을 모두 잘 프록시합니다.

거주지 vs 데이터 센터 프록시

여기서는 작업에 따라 다릅니다. 목표가 GeoIP 차단을 우회하거나 인증을 위한 안정적인 IP를 얻는 것이라면 데이터 센터 프록시가 적합합니다. 이들은 더 빠르고 저렴하며 지연 시간이 낮아 대규모 리포지토리 작업에 중요합니다.

그러나 귀하의 기업 IP가 GitLab의 차단 목록에 포함된 경우(공격적인 스캔 또는 보안 사고 후 발생할 수 있음), 거주지 프록시를 고려해야 합니다. 이들의 IP 주소는 실제 가정 사용자에게 속하며 플랫폼에서 차단되는 경우가 드뭅니다.

Git 클라이언트용 프록시 설정 (전역)

가장 일반적인 시나리오입니다: 개발자가 자신의 머신에서 GitLab에 연결할 수 없습니다. 설정은 Git 자체의 구성 파일을 통해 이루어지며, 한 번만 설정하면 모든 리포지토리에 적용됩니다.

옵션 A: Git용 HTTPS 프록시

GitLab을 HTTPS를 통해 사용하는 경우(리포지토리 주소가 https://로 시작함), 터미널에서 다음을 실행합니다:

# 전역적으로 HTTP 프록시 설정
git config --global http.proxy http://귀하의_프록시_IP:포트

# 프록시가 인증을 요구하는 경우
git config --global http.proxy http://사용자명:비밀번호@귀하의_프록시_IP:포트

# SOCKS5 프록시의 경우 (권장)
git config --global http.proxy socks5://귀하의_프록시_IP:포트

# 설정이 적용되었는지 확인
git config --global --get http.proxy

옵션 B: gitlab.com 전용 프록시 (다른 리포지토리에는 적용되지 않음)

모든 Git 작업에 프록시가 적용되기를 원하지 않는 경우(예: GitHub 또는 Bitbucket은 정상적으로 작동), 특정 도메인에 대해서만 프록시를 설정할 수 있습니다:

# gitlab.com 전용 프록시
git config --global http.https://gitlab.com.proxy socks5://귀하의_프록시_IP:포트

# 또는 귀하의 자체 호스팅 GitLab에 대해
git config --global http.https://git.yourcompany.com.proxy socks5://귀하의_프록시_IP:포트

옵션 C: SSH를 통한 프록시 (SSH로 작업하는 경우)

SSH를 통해 리포지토리를 클론하는 경우([email protected]:...), 프록시 설정은 Git이 아닌 SSH 구성 파일에서 이루어집니다. ~/.ssh/config 파일을 열고 다음을 추가합니다:

# Linux/macOS의 경우 — nc (netcat)를 통해
Host gitlab.com
    HostName gitlab.com
    User git
    ProxyCommand nc -X 5 -x 귀하의_프록시_IP:포트 %h %p

# Windows의 경우 — connect.exe (Git for Windows)를 통해
Host gitlab.com
    HostName gitlab.com
    User git
    ProxyCommand connect -S 귀하의_프록시_IP:포트 %h %p

설정 후 ssh -T [email protected] 명령어로 연결을 확인하세요. 모든 것이 올바르게 설정되었다면 GitLab에서 환영 메시지를 볼 수 있습니다.

더 이상 필요하지 않을 때 프록시 비활성화하는 방법

# 전역 프록시 제거
git config --global --unset http.proxy

# 특정 도메인에 대한 프록시 제거
git config --global --unset http.https://gitlab.com.proxy

GitLab 러너 및 CI/CD 파이프라인용 프록시

GitLab 러너는 .gitlab-ci.yml에서 작업을 실행하는 에이전트입니다. 러너가 폐쇄 네트워크에 있거나 제한된 인터넷 접근이 있는 서버에 있는 경우, 프록시를 별도로 설정해야 합니다. 개발자의 Git 클라이언트 설정은 여기서 도움이 되지 않습니다 — 러너는 다른 머신에서 작동합니다.

방법 1: 러너 구성에서 환경 변수 설정

GitLab 러너 구성 파일(/etc/gitlab-runner/config.toml 일반적으로) 을 열고 [runners.env] 섹션에 환경 변수를 추가합니다:

[[runners]]
  name = "my-runner"
  url = "https://gitlab.com/"
  token = "귀하의_토큰"
  executor = "shell"
  environment = [
    "HTTP_PROXY=http://귀하의_프록시_IP:포트",
    "HTTPS_PROXY=http://귀하의_프록시_IP:포트",
    "NO_PROXY=localhost,127.0.0.1,귀하의_내부_도메인.com"
  ]

구성을 변경한 후 러너를 재시작하세요: sudo gitlab-runner restart

방법 2: .gitlab-ci.yml에서 변수 설정 (파이프라인 수준)

러너의 관리자가 아니거나 특정 프로젝트에 대해서만 프록시를 설정하려는 경우, 파이프라인 파일에 직접 변수를 추가합니다:

variables:
  HTTP_PROXY: "http://귀하의_프록시_IP:포트"
  HTTPS_PROXY: "http://귀하의_프록시_IP:포트"
  NO_PROXY: "localhost,127.0.0.1,.internal.company.com"

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - npm install   # 이제 프록시를 통해 진행됩니다.
    - npm run build

방법 3: GitLab 프로젝트 설정에서 변수 설정 (리포지토리에 커밋하지 않고)

민감한 데이터(인증이 필요한 프록시)에 대한 가장 좋은 방법: 프로젝트의 Settings → CI/CD → Variables로 이동하여 HTTP_PROXY, HTTPS_PROXY, NO_PROXY를 보호된(마스킹된) 변수로 추가합니다. 이들은 모든 파이프라인에서 자동으로 사용 가능하지만 로그에는 표시되지 않습니다.

NO_PROXY에 대해 잊지 마세요!

변수 NO_PROXY는 매우 중요합니다. 이 변수에는 러너가 프록시를 우회하여 직접 연결해야 하는 모든 내부 도메인 및 IP를 추가해야 합니다. 그렇지 않으면 러너가 내부 서비스에 대해서도 프록시를 통해 접근하려고 시도하여 파이프라인이 중단될 수 있습니다.

Docker executor용 프록시

러너가 Docker executor를 사용하는 경우, 기본적으로 컨테이너는 호스트의 프록시 설정을 상속받지 않습니다. config.toml[runners.docker] 섹션에 변수를 추가하거나 러너가 있는 호스트에 /etc/systemd/system/docker.service.d/proxy.conf 파일을 생성해야 합니다:

[Service]
Environment="HTTP_PROXY=http://귀하의_프록시_IP:포트"
Environment="HTTPS_PROXY=http://귀하의_프록시_IP:포트"
Environment="NO_PROXY=localhost,127.0.0.1"

그 후: sudo systemctl daemon-reload && sudo systemctl restart docker

자체 호스팅 GitLab 서버용 프록시

자체 GitLab 서버(Omnibus 또는 Helm을 통해 설치된 경우)를 관리하는 경우, 프록시는 GitLab이 외부 서비스에 접근할 수 있도록 하는 데 필요합니다: 알림을 전송하고, 외부 CI 시스템에 연결하고, 사용자 아바타를 업로드하고, Jira 또는 Slack과 통합하는 등의 작업을 수행합니다.

gitlab.rb에서 설정 (Omnibus 설치)

/etc/gitlab/gitlab.rb 파일을 열고 다음 줄을 추가하거나 주석을 제거합니다:

# GitLab용 프록시 (Omnibus)
gitlab_rails['env'] = {
  "http_proxy" => "http://귀하의_프록시_IP:포트",
  "https_proxy" => "http://귀하의_프록시_IP:포트",
  "no_proxy" => "localhost,127.0.0.1,귀하의_내부_도메인"
}

# 프록시가 인증을 요구하는 경우:
gitlab_rails['env'] = {
  "http_proxy" => "http://사용자명:비밀번호@귀하의_프록시_IP:포트",
  "https_proxy" => "http://사용자명:비밀번호@귀하의_프록시_IP:포트",
  "no_proxy" => "localhost,127.0.0.1"
}

구성을 변경한 후 설정을 적용하세요: sudo gitlab-ctl reconfigure

관리 영역을 통한 아웃바운드 연결 설정

GitLab 15.0 이상에서는 웹 인터페이스를 통해 프록시를 설정할 수 있는 기능이 추가되었습니다: Admin Area → Settings → Network → Outbound requests로 이동하세요. 여기에서 아웃바운드 웹훅을 위한 프록시를 지정하고 GitLab이 접근할 수 있는 IP 범위를 제한할 수 있습니다. 이는 보안에 유용하며, 웹훅을 통한 SSRF 공격을 방지합니다.

팀 전체에 대한 접근 조직화

5~50명의 팀이 GitLab에 안정적으로 접근해야 할 경우, 각 머신에 개별적으로 설정하는 것은 최선의 접근 방식이 아닙니다. 더 확장 가능한 솔루션을 살펴보겠습니다.

접근 방식 1: 기업 프록시 서버

하나의 프록시 서버(예: Squid 또는 3proxy)를 배포하여 인터넷에 접근합니다. 모든 개발자는 이 서버를 사용하도록 Git을 설정합니다. 장점: 중앙 집중식 관리, 단일 제어 지점, 트래픽 로깅 가능. 단점: 서버가 단일 실패 지점이 됩니다.

접근 방식 2: 리포지토리 미러링

GitLab은 리포지토리 미러링을 지원합니다. 내부 네트워크에서 자체 호스팅 GitLab을 gitlab.com의 미러로 설정할 수 있습니다. 개발자는 내부 서버와 작업하고, 이 서버는 프록시를 통해 외부와 동기화됩니다. 이는 각 개발자에 대한 프록시 연결 품질에 대한 의존도를 줄입니다.

접근 방식 3: dotfiles 또는 온보딩 스크립트를 통한 자동 설정

각 개발자가 환경을 직접 설정하는 팀의 경우, 필요한 Git 설정을 자동으로 작성하는 온보딩 스크립트를 만드는 것이 편리합니다. 스크립트는 기업 리포지토리에 저장되며 새로운 작업 공간 설정 시 실행됩니다.

#!/bin/bash
# setup-git-proxy.sh — 새로운 작업 공간 설정 시 실행

PROXY_HOST="proxy.company.com"
PROXY_PORT="3128"

echo "GitLab 접근을 위한 Git 프록시 설정 중..."
git config --global http.https://gitlab.com.proxy "socks5://${PROXY_HOST}:${PROXY_PORT}"
git config --global http.sslVerify true
echo "완료! 확인하세요: git config --global --list | grep proxy"

팀 배포를 위한 체크리스트

  • 개발자, 러너 또는 GitLab 서버 수준에서 프록시가 필요한지 확인합니다 (또는 세 가지 모두)
  • 최대 호환성을 위해 SOCKS5 프록시 유형을 선택합니다
  • 모든 내부 도메인 및 서비스에 대해 NO_PROXY를 설정합니다
  • 프록시를 통한 SSH 키 작동을 확인합니다 (별도의 단계!)
  • 기업 위키에 설정을 문서화합니다
  • 신규 직원용 온보딩 스크립트를 생성합니다
  • 프록시 서버의 가용성을 모니터링합니다

자주 발생하는 문제 및 해결 방법

올바르게 설정한 후에도 가끔 문제가 발생할 수 있습니다. 가장 일반적인 문제와 진단 방법은 다음과 같습니다.

문제 1: SSL 인증서 문제: 로컬 발급자 인증서를 가져올 수 없음

이 오류는 프록시 서버(특히 기업 프록시)가 SSL 검사(인증서를 GitLab의 것으로 대체)를 수행할 때 발생합니다. Git은 이 인증서를 신뢰하지 않습니다. 해결 방법: 기업 루트 인증서를 신뢰할 수 있는 인증서로 추가합니다.

# 임시 해결 방법 (디버깅용, 프로덕션용 아님!)
git config --global http.sslVerify false

# 올바른 해결 방법: 기업 인증서 추가
git config --global http.sslCAInfo /경로/까지/corporate-ca-bundle.crt

문제 2: 프록시는 HTTPS에서 작동하지만 SSH는 작동하지 않음

이는 전형적인 상황입니다: Git에서 http.proxy를 설정했지만 HTTPS 클론은 작동하지만 SSH 작업은 여전히 실패합니다. 이유: SSH 트래픽은 HTTP 프록스를 통해 이동하지 않습니다. ~/.ssh/config를 별도로 설정해야 합니다.

대안: SSH 대신 HTTPS를 통해 GitLab과 작업하도록 전환합니다. 이를 위해 원격 URL을 변경합니다:

# 현재 원격 확인
git remote -v

# SSH에서 HTTPS로 변경
git remote set-url origin https://gitlab.com/username/repo.git

문제 3: CI/CD 파이프라인이 리포지토리 클론 단계에서 멈춤

러너가 GitLab에서 직접 리포지토리를 클론하고 토큰을 사용합니다. 러너가 프록시 뒤에 있다면 이 클론도 프록스를 통해 진행되어야 합니다. HTTP_PROXYHTTPS_PROXY 변수가 config.toml에 설정되어 있는지 확인하세요. .gitlab-ci.yml에만 설정되어 있어서는 안 됩니다. CI 파일의 변수는 클론 후에 적용되기 때문입니다.

문제 4: 프록시는 작동하지만 매우 느림

push/pull이 작동하지만 일반적으로보다 5~10배 더 많은 시간이 소요되는 경우, 문제는 프록시 서버의 대역폭이나 지리적 위치에 있을 수 있습니다. 대규모 리포지토리(100MB 이상) 작업 시 지연 시간이 낮고 대역폭이 높은 프록시를 선택하는 것이 중요합니다. 이 경우 데이터 센터 프록시가 거주지 프록시보다 선호됩니다. 데이터 센터 프록시는 더 안정적인 채널을 제공합니다.

문제 5: 프록시를 통한 인증이 비밀번호 재입력을 요구함

프록시가 기본 인증을 요구하고 Git이 매번 비밀번호를 요청하는 경우, 자격 증명 헬퍼를 설정합니다:

# macOS — Keychain 사용
git config --global credential.helper osxkeychain

# Windows — Windows Credential Manager 사용
git config --global credential.helper manager

# Linux — 1시간 동안 캐시
git config --global credential.helper "cache --timeout=3600"

프록시 문제를 신속하게 진단하는 방법:

다음 명령어를 사용하세요: GIT_TRACE=1 GIT_CURL_VERBOSE=1 git clone https://gitlab.com/... — 이는 모든 HTTP 요청 및 응답의 자세한 로그를 출력하며, 프록시에 대한 정보도 포함됩니다.

결론 및 권장 사항

GitLab용 프록시 설정은 여러 수준에서 동시에 해결해야 하는 작업입니다. 개발자는 작업 머신에서 Git 또는 SSH 구성 파일에 몇 줄을 입력하면 됩니다. CI/CD의 경우 러너 구성이나 프로젝트 설정에 환경 변수를 추가해야 합니다. 자체 호스팅 GitLab의 경우 gitlab.rb를 업데이트하고 구성을 다시 빌드해야 합니다.

대부분의 문제를 피하는 데 도움이 되는 주요 규칙은 다음과 같습니다:

  • SOCKS5를 사용하세요 — HTTPS와 SSH 모두에서 작동합니다
  • 항상 내부 서비스에 대한 NO_PROXY를 설정하세요
  • 프로덕션에서는 SSL 검증을 비활성화하지 마세요 — 기업 인증서를 추가하세요
  • CI/CD의 경우 config.toml에 프록시를 설정하고 .gitlab-ci.yml에만 설정하지 마세요
  • 설정을 문서화하세요 — 팀의 새로운 개발자가 감사할 것입니다

GitLab에 안정적으로 접근하기 위한 신뢰할 수 있는 프록시를 찾고 있다면, 데이터 센터 프록시를 고려해 보세요. 이들은 높은 데이터 전송 속도와 낮은 지연 시간을 제공하여 대규모 리포지토리 및 집중적인 CI/CD 파이프라인 작업 시 특히 중요합니다. 최대한의 익명성이나 GeoIP 차단 우회를 원하는 팀의 경우, 실제 가정 사용자에게 속한 IP를 가진 거주지 프록시가 적합합니다.

```