금서 도서관: 스마트 전구를 디지털 데드드롭으로 변환하기
개요
금서 도서관 프로젝트는 표준 WiFi 스마트 전구를 "사이버펑크 디지털 데드드롭"—오픈 WiFi 액세스 포인트이자 금지되거나 논란이 된 도서의 디지털 사본을 호스팅하는 웹 서버—로 변환합니다. 저렴한 IoT 장치를 재활용함으로써, 전구가 전원이 켜져 있는 한 인터넷 전반의 가용 여부와 관계없이 접근 가능한 은밀하고 지역적인 정보 아카이브를 만들 수 있습니다.
하드웨어 선택 및 분해
장치 구조
이 프로젝트는 ESP32-C3 칩과 4MB 플래시 메모리를 탑재한 WiFi 전구를 사용합니다. 하드웨어는 로컬 IoT 제어를 위한 오픈소스 펌웨어인 Tasmota와의 호환성을 기준으로 선택되었으며, 이는 LED 제어를 위한 GPIO 핀아웃을 이해하는 출발점을 제공했습니다:
- Red: GPIO6
- Green: GPIO7
- Blue: GPIO5
- Cool White: GPIO3
- Warm White: GPIO4
물리적 수정
외부 저장소(예: microSD 카드)를 추가할 가능성을 탐색하기 위해 장치를 완전히 분해했습니다. 과정은 플라스틱 전구 하우징을 제거하고 LED가 장착된 보조 보드를 분리하는 작업을 포함했습니다. 메인보드는 고무 같은 포팅 컴파운드에 둘러싸여 있었으며, 이를 수동으로 제거해 ESP32-C3 핀을 드러내야 했습니다.
저자는 직렬 프로그래밍을 위한 와이어(VCC, GND, TX, RX, 그리고 다운로드 모드용 IO9)를 성공적으로 납땜했지만, microSD 카드 리더를 추가하는 것은 실용적이지 않았습니다. 전구 하우징의 물리적 제약으로 인해 납땜이 신뢰성을 확보하기 어려웠고, LED 컨트롤러 핀은 출력 전용으로 설계돼 있어 SD 카드 리더용 입력으로 재사용할 수 없었습니다.
펌웨어 엔지니어링 및 저장소 최적화
Arduino에서 ESP-IDF로 전환
초기 개발은 웹 서버와 "Hello World" 테스트를 빠르게 프로토타이핑하기 위해 Arduino IDE를 사용해 시작되었습니다. 그러나 프로젝트는 책을 위한 저장소를 늘리기 위해 ESP32 파티션 테이블을 수정해야 했으며, 이는 Arduino 프레임워크가 안전상의 이유로 제한합니다.
이 제한을 우회하기 위해 프로젝트는 ESP-IDF (Espressif IoT Development Framework) 로 마이그레이션했습니다. menuconfig에서 SPI_FLASH_DANGEROUS_WRITE_ALLOWED 를 활성화함으로써 저자는 플래시 메모리의 오프셋 0x8000 에 있는 파티션 테이블을 덮어쓸 수 있게 되었습니다.
파티션 테이블 수정
도서관에 사용할 수 있는 공간을 최대화하기 위해 저자는 메인 애플리케이션 파티션(app0)을 축소하고 SPIFFS(LittleFS) 파티션을 확장했습니다. 결과 구성은 웹 서버 파일과 전자책을 위해 2MB 의 데이터를 할당했으며, 이는 원래 320KB 에 비해 용량을 크게 늘린 것입니다.
맞춤형 Safeboot 구현
공개 데드드롭에서 보안 위험을 최소화하면서 OTA(Over-The-Air) 업데이트가 가능하도록 맞춤형 safeboot 펌웨어를 개발했습니다. 표준 Tasmota safeboot은 WiFi 자격 증명을 NVS(비휘발성 저장소) 파티션에 평문으로 저장하는데, 이는 공개 환경에서 위험합니다. 맞춤형 솔루션은 배포 시 NVS 파티션을 삭제하고 최소한의 비-Arduino 펌웨어를 사용해 OTA 업데이트용 기본 웹 서버만 호스팅하도록 하여, 주요 펌웨어를 교체해도 제작자의 자격 증명이 노출되지 않게 합니다.
웹 애플리케이션 및 사용자 경험
캡티브 포털 통합
사용자가 오픈 WiFi 네트워크에 연결했을 때 도서관을 발견할 수 있도록 캡티브 포털을 구현했습니다. 현대의 HTTPS 트래픽이 단순 HTTP 가로채기를 방해하기 때문에 시스템은 포털을 트리거하기 위해 두 가지 주요 방법을 사용합니다:
- DNS 리다이렉션: DNS 서버가 모든 요청에 대해 장치 자체 IP 주소를 반환합니다.
- 특정 요청 처리: 서버가 다양한 운영체제의 알려진 "call home" 요청(예: Android의
/generate_204, Apple의/hotspot-detect.html)을 가로채어 로컬 도서관 URL로 리다이렉트합니다.
관리 제어
/admin 에 위치한 비밀번호 보호된 관리자 패널을 통해 운영자는 AnalogWrite() 로 LED 색온도를 조정할 수 있습니다. 이를 통해 전구가 공공 장소의 기존 조명에 자연스럽게 섞여 탐지를 피할 수 있습니다.
기술적 제약 및 향후 방향
저장소 제한
총 4MB 플래시 용량으로 인해 장치는 소수의 전자책만 호스팅할 수 있습니다(보통 EPUB당 ~350KB). 저자는 이 제한이 프로젝트를 일반 도서관이 아닌, 제작자의 특정 가치와 선택을 반영한 큐레이션된 컬렉션으로 전환시킨다고 언급합니다.
제안된 개선 사항
- 메시 네트워킹: 분산 해시 테이블(DHT) 등을 활용한 메시 네트워크 구현을 통해 여러 전구가 저장소를 공유하게 하면, 어느 하나의 노드에 연결된 사용자도 전체 메시에 있는 모든 책에 접근할 수 있습니다.
- 세밀한 색상 제어: 관리 패널에 RGB 슬라이더를 추가해 환경에 더 잘 어울리도록 조정합니다.
커뮤니티 인사이트 및 반론
프로젝트에 대한 논의는 여러 기술적·철학적 고려사항을 강조했습니다:
- 탐지 위험: 일부 사용자는 전구가 시각적으로 은밀하지만 WiFi 스캔이나 전원 사이클링을 통해 쉽게 탐지될 수 있다고 지적했습니다.
- OS 동작: Android 기기는 인터넷 접속이 없는 WiFi 네트워크에 자동으로 연결을 끊는 경우가 많아 자연스러운 발견을 방해할 수 있습니다.
- "금서" 정의: 금서라는 용어에 대한 논쟁이 있었으며, 일부는 학교 도서관에서 제거된 책이 법적 의미에서 "금서"가 아니며 여전히 구매 및 성인 소비가 가능하다고 주장했습니다.
- 유사 프로젝트: 이 프로젝트는 파일 공유와 포럼을 위한 오프라인 WiFi 액세스 포인트 기술을 사용한 오래된 PirateBox와 비교되었습니다.