
AWS를 두뇌로 사용하는 다마고치를 만들었습니다 (뉴스를 읽어주기도 합니다)
요약
AWS 클라우드 서비스를 두뇌로 활용하여 감정과 상태를 관리하는 스마트 다마고치 'Cloudagotchi' 제작 사례를 소개합니다. ESP32 하드웨어와 AWS의 다양한 서버리스 서비스를 결합하여 실시간 상호작용 및 뉴스 브리핑 기능을 구현했습니다.
핵심 포인트
- AWS IoT Core와 MQTT를 이용한 실시간 기기 상호작용 구현
- DynamoDB와 EventBridge를 활용한 클라우드 기반 상태 및 스케줄링 관리
- Amazon Bedrock과 Polly를 결합한 AI 뉴스 브리핑 기능 구현
- CDK를 통한 인프라 정의 및 월 1달러 미만의 저비용 아키텍처 설계
다마고치(Tamagotchis)를 기억하시나요? 배고파하고, 슬퍼하고, 저처럼 부주의한 여덟 살 아이라면 수학 시간에 죽어버리기도 했던 그 작은 달걀 모양의 픽셀 반려동물 키링 말입니다.
저는 하나를 만들었습니다. 다만 제 것은 368×448 AMOLED 화면, 가속도계(accelerometer), 스피커를 갖추고 있으며... 그 두뇌는 AWS에서 실행됩니다.
Cloudagotchi를 소개합니다:
기능
- 기기가 꺼져 있는 동안에도 배고픔을 느낍니다: 시간은 칩(chip)이 아니라 클라우드(cloud)에서 흐릅니다. EventBridge Scheduler가 저녁 식사 시간을 결정합니다.
- 당신이 어제 자신을 무시했다는 것을 기억합니다: 반려동물의 감정은 DynamoDB의 한 행(row)입니다. 재부팅한다고 해서 죄책감을 리셋할 수는 없습니다.
- 아보카도를 탭하여 먹이를 주고, 얼굴을 탭하여 쓰다듬으며, 보드를 흔들어 함께 놀아줍니다: 모든 상호작용은 AWS IoT Core를 통한 MQTT 왕복(round trip)으로 이루어집니다.
- 혼자 두면 잠이 듭니다: 작은 zzz 소리와 함께 말이죠.
- 그리고 제가 가장 좋아하는 부분: 매일 아침 7:03에 AWS 뉴스를 소리 내어 읽어줍니다: Amazon Bedrock이 헤드라인을 반려동물의 귀여운 목소리로 다시 쓰고, Amazon Polly가 음성을 부여하며, 말을 하는 동안 작은 얼굴의 입이 움직입니다. 직업이 있는 다마고치인 셈이죠.
작동 원리 (30초 요약 버전)
기기는 몸체이고, AWS는 두뇌입니다. ESP32가 스프라이트(sprites)를 렌더링하고 탭(tap)을 캡처합니다. 하지만 모든 감정, 모든 상태(stat), 모든 결정은 클라우드에서 옵니다:

한눈에 보는 스택(stack): Waveshare ESP32-S3 Touch AMOLED 1.8" 위의 ESP-IDF + LVGL, AWS IoT Core와 mutual-TLS MQTT 통신, 서버리스(serverless) 두뇌로서의 Lambda, DynamoDB 및 EventBridge Scheduler, 그리고 아침 브리핑을 위한 Bedrock → Polly → S3 파이프라인. 모든 인프라는 CDK로 정의되었습니다. 총 실행 비용은 한 달에 1달러 미만입니다.
💡 우연이 아닙니다. 이것은 당신이 소유한 모든 진지한 커넥티드 디바이스 (connected device)의 정확한 아키텍처 (architecture)입니다. 당신의 로봇 청소기는 모터가 달린 다마고치입니다. 우리는 그저 재미있는 버전을 만들고 있을 뿐입니다.
시리즈 안내
저는 전체 제작 과정을 네 개의 글로 나누어 작성할 예정이며, 각 글은 고유한 git 브랜치를 가지고 있어 커밋 (commit) 단위로 따라오실 수 있습니다:
- [7월 21일 공개 예정] Cloudagotchi를 만나보세요: 클라우드 두뇌를 가진 가상 반려동물 : 아키텍처 (architecture), 그리고 상호 TLS (mutual TLS)를 사용하여 보드를 AWS IoT Core에 연결하는 방법 (더불어 납치된 반려동물이 아무런 문제가 되지 않도록 만드는 IoT 정책 트릭 포함).
- [7월 23일 공개 예정] 얼굴 만들기 : 스프라이트 (sprite) 기반의 LVGL UI, 깜빡임, 졸음, 흔들림 감지... 그리고 저의 첫 번째 "우아한" 절차적 얼굴 (procedural face)이 실제 하드웨어에서 어떻게 깨진 엉망진창이 되었는지에 대한 매우 솔직한 이야기.
- [7월 27일 공개 예정] 당신이 자는 동안 배고파합니다 : 서버리스 상태 머신 (serverless state machine): Lambda, DynamoDB, 그리고 단 하나의 상시 실행 프로세스 없이도 반려동물이 나이를 먹게 만드는 게으른 시간 계산 (lazy-time-accounting) 트릭.
- [7월 29일 공개 예정] 나의 다마고치가 AWS 뉴스를 읽어줍니다 : 삑삑거리는 목소리의 뉴스 앵커로서의 Bedrock, 펌웨어 서브시스템 전체를 삭제해버린 Polly의 단일 파라미터 (one-parameter) 트릭, 그리고 아무도 경고해주지 않는 네 가지 임베디드 스트리밍 (embedded-streaming) 주의사항.
미리 경고하자면: 이 시리즈에는 실제 전쟁 같은 이야기들이 담겨 있습니다. 끼어버리는 패널들, 서명된 URL (presigned URLs)에 패배한 버퍼들, 대서양을 가로지르는 수학 연산을 수행하며 저를 괴롭히는 TCP 윈도우 (TCP window)까지. 실패는 최고의 스승이었기에, 그 모든 내용이 포함되어 있습니다.

파트 1은 7월 20일 화요일에 공개됩니다. 놓치지 않으려면 저를 팔로우하세요.
코드는 오픈 소스입니다: github.com/tagazok/cloudagotchi. 그리고, 만약 직접 만드신다면 여러분의 반려동물을 꼭 보여주세요. 👻
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기