![[심층분석] 인터넷이 끊겨도 채팅이 된다고요? 블루투스 메시 메신저 bitchat 완전 해부](/newsimg/aeqoiVWlGiwoEK6G.png)
계정도, 서버도, 전화번호도 없는 메신저가 나왔어요
혹시 2022년 카카오 데이터센터 화재 때 기억나세요? 카카오톡이 멈추자 온 나라가 반나절 동안 연락 두절 상태가 됐잖아요. 그때 다들 뼈저리게 느꼈을 거예요. 우리가 쓰는 메신저가 사실은 거대한 중앙 서버 하나에 목숨을 걸고 있다는 걸요.
오늘 소개할 bitchat은 바로 그 지점을 정면으로 공격하는 프로젝트예요. 트위터 공동 창업자 잭 도시가 주말 사이드 프로젝트로 시작해서 공개한 오픈소스 메신저인데요, 핵심 컨셉이 정말 과감해요. 계정 없음, 전화번호 없음, 중앙 서버 없음. 심지어 인터넷이 아예 없어도 근처 사람들과 채팅이 됩니다. 어떻게요? 스마트폰에 이미 들어있는 블루투스로요.
저장소 설명에 'IRC vibes'라고 적혀 있는데, IRC가 뭐냐면 1990년대부터 개발자들이 쓰던 텍스트 기반 채팅 프로토콜이에요. 슬랙의 조상님 같은 존재죠. bitchat은 그 시절의 단순함과 자유로움을, 최신 암호화 기술과 P2P(서버 없이 기기끼리 직접 통신하는 방식) 위에 다시 구현하겠다는 거예요.
기술 분석: 스마트폰들이 서로 릴레이 달리기를 해요
블루투스 '메시' 네트워크가 뭐냐면
보통 블루투스는 이어폰 연결처럼 1:1로만 쓰잖아요. 그런데 메시(mesh) 네트워크는 발상이 달라요. 쉽게 비유하면, 운동장에서 하는 '귓속말 전달 게임'이에요. 제가 30m 밖의 친구에게 직접 소리칠 수는 없지만, 중간에 서 있는 사람들이 한 명씩 말을 전달해주면 결국 닿거든요.
bitchat에서는 앱을 켠 모든 스마트폰이 이 '중간 전달자' 역할을 자동으로 해요. 기술적으로는 각 기기가 BLE(저전력 블루투스)의 송신자(peripheral)와 수신자(central) 역할을 동시에 수행하면서, 받은 메시지를 다시 주변에 뿌려주는 멀티홉 릴레이 구조예요. 메시지에는 TTL(Time To Live, 몇 번까지 전달될지 정하는 카운터)이 붙어 있어서, 홉을 거칠 때마다 1씩 줄어들다가 0이 되면 소멸해요. 무한 루프로 네트워크가 마비되는 걸 막는 장치죠.
사람이 많이 모인 콘서트장이나 시위 현장을 상상해보세요. 블루투스 한 번의 도달 거리는 10~30m 남짓이지만, 그 안에 bitchat 사용자가 촘촘히 있다면 메시지는 사람들을 징검다리 삼아 수백 미터를 건너갈 수 있어요. 인터넷 기지국이 마비돼도요.
듀얼 트랜스포트: 가까우면 블루투스, 멀면 Nostr
그런데 블루투스만으로는 옆 동네 친구에게 메시지를 못 보내죠. 그래서 bitchat은 듀얼 트랜스포트(이중 전송 경로) 아키텍처를 채택했어요.
- 근거리: 블루투스 메시로 직접 전달
- 원거리: Nostr 프로토콜로 인터넷을 통해 전달
- FireChat: 2014년 홍콩 우산혁명 때 시위대가 대거 사용하면서 유명해졌어요. 하지만 폐쇄형 회사 서비스였고, 회사가 방향을 틀자 2018년경 그냥 사라졌어요. 중앙화된 '탈중앙 앱'의 역설이죠.
- Briar: Tor와 블루투스를 결합한 안드로이드용 오픈소스 메신저예요. 보안 철학은 훌륭한데, UX가 투박하고 iOS 지원이 없어서 대중화에는 실패했어요.
- Meshtastic: LoRa라는 장거리 무선 기술로 수 km까지 통신하지만, 별도 하드웨어를 사야 해요. 진입장벽이 있죠.
Nostr가 뭐냐면, 특정 회사가 소유하지 않는 분산형 메시지 릴레이 프로토콜이에요. 트위터 같은 중앙 서비스 대신, 전 세계에 흩어진 '릴레이 서버'들이 메시지를 중계해주는 구조인데, 릴레이는 누구나 운영할 수 있어서 하나가 사라져도 네트워크 전체는 멀쩡해요. bitchat은 상대가 블루투스 범위 안에 있으면 메시로, 없으면 Nostr로 자동 전환하는 지능형 라우팅을 해요. 사용자는 그냥 메시지를 보낼 뿐이고, 경로 선택은 앱이 알아서 하는 거죠.
재미있는 기능이 하나 더 있는데, 지오해시(geohash) 기반 위치 채널이에요. 지오해시는 지구를 격자로 잘라 각 구역에 짧은 문자열 주소를 붙이는 방식인데요, 이걸로 '지금 내가 있는 동네' 채팅방이 자동으로 만들어져요. 계정 없이도 '강남역 근처 채널' 같은 게 생기는 셈이죠.
암호화: Noise Protocol
개인 메시지는 Noise Protocol로 종단간 암호화(보내는 사람과 받는 사람만 내용을 볼 수 있게 잠그는 것)돼요. Noise는 WireGuard 같은 검증된 프로젝트들이 쓰는 암호화 핸드셰이크 프레임워크인데, 저장소에 BRING_THE_NOISE.md라는 문서가 따로 있을 만큼 공들인 부분이에요. 초기 버전은 자체 암호화 구조 때문에 보안 연구자들에게 신원 위장 가능성 등을 지적받았는데, 이후 검증된 Noise 기반으로 갈아탄 거죠. 오픈소스가 공개 검증을 통해 빠르게 개선되는 교과서적 사례예요.
다만 README가 스스로 밝히는 한계도 있어요. '계정 없음'이라고 해도 메시 안에서는 신원 키에서 파생된 기기별 식별자가 쓰이기 때문에, 근처에서 전파를 감청하면 '누가 어디 있는지' 수준의 메타데이터는 관찰될 수 있다는 거예요. 익명성과 무계정은 다른 개념이라는 점, 기억해둘 만해요.
업계 맥락: FireChat의 실패에서 배운 것들
사실 '오프라인 메시 채팅'이 처음은 아니에요. 계보를 짚어보면 bitchat의 포지션이 선명해져요.
한국 개발자에게 주는 시사점
첫째, 재난 대비 통신이라는 실전 시나리오요. 2018년 KT 아현지사 화재 때 서울 서북부의 통신·결제가 통째로 멈췄던 걸 떠올려보세요. 지진이나 대형 화재로 기지국이 마비되는 상황에서, 메시 네트워크는 '최후의 통신 수단'이 될 수 있어요. 인구 밀도가 세계 최상위권인 한국 도시는 사실 메시 네트워크가 가장 잘 작동할 수 있는 환경이거든요. 홉을 이어줄 기기가 사방에 있으니까요.
둘째, BLE 학습 자료로서의 가치예요. iOS 개발자라면 CoreBluetooth를 제대로 쓰는 실전 코드를 찾기가 의외로 어려운데, bitchat은 광고(advertising), 스캔, 백그라운드 동작, 연결 관리까지 프로덕션 수준으로 구현된 Swift 코드베이스예요. 퍼블릭 도메인이라 코드를 뜯어서 사내 프로젝트에 갖다 써도 법적 부담이 없고요. 학습 로드맵을 제안하자면 이렇게 가보세요.
1. BLE 기본 개념(GATT, advertising) 문서 읽기
2. bitchat 저장소의 WHITEPAPER.md로 전체 설계 파악하기
3. 메시 릴레이와 TTL 처리 코드 따라 읽기
4. Noise Protocol 핸드셰이크 부분 분석하기
셋째, 도입 전 냉정한 체크포인트도 있어요. 메시 네트워크는 사용자 밀도가 곧 성능이에요. 주변에 사용자가 없으면 그냥 혼잣말 앱이 돼요. BLE 상시 동작에 따른 배터리 소모, 그리고 아직 대규모 보안 감사를 완주하지 않았다는 점도 감안해야 해요. '재밌는 실험이자 훌륭한 교재, 그러나 기밀 통신은 아직 신중히'가 현재 시점의 정직한 평가예요.
마무리: '서버 없는 소프트웨어'라는 흐름
bitchat이 당장 카카오톡을 대체할 일은 없을 거예요. 하지만 이 프로젝트가 던지는 질문은 무거워요. 로컬 퍼스트(내 기기가 먼저, 서버는 보조) 소프트웨어 흐름과 맞물려서, '통신 인프라가 없어도 동작하는 앱'이라는 설계 사상이 점점 힘을 얻고 있거든요. 주말에 만든 사이드 프로젝트가 검증된 암호화와 이중 전송 아키텍처를 갖춘 앱으로 성장하는 속도 자체도, AI 시대의 개발 생산성을 보여주는 흥미로운 단면이고요.
여러분은 어떻게 보세요? 카카오톡이 24시간 멈춘다면, 여러분의 폰에는 대안이 있나요? 그리고 여러분이 만드는 서비스는 서버가 죽었을 때 무엇을 할 수 있나요? 댓글로 생각을 나눠주세요.
🔗 출처: GitHub