# 8비트 마이크로컨트롤러에서 웹사이트 호스팅하기

> Clean Markdown view of GeekNews topic #29636. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=29636](https://news.hada.io/topic?id=29636)
- GeekNews Markdown: [https://news.hada.io/topic/29636.md](https://news.hada.io/topic/29636.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-05-19T08:36:29+09:00
- Updated: 2026-05-19T08:36:29+09:00
- Original source: [maurycyz.com](https://maurycyz.com/projects/mcusite/)
- Points: 1
- Comments: 1

## Topic Body

- **AVR64DD32** 8비트 MCU만으로 웹사이트를 호스팅했으며, 24MHz CPU·8KB RAM·64KB Flash의 작은 환경에서 동작함
- 직접 **Ethernet** 신호를 만들기에는 10BASE-T도 너무 빨라, Linux가 지원하는 SLIP으로 USB-Serial 링크를 네트워크 인터페이스처럼 사용함
- **SLIP**은 패킷을 `0xC0`으로 감싸고 특수 바이트를 이스케이프하는 단순한 방식이라 MCU와 현대 Linux 연결에 적합함
- IP는 단편화 비활성화 덕분에 단순해졌지만, **TCP 구현**은 연결 상태·재전송·예외 처리가 필요해 며칠이 걸렸고 버그도 남아 있음
- 외부 접속은 VPS·WireGuard·프록시로 `/mcu` 요청만 전달하는 우회 구조이며, 공개 IPv4 비용과 **IPv6 부재**가 핵심 제약으로 드러남

---

### 8비트 AVR로 웹사이트를 호스팅한 구성
- **AVR64DD32**는 Arduino로 알려진 Atmega328과 비슷한 8비트 AVR 계열 MCU이며, 같은 메모리 기준으로 더 저렴하고 단일 프로그래밍 핀과 더 나은 주변장치를 제공함
  - 최대 **24MHz** 단일 8비트 AVR 코어
  - 8KB 정적 RAM, 64KB Flash, 256바이트 EEPROM
  - 1.8~5.5V 전압 범위, $1~$2 가격대
- MCU만으로 인터넷에 직접 연결하려면 **Ethernet** 신호를 만들어야 하지만, 가장 느린 10BASE-T도 이 환경에는 너무 빠름
  - 10BASE-T는 10Mbit/s로 동작하고, Manchester 인코딩 때문에 실제 선로에서는 20Mbit가 됨
  - AVR64DD32의 CPU는 24MHz까지 가능하지만 주변장치와 IO 핀은 12MHz 클록이 최대라 직접 신호 생성이 어려움
  - 전용 Ethernet 칩을 쓰는 방법이 정석이지만, 프로젝트 완성을 위해 몇 주 기다려야 했음
- 대안으로 **SLIP(Serial Line Internet Protocol, RFC 1055)** 을 사용해 직렬 링크 위에 네트워크를 올림
  - 패킷 앞뒤를 `0xC0` 바이트로 감쌈
  - 패킷 안의 `0xC0`은 `0xDB 0xDC`로, 기존 `0xDB`는 `0xDB 0xDD`로 바꿔 모호성을 피함
  - 과거 다이얼업 모뎀이 전화선 위에 직렬 링크를 만들고 컴퓨터가 그 위에서 네트워킹을 처리하던 방식과 이어짐
  - 현대 Linux도 SLIP을 지원해 USB-Serial 어댑터를 네트워크 인터페이스로 만들 수 있음
  - 사용 예시는 `stty -F /dev/ttyUSB0 115200 raw cs8`, `slattach -m -F -L -p slip /dev/ttyUSB0` 형태임
- MCU 쪽 하드웨어는 단순하며, 외부 부품 없이도 동작함
  - [www.c](https://maurycyz.com/projects/mcusite/www.c): 소스 코드
  - [www.elf](https://maurycyz.com/projects/mcusite/www.elf): 미리 빌드된 바이너리
  - LED와 전원 역연결 방지용 다이오드를 추가함
  - 소비 전력이 몇 mW 수준이라 USB-Serial 어댑터의 5V 레일만으로 서버 구동이 가능함

### 프로토콜 구현과 공개 접속 처리
- **IP 구현**은 현대 환경의 제약 덕분에 단순해짐
  - 웹페이지가 사용자 컴퓨터에 도달하려면 패킷이 여러 네트워크를 지나야 하며, 각 패킷에는 출발지와 목적지 주소 등을 담은 40바이트 IP 헤더가 필요함
  - 예전 IP는 패킷 단편화 같은 기능 때문에 올바르게 처리하려면 많은 메모리가 필요했음
  - 현대 운영체제는 단편화를 비활성화하고, IPv6는 단편화를 제거했기 때문에 직접 처리하지 않아도 됨
  - 받은 패킷의 출발지와 목적지를 바꾸고 TTL 카운터를 재설정하면 응답 헤더를 만들 수 있음
- **TCP 구현**은 연결 상태 추적, 손실 패킷 재전송, 여러 예외 상황 처리가 필요해 훨씬 어려움
  - 커스텀 TCP 구현이 충분히 동작하기까지 며칠이 걸렸고, 아직 몇 가지 버그가 남아 있음
  - HTTP는 별도로 구현하지 않고 서버가 항상 하드코딩된 “응답”을 클라이언트에 보냄
  - URL이 하나뿐인 사이트라면 이 방식으로 충분히 동작함
  - 로딩 과정은 [Video 3](https://maurycyz.com/projects/mcusite/loading.mp4)에서 볼 수 있음
- 외부 접속에는 **공개 라우팅 가능한 IPv4 주소**가 필요하지만, 비용과 집 인터넷 연결 품질이 걸림돌이 됨
  - 공개 라우팅 가능한 주소가 있는 머신은 Helsinki 근처 데이터센터의 VPS에 있음
  - Linux의 WireGuard로 인터넷 위에 가상 네트워크 링크를 만들고, 한쪽이 CGNAT 뒤에 있어도 동작하게 함
  - Linux 라우터 박스가 VPS에 연결되어 더 적절한 인터넷 연결을 얻는 구조가 됨
- MCU에는 여전히 자체 공개 IP가 없기 때문에 VPS 주소의 모든 요청을 넘기면 기존 웹사이트가 깨짐
  - 대신 서버가 `/mcu` 아래 요청만 로컬 주소 블록을 사용해 MCU 서버로 프록시하도록 구성함
  - 방문자가 MCU의 TCP/IP 스택에 직접 연결하는 구조는 아니지만, [Vape Server](http://ewaste.fka.wtf/)와 같은 방식임
  - SYN 패킷으로 망가뜨리기는 약간 더 어려워지지만, 사실상 다이얼업에 가까운 연결 위의 서버라 DDoS에는 취약함
- **IPv6 부재**가 전체 우회 구성의 근본 원인으로 남음
  - IPv6는 30년 동안 존재했지만, 여전히 대부분의 사람이 접근하지 못하는 상태임
  - [/mcu](https://maurycyz.com/mcu): MCU에서 호스팅되는 페이지
  - [http://ewaste.fka.wtf/](http://ewaste.fka.wtf/): 폐기물에서 꺼낸 32비트 MCU로 호스팅되는 Vape Server
  - [https://lcamtuf.substack.com/p/psa-if-youre-a-fan-of-atmega-try](https://lcamtuf.substack.com/p/psa-if-youre-a-fan-of-atmega-try): AVR Dx 라인에 대한 lcamtuf 글

## Comments



### Comment 57750

- Author: neo
- Created: 2026-05-19T08:36:29+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=48165295) 
- 25년도 더 전에 **가장 작은 웹 서버**를 만드는 과시성 경쟁이 있었음: [https://web.archive.org/web/20000815063022/http://www-ccs.cs...](<https://web.archive.org/web/20000815063022/http://www-ccs.cs.umass.edu/~shri/iPic.html>)  
  ACE1101 마이크로컨트롤러를 쓴 사람이 “우승”했는데, 원문 기사는 못 찾겠고 이런 것도 있음: [https://conceptlab.com/fly/](<https://conceptlab.com/fly/>)  
  파리 위의 웹 서버였음
  - **ACE1101 버전**을 내가 만들었고, 미리 프로그래밍한 칩을 Saskatoon의 아티스트에게 우편으로 보냈음. Archive.org에 원래 설명이 남아 있음: [https://web.archive.org/web/20020605032321/http://d116.com/a...](<https://web.archive.org/web/20020605032321/http://d116.com/ace/index.html>)  
    코드를 줄여 넣는 과정이 정말 재미있었고, ping을 없애니 비트뱅잉 I2C와 EEPROM으로의 UDP 업로드를 넣을 공간이 생겼는데도 여전히 1024바이트 미만이었음
  - 그 작은 웹 서버를 며칠 전에도 떠올렸고 여기에도 올렸지만 별 반응은 없었음. 그때도 지금도 꽤 인상적이라고 봄

- **AVR DD, EA, EB 시리즈**를 좋아하지만, Microchip의 최신 칩 출시는 AVR 팬에게 조금 걱정스럽게 보임: [https://www.microchip.com/en-us/products/microcontrollers/32...](<https://www.microchip.com/en-us/products/microcontrollers/32-bit-mcus/pic32-sam/pic32cm-mc>)  
  PIC32 CM은 이벤트 시스템, MVIO, 5V 동작 등 AVR DD의 기능 대부분을 갖추면서도 더 크고 표준적인 ARM 32비트 M0+ 코어를 제공함  
  이 때문에 AVR DD는 다소 구식이 된 것 같다는 걱정이 듦. AVR EA와 AVR EB는 16배 프로그래머블 이득을 가진 12비트 ADC가 있고, 노이즈는 좀 있어도 약 50마이크로볼트까지 민감해서 말도 안 되게 좋은 ADC/전류 센서라 안전해 보임  
  반대로 이게 AVR 계열을 더 인기 있게 만들 수도 있음. 핀 호환되는 ARM32 Cortex M0+가 있다는 사실이 AVR 플랫폼 위에 만들 가능성을 높이는지 낮추는지 궁금함  
  개인적으로는 **주변장치**가 가장 중요하다고 봄. AVR DD는 전력 소모가 더 낮을 가능성이 있고, 특히 1.8V 동작이 그렇지만 그걸로 충분한지는 모르겠음  
  프로젝트 자체는 아주 흥미롭고, AVR DD는 어쨌든 훌륭한 칩이라 실제로 쓰는 모습을 보니 좋음  
  10BASE-T는 10메가비트/초로 동작하고 맨체스터 인코딩 때문에 선로상으로는 20메가비트가 되는데, AVR EB에는 x2 PLL 타이머가 있어서 오래 붙잡고 다루면 **맨체스터 인코딩**을 출력할 수 있을지도 모름  
  LUT, UART 주변장치, PLL로 올린 타이머 회로를 조합하면 고속 맨체스터 인코딩을 밀어낼 수 있을 듯하지만, 20Mbit까지 될지는 더 생각해봐야겠음
  - Microchip은 대부분의 회사보다 칩을 오래 지원하는 편으로 알려져 있음. 수요가 있는 한 사실상 계속 생산하고, **Dx 시리즈**도 꽤 최근 제품임  
    Cortex-M0 경로를 만지작거리는 건 Dx 이후의 8비트 플랫폼 세대를 계속 개발하고 싶지는 않다는 신호일 수 있음. 같은 기능을 다른 CPU 코어로 가져온다면 그건 괜찮다고 봄

- 페이지에 **HTML이 실시간으로 스트리밍**되어 올라오는 게 보여서 좋음. 예전 전화접속 시절 이미지가 위에서 아래로 천천히 그려지던 느낌이 남
  - 추억이 떠오름. 학교의 형편없는 전화접속은 아버지 직장의 **128 ISDN**에 비하면 참을 수 없을 정도로 느렸음  
    그쪽에서는 FTP에서, 나중에는 Napster에서 한 번 접속할 때 노래 여러 곡도 내려받을 수 있었음

- 제목을 보고 처음 든 생각은 “임베디드/IoT 장치 중에 저런 거 많이 하는데”였음  
  **10/100 Ethernet 내장 8051** 예시가 있음: [https://www.asix.com.tw/public/index.php/en/product/Microcon...](<https://www.asix.com.tw/public/index.php/en/product/Microcontrollers/Ethernet_SoC/AX11001>)

- 두 가지가 재미있었음. 첫째, 여기의 www.c에는 들어 있지 않은 **RFC 1055의 2025년 정오표**가 있음. 그 정오표는 디코딩 알고리즘을 어떻게 바꾸는지 꽤 설득력 있게 보여주고, 이 경우 링크 반대편이 실제로 Linux임  
  둘째, 다음 목적지는 아마 RFC 1144일 듯함

- **ENC28J60 + PIC18** 조합은 20년 전 Microchip이 흔히 배포하던 데모에서 정확히 이런 일을 하던 구성이었음

- 프록시가 페이지의 **server:** 헤더를 덮어쓰지 않은 점이 마음에 듦

- 예전에 **Arduino Mega**로 비슷한 걸 만든 적이 있음. 클라이언트가 많은 일을 해주기 때문에 꽤 그럴듯하게 보일 수 있다는 게 놀라웠고, 컨트롤러는 그저 uSD 카드에서 콘텐츠를 전달할 뿐이었음
