[Git]

[Git] Git Server Protocol

극꼼 2022. 10. 30. 19:31
반응형

 

Git 은 Local, SSH, Git, HTTP/HTTPS 4개의 프로토콜로 원격 저장소와 통신합니다. 

 

1. Local Protocol

: remote repository가 단순히 같은 시스템의 다른 디렉토리에 있을 때 사용합니다.

* 장점 : 간단하고, 기존의 네트워크나, 파일의 권한을 그대로 사용하기 때문에 설정하기 쉽습니다.

* 단점 : 다양한 상황(집에서 작업한다던가)에서 접근할 수 있게 디렉토리를 공유하는 것이 어렵고, 모든 사용자가 remote repository에 접근할 수 있으므로 보호가 어렵습니다.

 

2. HTTP Protocol

  • Smart HTTP : SSH, Git 프로토콜처럼 통신합니다. SSH는 키를 발급하고 관리해야 하는 번거로움이 있는 반면, HTTP는 사용자의 이름과 암호로 인증할 수 있기 때문에 편리하게 사용할 수 있기 때문에 Git에서 가장 많이 사용하는 프로토콜 중 하나입니다. remote 서버는 클라이언트의 데이터를 분석해서 실제 전송할 데이터(서버에 없는 커밋)를 추려냅니다. 
  • Dumb HTTP : Git 서버가 Smart HTTP 요청에 응답하지 않으면 Git client는 차선책으로 Dumb HTTP 프로토콜을 시도합니다. Dumb HTTP 프로토콜은 데이터를 전송할 때 Git에 최적화된 코드를 전혀 사용하지 않습니다. 

* Smart HTTP의 장점 : 읽기, 쓰기에 하나의 URL만 사용하고, 사용자에게 익숙한 사용자이름과 암호 방식의 인증을 사용합니다. SSH에 대해 잘 모르거나 익숙하지 않은 사용자에게 장점이 될 수 있고, SSH만큼이나 빠르고 효율적입니다. 또, HTTPS는 보편적인 프로토콜이기 때문에 거의 모든 회사 방화벽에서 통과하도록 되어 있습니다.

* Smart HTTP의 단점 : HTTPS를 사용하도록 설정하는게 SSH를 설정하는 것보다 까다로운 서버가 있습니다. Push 할 때 SSH 인증보다 좀 더 복잡한데, Keychain Access이나 Credential Manager와 같은 인증 캐싱 툴을 사용하면 편해집니다. 

 

3. SSH Protocol

: Git의 대표 프로토콜이며, 아무 외부 도구 없이 Git 서버를 구축할 수 있습니다. 대부분의 서버는 SSH로 접근 가능하며, 설정도 쉽게 할 수 있습니다. 또, Git은 서브모듈에 대한 요청에는 항상 SSH 프로토콜을 사용합니다. 

* 장점 : 설정하기 쉽습니다. 모든 데이터가 암호화되어 인증된 상태로 전송되기 때문에 보안에 안전합니다. HTTPS, Local 프로토콜과 마찬가지로 전송할 때 데이터를 가능한 압축하기 때문에 효율적입니다.

* 단점 : 읽기 전용일지라도 익명으로 시스템에 접근할 수 없습니다. 따라서 회사에서만 사용할 거라면 SSH가 적합하지만, 오픈소스 프로젝트는 SSH를 쓰기엔 다소 부족할 수 있습니다. 

 

4. Git Protocol

: Git Protocol은 Git에 포함된 데몬을 사용하는 것입니다. 포트는 9418이며, SSH 프로토콜과 비슷한 서비스를 제공하지만 인증 메커니즘이 없습니다. 이 저장소는 누구나 Clone 할 수 있거나, 아무도 Clone 할 수 없거나 둘 중 하나의 선택만 할 수 있습니다. 

* 장점 : 전송 속도가 가장 빠릅니다. 따라서 전송량이 많은 공개 프로젝트, 별도의 인증할 필요 없이 읽기만 허용되는 프로젝트를 서비스할 때 유용합니다.

* 단점 : 위에서 말했다시피 인증 메커니즘이 없기 때문에 Git 프로토콜만으로 접근할 수 있는 프로젝트는 바람직하지 못하고, 일반적으로 SSH, HTTPS 프로토콜을 함께 사용합니다(소수의 개발자만 Push할 수 있고, 대다수는 git:// 을 사용하여 읽을 수만 있게). 별도의 데몬이 필요하고, 프로젝트에 맞게 설정도 해야하는 등 설치하기 어렵습니다. 네트워크 9418 포트를 사용하기 때문에 방화벽으로 막히는 현상이 자주 발생합니다.

 


제 게시물은 아래 링크의 내용을 공부하기 위해 정리한 것이고, 더 자세한 내용은 아래 링크를 참조하시길 바랍니다.

https://git-scm.com/book/ko/v2/Git-%EC%84%9C%EB%B2%84-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

 

 

반응형