
라즈베리파이 없이 집 전체 광고를 막을 수 있다면
집에서 Pi-hole을 돌려보신 분들 계실 거예요. Pi-hole은 네트워크 전체에 광고 차단을 걸어주는 프로그램인데, 보통 라즈베리파이 같은 작은 리눅스 컴퓨터에 설치해서 쓰죠. 그런데 GitHub에 올라온 esp32-c3-adblock은 같은 일을 ESP32-C3라는 손톱만 한 마이크로컨트롤러에서 해보자는 프로젝트예요. 리눅스도 SD카드도 없이요.
ESP32-C3가 뭐냐면, Espressif가 만든 Wi-Fi 내장 칩이에요. RISC-V 기반 싱글코어 CPU(최대 160MHz)에 SRAM이 400KB 정도 들어 있고, 개발 보드는 몇 천 원이면 살 수 있어요. 라즈베리파이가 '작은 컴퓨터'라면 ESP32-C3는 '똑똑한 전자 부품'에 더 가까워요. 메모리가 기가바이트도 메가바이트도 아닌 킬로바이트 단위라는 점, 이게 핵심이에요.
DNS 광고 차단, 원리부터 짚고 가요
브라우저가 ads.example.com에 접속하려면 먼저 DNS 서버에 “이 도메인 IP가 뭐야?”라고 물어봐야 해요. DNS는 인터넷의 전화번호부 같은 거거든요. DNS 기반 광고 차단기는 이 전화번호부 역할을 대신 맡아서, 광고나 추적 도메인을 물어보면 0.0.0.0 같은 '없는 번호'를 알려줘요. 광고 서버에 아예 연결이 안 되니 광고가 안 뜨는 거죠. 정상 도메인은 1.1.1.1 같은 상위 DNS에 대신 물어보고 받은 답을 그대로 넘겨줘요. 이걸 포워딩이라고 해요.
공유기 DHCP 설정에서 DNS 서버 주소를 이 장치 IP로 바꿔두면, 집 안의 스마트폰·TV·노트북이 전부 자동으로 이 필터를 거치게 돼요. 기기마다 앱을 깔 필요가 없다는 게 제일 큰 장점이에요.
400KB에 차단 목록을 어떻게 넣을까
이런 프로젝트는 여기서부터가 진짜 재미있어요. 널리 쓰이는 차단 목록에는 도메인이 수만에서 수십만 개 들어 있어요. 도메인 하나를 평균 20바이트로만 잡아도 10만 개면 2MB인데, RAM은 400KB밖에 없으니 통째로 올리는 건 불가능하죠.
그래서 임베디드 환경에서는 보통 이런 방법들을 놓고 고민하게 돼요.
- 해시로 압축하기: 도메인 문자열 대신 32~64비트 해시값만 저장하면 항목 하나가 4~8바이트로 줄어요. 정렬해두고 이진 탐색하면 조회도 빠르고요.
- 블룸 필터: “확실히 없음” 아니면 “아마 있음”으로만 답하는 확률적 자료구조예요. 아주 적은 메모리로 많은 도메인을 담을 수 있는 대신, 가끔 정상 도메인을 광고로 잘못 판단(false positive)할 수 있어요.
- 플래시 활용하기: 보드에 붙은 몇 MB짜리 플래시 메모리에 목록을 두고, RAM은 조회와 네트워크 처리에만 쓰는 방식이에요.
Pi-hole, AdGuard Home과 비교하면
Pi-hole이나 AdGuard Home은 웹 대시보드, 쿼리 로그, 기기별 통계, 암호화 DNS 지원까지 기능이 풍부해요. 대신 늘 켜둔 리눅스 장치가 필요하고, OS 업데이트나 SD카드 손상 같은 관리 부담이 따라오죠. ESP32 방식은 기능은 단출하지만 USB 충전기 하나로 1W도 안 되는 전력으로 돌아가고, 관리할 OS 자체가 없어요. 기능도 최소, 관리 부담도 최소인 셈이에요.
알고 써야 할 한계
DNS 차단이 만능은 아니에요. 첫째, 유튜브처럼 광고와 본 영상을 같은 도메인에서 보내주는 서비스는 못 막아요. 둘째, 브라우저나 앱이 DoH(DNS over HTTPS)로 자기만의 DNS를 쓰면 이 장치를 그냥 건너뛰어요. 일부 스마트 TV나 IoT 기기는 8.8.8.8을 코드에 아예 박아두기도 하고요. 셋째, 단일 장애점이 돼요. 이 작은 보드가 멈추면 집 전체 인터넷이 '끊긴 것처럼' 보이거든요. 보조 DNS를 설정해두면 안전하긴 한데, 그러면 기기들이 보조 DNS로 새면서 차단이 일부 무력화되는 딜레마가 생겨요.
한국 개발자에게 주는 시사점
국내 사이트 광고까지 잡고 싶다면 List-KR 같은 한국 필터 목록을 참고할 수 있어요. 다만 이런 목록은 주로 브라우저 확장용 문법으로 되어 있어서, DNS 차단기에 쓰려면 도메인 단위 규칙만 추려내는 변환 작업이 필요해요.
무엇보다 이 프로젝트는 임베디드 입문 과제로 정말 좋아요. UDP 소켓으로 DNS 패킷을 받아서 헤더와 질의 섹션을 바이트 단위로 파싱하고, 응답을 직접 조립하고, 메모리 제약 안에서 자료구조를 골라보는 경험은 웹 개발만 해온 분들에게 신선한 자극이 될 거예요. 보드 하나 사서 주말에 해보기 딱 좋은 규모이기도 하고요.
마무리
한 줄 정리: 몇 천 원짜리 칩 하나로 집 전체에 DNS 광고 차단을 걸 수 있어요. 다만 메모리 제약과 DNS 차단의 근본적인 한계는 알고 쓰는 게 좋아요.
여러분은 집에서 광고 차단을 어떻게 하고 계세요? 라즈베리파이 Pi-hole, 공유기 내장 기능, 브라우저 확장… 이런 초소형 장치로 갈아탈 생각이 있으신가요?
🔗 출처: Hacker News