뭘로 Clone해야해? SSH vs HTTP?

2020. 8. 19. 11:41dev/git

Gitlab이나 Github 등 Git 저장소에서 Local로 clone을 하다보면 SSH와 HTTPS 중에서 뭘로 받아야할 지 고민한 적이 한 번이라도 있으신 분(저를 포함하여)들을 위해 작성해보았습니다. 어떤 차이가 있는지 알아볼까요?

우선 결론부터 말씀드리면 저장소에 Push나 Pull과 같은 동작들을 할 때, 아이디와 비밀번호로 인증하느냐, SSH key를 가지고 인증하느냐의 차이입니다. 이렇게만 이야기하면 감이 안오시는 분들이 있을 것 같네요. 좀 더 자세하게 알아볼까요?

HTTPS

HTTPS를 사용하여 Push나 Pull을 하려고 하는 경우에는 사용자의 Username과 Password를 물어봅니다. 그렇다면 매번 이렇게 입력해야할까요?

No! 개발자는 창조적으로 게으른 존재이기 때문에 다행이도 Git에서 제공하는 Credential 저장소의 기능을 이용하면 계정정보를 캐싱해두었다가 매번 입력할 필요없이 자동으로 입력되도록 할 수 있습니다.

만약 이 기능을 별도로 사용하지 않더라도, Mac과 Windows 환경에서 Git을 이용하고 계시다면 Mac에서는 Mac에서 제공하는 Keychain 시스템, Windows에서는 Windows Credential Store(자격증명 관리자)를 통해 각각 계정정보를 저장하고 활용할 수 있기 때문에 매번 로그인을 할 필요가 없습니다.

SSH

그렇다면 SSH는 도대체 뭐가 다른걸까요?

우선 SSH를 사용하여 Git에서 Push나 Pull 무작정 시도하게 되면 Permission Denied 에러 메시지를 만나시게 됩니다. 자격이 없다고 나오는거죠. HTTPS를 쓰면 친절하게 로그인 창이라도 떳지, SSH는 그럼 어떻게 인증을 해야 할까요?

각 원격 저장소의 설정 화면으로 가서 SSH key를 등록해주어야 합니다. 우리가 집에 들어갈 때 열쇠를 가지고 잠겨있는 문을 열고 들어가는 것처럼, 원격 저장소로 작업물들을 올릴 때에는 열쇠(SSH key)를 가진 사람만 올릴수 있게 하는거죠.

이상으로 Git에서 HTTPS와 SSH를 사용할 때의 차이를 알아보았습니다. 궁금하신 점은 댓글을 통해 질문해주시면 답변 드리겠습니다.

참고 링크

Git 공식문서 - Git 서버 프로토콜

Git 공식문서 - Git Credential 저장소