카메라 없이 벽 너머를 본다? 9달러짜리 와이파이 투시경 'RuView' 아키텍처 딥다이브
개발자로 일하다 보면, 종종 기술의 발전이 참 얄궂다는 생각이 듭니다. 스마트 홈이나 오피스, 혹은 헬스케어 관련 IoT 프로젝트를 한 번이라도 리딩해 보신 분들이라면 다들 공감하실 텐데요. 공간 내 사람의 ‘존재’와 ‘미세한 움직임’을 정확히 감지하는 일은 생각보다 정말 까다롭습니다.
가장 만만하고 저렴한 PIR(적외선 적중) 센서를 화장실에 달아놓으면, 변기에 가만히 앉아 생각에 잠긴 사용자를 ‘부재중’으로 인식해 불을 냅다 꺼버리죠. 그렇다고 정밀도를 높이겠다며 카메라를 달자니? 개인정보 보호법(GDPR, HIPAA 등)은 물론이고, 사용자들의 극심한 거부감이라는 거대한 벽에 부딪힙니다. 라이다(LiDAR) 같은 고가의 센서 장비는 도입 단가부터 이미 기획안 통과를 좌절시키고요.
“사생활 침해 없이, 서버비 폭탄 없이, 저렴하게 공간을 인지할 수는 없을까?”
이 질문은 수년간 센서 업계와 엣지 컴퓨팅 진영의 오랜 딜레마였습니다. 그런데 최근 깃허브(GitHub)와 해커뉴스(Hacker News) 커뮤니티를 뜨겁게 달군 오픈소스 프로젝트 하나가 제 눈길을 사로잡았습니다. 카메라 렌즈 단 하나 없이, 오직 우리가 매일 숨 쉬듯 사용하는 ‘와이파이(WiFi) 전파’만으로 벽 너머 사람의 뼈대(Pose)와 심박수까지 추론해 낸다는 RuView입니다. 처음엔 “또 어디서 논문 하나 구현해 놓고 호들갑 떠는 AI 장난감이 나왔네” 싶었지만, 코드 베이스와 아키텍처를 뜯어보니 단순한 해프닝으로 넘길 수준이 아니더라고요. 오늘 커피 한 잔 하시면서, 이 녀석의 속내를 저와 함께 딥다이브 해보시죠.
TL;DR
RuView는 와이파이 채널 상태 정보(CSI)의 미세한 물리적 왜곡을 ESP32와 같은 저전력 엣지(Edge) 환경에서 실시간으로 분석해, 카메라 없이도 벽 너머 사람의 자세, 호흡, 심박수를 추적하는 오프라인 기반의 오픈소스 AI 인식 시스템입니다.
Deep Dive: Under the Hood (핵심 아키텍처 분석)
RuView가 그저 그런 대학원생들의 리서치 프로젝트와 궤를 달리하는 지점은 바로 ‘실용주의적 아키텍처’에 있습니다. 카네기멜론 대학교(CMU)의 ‘DensePose From WiFi’라는 걸출한 학술 연구에서 출발했지만, RuView는 이 무거운 로직을 실험실 밖으로 끌고 나와 단돈 9달러짜리 ESP32-S3 마이크로컨트롤러 위에서 오프라인으로 돌아가게 만들었거든요. 대체 어떻게 이 좁디좁은 하드웨어 자원에서 이게 가능할까요?
1. 카메라가 아닌 ‘전파의 일렁임’을 보다 (CSI Processing)
핵심은 와이파이의 채널 상태 정보(Channel State Information, CSI)를 활용하는 데 있습니다. 공유기에서 스마트폰으로 와이파이 신호가 날아갈 때, 전파는 직진만 하지 않습니다. 벽에 부딪히고, 가구에 반사되며, 사람의 몸에 흡수되거나 튕겨 나오죠. 사람이 숨을 쉴 때 가슴팍이 1~2cm 부풀어 오르는 미세한 움직임조차 이 전파의 진폭(Amplitude)과 위상(Phase)에 미세한 왜곡을 일으킵니다.
RuView는 ESP32-S3가 수집할 수 있는 56~192개의 서브캐리어(Subcarrier) 데이터를 프레임 단위로 수집합니다. 스마트폰 상단에 뜨는 일반적인 와이파이 안테나 칸수(RSSI)가 단순히 “신호가 세다/약하다”의 1차원적 정보만 준다면, CSI는 다중 경로 페이딩을 기록하여 공간 전체의 ‘물리적 토포그래피(Topography)’를 실시간 텐서(Tensor) 데이터로 뱉어내는 셈입니다.
2. 파이썬의 한계를 부순 Rust와 WASM의 치밀한 조합
초기 v1 버전은 파이썬(Python) 기반이었습니다. 당연히 무거웠죠. 하지만 최신 아키텍처를 보면 메인 런타임을 Rust로 전면 포팅했습니다. 여기서 정말 흥미로운 설계가 등장하는데, 무려 65개에 달하는 엣지 인텔리전스 모듈을 웹어셈블리(WebAssembly, WASM)로 컴파일하여 ESP32 위에서 직접 실행한다는 점입니다.
각 모듈은 5~30KB 수준의 극도로 경량화된 no_std Rust 바이너리(wasm32-unknown-unknown)로 빌드되어 WASM3 인터프리터를 통해 구동됩니다. 이 설계가 왜 대단할까요? 클라우드 서버에 방대한 텐서 데이터를 보낼 필요 없이(Zero Cloud Dependency) 센서 단에서 모든 신호 처리와 추론이 10밀리초(ms) 이내에 끝난다는 겁니다. 파이썬 버전 대비 무려 810배의 엔드투엔드 속도 향상을 이뤄냈죠. 외부 서버로 데이터를 보내지 않으니, 프라이버시 유출 가능성이 물리적인 아키텍처 단에서 원천 차단됩니다.
3. 시니어 개발자의 시선: 0.4.3.1 펌웨어 패치로 본 현실적인 고충
오픈소스를 분석할 때 가장 재밌는 건 깃허브 커밋 로그에 숨어있는 ‘개발자의 땀방울과 삽질’을 관찰하는 겁니다. 2026년 3월에 배포된 최신 ESP32-S3용 v0.4.3.1 펌웨어 패치 노트(#266)를 보면 아주 짠한(?) 버그 픽스가 하나 있습니다. 바로 ‘코어 1(Core 1) 워치독(Watchdog) 기아 상태(Starvation)’ 해결 건입니다.
RuView의 엣지 DSP(디지털 신호 처리) 태스크는 Biquad 필터링, Welford 알고리즘을 통한 실시간 통계 처리, 노이즈 캔슬링, 심박수(BPM) 추출 등 엄청난 실수 연산을 수행합니다. 이 연산이 너무 타이트하고 무거운 나머지, ESP32의 두 번째 코어에서 돌아가는 백그라운드 태스크(IDLE1)가 CPU 점유율을 전혀 할당받지 못했던 겁니다. 결국 ESP32의 안전장치인 워치독 타이머가 “어? 시스템 멈춘 거 아니야?”라며 5초마다 발동해 에러 로그를 뿜어내고 시스템을 불안정하게 만들었죠.
해결책은 눈물겹게도 단순했습니다. DSP 태스크가 프레임을 하나 처리할 때마다 vTaskDelay(1)을 호출해 RTOS에게 명시적으로 제어권을 1ms 양보(Yield)하게 만든 것이죠. 20Hz의 CSI 수집 환경에서 1ms의 지연은 생체 신호 추출에 거의 영향을 주지 않으면서도 시스템의 안정성을 극적으로 끌어올렸습니다. 이런 로우 레벨의 RTOS 스케줄링 이슈를 겪고 타협점을 찾아가는 과정을 보면, 이 프로젝트가 단순한 ‘AI 마케팅 껍데기’가 아니라 하드웨어의 극한까지 쥐어짜고 있는 진짜배기 엔지니어링이라는 걸 체감할 수 있습니다.
Hands-on / Pragmatic Use Cases (당장 실무에 어떻게 쓸까?)
기술적 경이로움은 잠시 내려두고, 기획자나 테크 리드 입장에서 ‘그래서 이걸 당장 우리 프로덕트에 어떻게 쓰는데?’를 고민해 볼 차례입니다.
- 프라이버시 중심의 시니어 헬스케어 (독거노인 모니터링): 기존에는 어르신들이 화장실이나 침실에서 겪는 낙상 사고를 감지하기 위해 사각지대가 많은 레이더 센서나, 인권 침해 소지가 다분한 카메라를 써야 했습니다. RuView는 방 안의 기존 와이파이 AP(혹은 9달러짜리 ESP32 추가 장착)만으로 벽 너머의 낙상이나 호흡 이상을 감지할 수 있습니다. 최신 펌웨어에서는 낙상 감지 임계값을 15.0 rad/s²로 튜닝하고 3프레임 디바운스(Debounce) 로직을 추가해 반려동물에 의한 오작동을 확 줄였더군요.
- 재난 구조 및 블라인드 룸(Blind Room) 파악: 화재나 재난 상황 시 연기로 인해 시야가 완전히 차단된 건물 내부를 상상해 보세요. 구조대원들이 진입하기 전, 밖에서 와이파이 센싱 망을 구축해 내부 생존자의 위치와 호흡 여부(BPM)를 파악하는 ‘투시 레이더’ 역할로 활용이 가능합니다.
Honest Review (진짜 장단점과 비판적 시각)
물론 테크 칼럼니스트로서 무작정 찬양만 할 수는 없습니다. 현업에 도입하려면 뼈아픈 트레이드오프(Trade-off)를 직시해야 합니다.
첫째, 하드웨어 종속성의 늪입니다. 일반적인 맥북이나 스마트폰의 와이파이 칩셋은 보안 및 벤더 정책상 CSI 로우 데이터를 운영체제 레벨로 절대 노출하지 않습니다. 즉, “어? 내 랩탑 와이파이로도 당장 클론해서 해볼 수 있나?”라는 기대는 접으셔야 합니다. ESP32-S3 보드나 특정 리서치용 네트워크 인터페이스 카드(NIC)가 강제된다는 점은 PoC(개념 증명)를 시작하려는 팀의 초기 진입 장벽을 높입니다.
둘째, “Vibe-coded AI Slop” 이라는 매서운 비판입니다. 최근 해커뉴스나 X(구 트위터)의 시니컬한 시니어 개발자들은 이 레포가 당장 프로덕션에 쓸 수 있는 플러그앤플레이(Plug-and-play) 시스템이라기보다, 개념 증명에 가까운 ‘바이브 코딩(Vibe-coded, 분위기만 낸)’ 코드 덩어리라고 강하게 비판하기도 합니다. 실제로 환경 노이즈(전자레인지, 옆집의 강력한 공유기 간섭, 금속성 가구의 이동 등)가 심한 실내에서 이 모델이 얼마나 강건하게(Robust) 동작할지는 미지수입니다. 공간의 RF 시그니처를 초기 학습하는 캘리브레이션 시간이 필요하며, 방 안의 큰 가구 배치가 바뀔 때마다 파동의 패턴이 달라져 재학습이 필요할 수 있습니다.
셋째, 살인적인 러닝 커브입니다. 웹 프론트/백엔드에 익숙한 일반적인 소프트웨어 엔지니어가 이 코드를 포크(Fork)해서 커스텀하려면 no_std Rust, WASM 런타임 최적화, 그리고 결정적으로 물리적인 무선 신호 처리(DSP) 지식까지 동시에 요구됩니다. 팀 내에 임베디드와 AI, 신호 처리를 모두 아우르는 풀스택 엔지니어가 없다면 트러블슈팅 지옥에 빠질 수 있습니다.
Closing Thoughts (마무리하며)
영화 <배트맨: 다크나이트>의 명장면이 떠오릅니다. 웨인 엔터프라이즈의 루시우스 폭스는 도시 전체의 휴대폰 마이크 신호를 엮어 실시간 소나(Sonar)를 구축한 브루스 웨인에게 “이건 한 사람이 갖기엔 너무 과도한 권력”이라며, 일이 끝나면 이 감시 시스템을 파괴하겠다고 선언하죠. RuView가 입증한 ‘와이파이를 이용한 투시’ 기술은 마치 그 영화적 상상력이 2026년의 현실로 강림한 듯한 서늘함을 줍니다.
하지만 폐쇄적인 소나 시스템과 달리 RuView는 투명하게 공개된 오픈소스입니다. 모든 WASM 모듈의 동작 원리, 노이즈 필터, 모델 가중치 로직이 깃허브에 까발려져 있어 누구나 감사(Audit)할 수 있죠. 글로벌 무선 센서 시장이 수백억 달러 규모로 폭발적으로 성장하고, IEEE 802.11bf(와이파이 센싱 표준) 제정이 가시화된 지금, 이 거대한 공간 인식 인프라는 결코 특정 거대 테크 기업의 불투명한 독점물이 되어서는 안 됩니다.
카메라 없는 감시 사회를 향한 9달러짜리 마이크로컨트롤러의 발칙한 도발. 완벽한 구원투수라고 부르기엔 아직 거칠고 손볼 곳이 많지만, RuView가 쏘아 올린 “공간에 존재하는 전파를 시각화한다”는 패러다임 전환은 기술의 이면을 파고드는 우리 개발자들의 가슴을 뛰게 하기 충분합니다. 이번 주말에는 서랍 속에 잠자고 있는 먼지 쌓인 ESP32 보드를 꺼내어, 우리 집 와이파이가 허공에 그리고 있는 보이지 않는 파도를 직접 디버깅해 보는 건 어떨까요?
References
- https://github.com/ruvnet/RuView
- https://cybernews.com/tech/wifi-densepose-ruview-see-through-walls/
- https://medium.com/@sagekhan/ruview-the-open-source-system-that-sees-through-walls-with-wifi-lucius-fox-would-resign-again
- https://newreleases.io/project/github/ruvnet/RuView/release/v0.4.3.1-esp32
