깃허브(GitHub)에서 레포지토리를 처음 만들면 마주하게 되는 HTTPS와 SSH 선택지는 보안과 편의성 사이의 '취향 차이'라고 볼 수 있습니다. 결론부터 말씀드리면, 작동하는 결과는 같지만 문을 여는 열쇠의 종류가 다릅니다.
HTTPS 방식은 매번 ID/PW(또는 Personal Access Token)를 입력해야 하거나 캐싱 처리가 번거롭지만, SSH는 '열쇠(Key)'를 미리 등록해두는 방식이라 자동화 환경에서 훨씬 안전하고 매끄럽거든요.
일단 보통 2가지 방식이 어떻게 사용되는지 한번 보자.
1. 왜 두 가지 방식을 모두 제공할까?
사용자의 환경과 보안 요구 수준이 제각각이기 때문입니다.
HTTPS를 선택하는 이유
- 간편함 : 초보자가 쓰기에 최고!! 별도의 설정 없이 URL만 복사해서 git clone을 하면 바로 시작가능.
- 환경 호환성 : 학교나 회사처럼 네트워크 보안이 엄격한 곳에서는 SSH 포트가 막혀있는 경우가 많습니다. HTTPS는 일반 웹 트래픽과 같은 포트를 사용하므로 어디서든 잘 됩니다.
- 일시적 사용 : 남의 컴퓨터에서 잠깐 작업할 때 키를 생성하고 등록하기 번거로우므로 HTTPS가 유리합니다.
SSH를 선택하는 이유
- 자동 로그인 : 한 번 키를 등록해두면 매번 아이디/비밀번호(혹은 토큰)를 입력하거나 저장할 필요가 없습니다.
- 보안 강화 : 내 PC의 '물리적인 키 파일'이 없으면 접근이 불가능. 계정 정보가 털리더라도 비교적 안전.
- 서버 관리자 선호 : 개발자들은 이미 서버 접속을 위해 SSH 키를 사용하는 경우가 많아 관리가 익숙합니다.
2. HTTPS vs SSH: 핵심 차이점
| 구분 | HTTPS (Hypertext Transfer Protocol Secure) | SSH (Secure Shell) |
| 인증 방식 | GitHub 계정 비밀번호 또는 PAT(Personal Access Token) | 내 컴퓨터의 **비공개 키(Private Key)**와 GitHub의 공개 키(Public Key) 쌍 |
| 편의성 | 별도 설정 없이 즉시 사용 가능 | 초기 SSH 키 생성 및 등록 과정이 필요함 |
| 보안성 | 토큰이 노출될 경우 위험함. | 키 쌍(Pair) 기반이라 상대적으로 더 강력함. 개인키가 로컬에만 존재. |
| 환경 제한 | 방화벽이나 프록시 환경에서도 잘 작동함 | 일부 기업용 방화벽에서 포트(22)를 차단할 수 있음 |
| 초기 설정 | 거의 없음 | 키 생성 및 GitHub 등록 필요 |
| 매번 인증 | credential 캐싱 필요 | 한 번 설정 후 자동 |
| 포트 | 443 (방화벽 통과 용이) | 22 (일부 네트워크에서 차단됨) |
| 사용 편의성 | 초보자 친화적 | 설정 후 더 편리 |
3. HTTPS vs SSH — GitHub 연결 방식 차이
인증 방식의 본질적 차이
- HTTPS
- URL 기반 인증. https://github.com/user/repo.git 형태로, push/pull 시마다 GitHub 계정 자격증명(username + PAT)으로 인증한다.
- SSH
- 키 페어 기반 인증이다. git@github.com:user/repo.git 형태로, 로컬에 생성한 개인키(private key)와 GitHub에 등록한 공개키(public key)가 매칭되어 인증한다.
HTTPS 방식의 핵심 원리: 사용자 인증
SSH가 "열쇠"를 미리 복사해두는 방식이라면, HTTPS는 "신분증(ID/PW)"을 매번 제시하거나 임시 통행증(Token)을 보여주는 방식에 가깝습니다.
HTTPS를 통해 GitHub에 접근할 때는 우리가 웹사이트에 로그인하는 것과 비슷한 과정을 거칩니다.
- 인증 수단: 예전에는 실제 GitHub 계정 비밀번호를 썼지만, 보안상 현재는 **PAT(Personal Access Token)**라는 복잡한 문자열을 신분증 대신 사용합니다.
- 전달 방식: Git 클라이언트가 요청을 보낼 때마다 HTTP 헤더에 이 토큰 정보를 실어서 보냅니다.
인증 로직:
- 내 컴퓨터가 GitHub 주소(https://github.com/...)로 데이터를 보내려고 시도합니다.
- GitHub 서버가 "누구니? 신분증(Token) 내놔"라고 요청합니다.
- 사용자가 입력한(혹은 저장된) 토큰을 서버로 보냅니다.
- GitHub이 자기네 데이터베이스에 있는 토큰과 일치하는지 확인하고 문을 열어줍니다.
SSH 방식의 핵심: "열쇠와 자물쇠" (Public/Private Key)
HTTPS는 매번 계정 아이디와 패스워드(또는 토큰)를 입력해야 하지만, SSH는 **암호학적인 '쌍'**을 이용해 자동으로 인증합니다.
- Private Key (개인키): 본인의 컴퓨터(또는 GitHub Actions 서버)에만 보관하는 절대 유출되면 안 되는 열쇠입니다.
- Public Key (공개키): GitHub 설정에 등록해두는 '자물쇠'입니다.
인증 로직:
- 내 컴퓨터가 GitHub에 접속을 시도합니다.
- GitHub이 "너 진짜 너 맞아? 이 자물쇠(공개키)에 맞는 열쇠(비밀키)로 증명해봐"라고 요청합니다.
- 내 컴퓨터가 비밀키를 이용해 응답을 암호화해서 보냅니다.
- GitHub이 가지고 있는 공개키로 이를 해독하여 신원을 확인합니다.
'개발 공통 기술' 카테고리의 다른 글
| JWT (2) | 2024.11.04 |
|---|---|
| 이미지 파일에 대한 이해 (4) | 2024.10.23 |
| 직렬화(Serializable)란 무엇인가? (0) | 2023.01.15 |
| JWT 는 만능이 아니다. (0) | 2022.12.12 |