카카오톡 메시지는 어떻게 전달될까? 메신저 서버와 종단간 암호화
카카오톡에서 전송 버튼을 누르면 메시지가 상대의 폰으로 직접 날아갈 것 같지만, 실제로는 그렇지 않습니다. 메시지는 언제나 회사의 서버를 거칩니다. 이 단순한 사실 하나에서 메신저의 많은 동작이 설명됩니다. 1이 어떻게 사라지는지, 폰이 꺼져 있던 동안의 메시지가 어떻게 도착하는지, 그리고 “비밀 채팅"이 왜 따로 있는지까지입니다. 이번 글에서는 그 속 구조를 코드 없이 정리하겠습니다.
메시지는 우체국을 거칩니다 #
메신저의 기본 구조는 우체국과 같습니다. 내가 보낸 메시지는 먼저 메신저 회사의 서버에 도착해 보관되고, 서버가 상대의 폰으로 배달합니다. 직접 전달이 아니라 맡겼다가 전달입니다.
왜 이렇게 만들까요. 상대의 폰이 항상 켜져 있지 않기 때문입니다. 비행기 모드든 배터리 방전이든, 받는 쪽이 자리에 없어도 보내는 쪽은 메시지를 보낼 수 있어야 합니다. 서버가 우체국처럼 보관해 두면, 상대의 폰이 다시 연결되는 순간 밀린 메시지를 한꺼번에 배달할 수 있습니다. 비행기에서 내려 폰을 켜면 메시지가 쏟아져 들어오는 그 장면이 바로 이 구조의 증거입니다.
배달 방법은 상황에 따라 둘로 나뉩니다. 앱이 열려 있으면 폰과 서버 사이에 이미 연결된 통로로 즉시 흘려보내고, 앱이 닫혀 있으면 푸시 알림으로 폰을 깨웁니다. “알림으로는 왔는데 앱을 여니 그제야 내용이 뜨는” 미묘한 시차는 이 두 경로의 합작입니다.
1이 사라지는 원리 — 영수증의 왕복 #
카카오톡의 1, 다른 메신저의 체크 표시는 모두 같은 원리입니다. 배달의 각 단계마다 영수증이 거꾸로 돌아오는 것입니다.
- 내 폰 → 서버 도착: “접수됨” 영수증
- 서버 → 상대 폰 도착: “배달됨” 영수증
- 상대가 대화방을 열어 읽음: “읽음” 영수증 — 이때 1이 사라집니다
그래서 1이 안 사라지는 상태는 정확히 말하면 “상대의 폰까지는 갔는지 알 수 없지만, 적어도 읽음 영수증은 아직 안 돌아온 상태"입니다. 그리고 이 영수증들도 결국 서버를 거치는 메시지입니다. 읽음 표시, 입력 중 표시, 프로필 변경 알림까지, 메신저에서 보이는 거의 모든 것이 같은 우체국을 오가는 작은 편지들입니다.
폰과 PC에서 같은 대화가 보이는 멀티 디바이스도 이 구조의 연장입니다. 서버가 대화의 원본을 갖고 있으니, 새 기기가 로그인하면 서버가 그 기기에도 사본을 배달해 주면 됩니다.
전송 중 암호화 — 엽서가 아니라 봉투로 #
서버를 거친다는 말에 불안해질 수 있습니다. 그럼 통신사나 같은 와이파이의 누군가가 내 메시지를 볼 수 있는 것 아닌가요. 여기에 대한 첫 번째 방어가 전송 중 암호화입니다. 내 폰에서 서버까지, 서버에서 상대 폰까지의 이동 구간이 HTTPS와 같은 원리로 봉투에 담깁니다. 길목에서 가로채도 내용을 읽을 수 없습니다.
다만 이 방식에는 분명한 한계가 있습니다. 봉투는 구간마다 열렸다 다시 닫힙니다. 즉 서버 위에서는 내용이 열람 가능한 상태가 됩니다. 회사가 실제로 들여다보느냐와 별개로, 구조적으로는 볼 수 있고, 수사기관의 적법한 요청이나 해킹 사고의 대상도 될 수 있습니다. 보통의 채팅이 이 단계입니다.
종단간 암호화 — 우체국도 못 여는 편지 #
두 번째 단계가 종단간 암호화(end-to-end encryption, E2EE)입니다. 끝(내 폰)에서 끝(상대 폰)까지 잠겨 있다는 뜻으로, 열쇠를 대화 당사자의 폰만 갖는 방식입니다. 서버는 잠긴 편지를 보관하고 배달하지만 열 수는 없습니다. 회사 자신도 내용을 읽을 수 없게 만드는 설계라서, 해킹이나 제출 요구가 있어도 내놓을 수 있는 것이 잠긴 뭉치뿐입니다.
메신저마다 적용 범위가 다릅니다. 시그널은 모든 대화가 기본 E2EE이고, 왓츠앱도 기본 적용입니다. 카카오톡은 보통 채팅은 전송 중 암호화까지이고, E2EE는 비밀 채팅이라는 별도 모드로 제공합니다. 비밀 채팅이 따로 있는 이유가 바로 이 차이입니다.
그러면 왜 전부 E2EE로 하지 않을까요. 서버가 내용을 못 읽으면 회사가 해 주던 일들이 어려워지기 때문입니다. 새 폰에서 지난 대화 복원, 서버 검색, 대화방 멀티 디바이스 동기화 같은 편의 기능이 전부 “열쇠를 어떻게 안전하게 옮기느냐"는 어려운 문제로 바뀝니다. 비밀 채팅에서 일부 기능이 빠지는 것은 게으름이 아니라 구조의 대가입니다. 편의와 기밀성 사이의 거래인 셈입니다.
사용자가 가져갈 것 #
구조를 알고 나면 판단 기준이 생깁니다.
- 보통의 채팅은 이동 구간이 암호화되지만 서버에서는 열람 가능한 구조입니다. 일상 대화에는 충분하고, 그래서 편의 기능이 풍부합니다.
- 정말 민감한 대화(신분증 사진, 계좌 정보 같은)는 E2EE 모드를 쓰거나, 애초에 메신저로 보내지 않는 것이 맞습니다. 한 번 보낸 사진은 상대의 폰과 서버 보관함에 남습니다.
- 백업 설정도 같은 눈으로 봅니다. 대화 백업이 E2EE 없이 클라우드에 올라가면, 본 채팅이 잠겨 있어도 사본이 열려 있는 셈입니다. 백업의 암호화 옵션을 켜 두는 것이 좋습니다.
정리하면, 메시지는 직접 가지 않고 서버라는 우체국을 거치며, 1의 소멸은 읽음 영수증의 귀환입니다. 보통 채팅은 이동 구간만 봉투에 담기고, 종단간 암호화는 우체국조차 열 수 없는 편지를 만듭니다. 다음에 비밀 채팅 버튼을 볼 때, 그것이 무엇을 약속하는 버튼인지 정확히 알아볼 수 있기를 바랍니다.