제가 다니는 회사를 비롯하여, 몇몇 회사들에는 보안상의 이유로 Proxy서버를 거쳐서 외부와 연결을 하도록 하고 있습니다. Proxy 서버를 거치면서 제가 무엇을 하는지 다 까발려지기에 거부감이 있지만, 회사에서 하는 일에 대해서 회사는 알고 있을 필요가 있다고 생각해 어느 정도는 이해하려고 하고 있습니다. 하지만, 한번씩 Proxy서버 때문에 발목 잡힐 때마다 뒷목을 잡곤합니다. 그 중의 하나가 Git Proxy 설정입니다.
Proxy 설정하기 [기본]
설정하는 방법은 간단합니다. CLI에서 다음과 같이 입력해주면 끝입니다.
$ git config --global http.proxy "{proxy_host}:{proxy_port}"
이렇게 쉬운 경우만 있다면 좋겠지만, 세상이 그렇게 녹록치 않습니다. 모든 사람이 GitHub만 사용한다면 저 설정으로 다 해결이 되지만, 특정 팀의 경우는 내부 네트워크에 GitLab을 설치해서 사용하기도 합니다. 그런 팀과 협업을 하며 사용하는 리파지토리는 내부 네트워크에 접속하기 때문에 Proxy서버를 설정하면 안됩니다. 그래서 다음과 같이 리파지토리에만 proxy 설정을 해 줍니다.
Proxy 설정하기 [응용]
$ export no_proxy="{git remote host}"
$ git clone {git remote host}/repository.git
$ cd repository
$ git config http.proxy ""
우선은 proxy를 경유하지 않은 상태에서 clone을 진행하고 로컬 리파지토리에 proxy 설정을 추가하는 방법으로 global로 설정되어 있는 proxy 설정을 지금 리파지토리에는 적용하지 않도록 설정합니다. 이제는 내부에서 협업을 위해서 사용하는 리파지토리는 proxy를 사용하지 않고, GitHub을 사용하는 리파지토리만 proxy를 거쳐서 연결되도록 설정합니다.
처음 Clone할 때, 약간의 꼼수같은 방법을 사용하기는 했지만, 하고자 했던 목적은 달성했습니다.
하지만, 예외상황은 여기서 끝이 아닙니다. 이제는 한 리파지토리에서 내부에 설치된 GitLab도 사용하고 외부 사용자와 협업을 위해서 GitHub도 동시에 접속해야 하는 경우도 있습니다.
Proxy 설정하기 [심화]
이런 경우에는 도메인으로 proxy 설정을 분리할 수 있습니다.
$ git config --global http.https://github.com/.proxy "{proxy_host}:{proxy_port}"
$ git config --gloabl http.proxy ""
이렇게 설정하면 GitHub에 접속할 때는 proxy를 경유하고, 그 외의 경우는 proxy를 경유하지 않고 내부 네트워크에서만 통신을 하게 됩니다.
Proxy설정을 Git에 하는 방법을 여러가지로 설명했지만, 사실 proxy설정은 환경 변수에 설정해도 됩니다. 어찌보면 환경변수를 이용하는 것이 더 편리할 수 있지만, 때로는 환경 변수에 있는 proxy 설정을 제대로 반영하지 못하는 툴이 있다보니, 개별 툴에 proxy 설정을 하기 시작하면 나중 문제 발생시 찾기가 어려워지는 경우가 생겨서 저는 개별 툴마다 proxy 설정하는 것을 선호 하는 편입니다. 각자 관리하기 편한 방법으로 문제가 되는 상황을 잘 해쳐 나가시기 바랍니다.
그 언젠간 이런 설정이 필요없는 환경에서 일해보길 바라봅니다.