TECH 으로 돌아가기
TECH GITHUB 오늘 11분 읽기 34 READS

[심층분석] 인터넷이 끊겨도 채팅이 된다고요? 블루투스 메시 메신저 bitchat 완전 해부

[심층분석] 인터넷이 끊겨도 채팅이 된다고요? 블루투스 메시 메신저 bitchat 완전 해부
SOURCE IMAGE · GITHUB
[심층분석] 인터넷이 끊겨도 채팅이 된다고요? 블루투스 메시 메신저 bitchat 완전 해부

계정도, 서버도, 전화번호도 없는 메신저가 나왔어요

혹시 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은 듀얼 트랜스포트(이중 전송 경로) 아키텍처를 채택했어요.

bitchat의 차별점은 세 가지예요. 첫째, 이미 모두가 가진 스마트폰만으로 동작해요. 둘째, 오프라인(블루투스)과 온라인(Nostr)을 하나의 앱에서 잇는 하이브리드예요. 셋째, 라이선스가 아예 퍼블릭 도메인이에요. MIT나 아파치 라이선스보다 더 나아가서 저작권 자체를 포기한 건데, FireChat처럼 '회사가 죽으면 기술도 죽는' 일을 원천 차단하겠다는 의지로 읽혀요. 실제로 README에는 저장소가 삭제 요구(takedown)를 받아온 이력과, 릴리스별 해시 목록으로 빌드를 직접 검증하는 방법까지 안내돼 있어요. 검열 저항성을 문서 차원에서 설계한 거죠.

한국 개발자에게 주는 시사점

첫째, 재난 대비 통신이라는 실전 시나리오요. 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

SOURCE · GITHUB
원문 전체 보기 → https://github.com/permissionlesstech/bitchat
SHARE
처리 중...