본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 18. 12:21

동티모르에서 2주 만에 AI 만화 생성기를 출시했습니다 — 그 방법은 다음과 같습니다

요약

동티모르 개발자가 2주 만에 구축한 AI 만화 생성기 FurakToon의 빌드 과정과 기술 스택을 소개합니다. Llama 3.3 70B를 활용한 프롬프트 강화와 참조 얼굴 기능을 통해 사용자 맞춤형 애니메이션 이미지를 생성합니다.

핵심 포인트

  • Llama 3.3 70B를 이용한 AI 프롬프트 자동 강화 기능 구현
  • 사용자 사진을 기반으로 한 참조 얼굴(Reference faces) 생성 기술 적용
  • Next.js 16, Tailwind CSS v4, Supabase를 활용한 빠른 제품 출시
  • 21개 언어 지원 및 월간 무료 크레딧 시스템 운영

요약 (TL;DR) — 저는 문장을 단 몇 초 만에 아름다운 애니메이션 또는 만화 이미지로 바꿔주는 AI 앱인 **FurakToon**을 만들었습니다. 동남아시아에 초점을 맞춘 21개 언어를 지원하며, 월간 무료 크레딧 시스템을 갖추고 있고, Mind the Product의 "Everyone Ships Now" 해커톤을 위해 약 2주 만에 구축되었습니다. 이것은 빌드 인 퍼블릭 (build-in-public) 이야기입니다.

왜 이것을 만들었는가

저는 동티모르 (Timor-Leste) 🇹🇱에서 개발하고 있습니다. _Furak_는 저희 언어인 **테툼어 (Tetum)**로 "아름답다"는 뜻입니다. 그래서 앱 이름이 FurakToon입니다: _아름다운 만화_라는 뜻이죠.

그 하나의 제약 조건이 제품 전체를 형성했습니다.

Home Page

기능

  • 🖌️ 입력 → 스타일 선택 → 생성. 애니메이션 또는 만화, 1024×1024 해상도를 단 몇 초 만에 생성합니다.
  • 🧑‍🎨 참조 얼굴 (Reference faces). 사진을 업로드하면 모델이 해당 장면 속의 _그 사람_을 다시 그립니다 — "나를 애니메이션 캐릭터로 만들어줘"와 같은 요청에 매우 유용합니다.
  • AI 프롬프트 강화 (AI prompt enhancement). 클릭 한 번으로 당신의 거친 아이디어를 풍부한 프롬프트로 다시 작성합니다 (Llama 3.3 70B 사용).
  • 🛡️ 2단계 안전 장치. 모든 프롬프트는 무언가가 생성되기 전에 검토(moderated)됩니다.
  • 🪙 크레딧. 매월 10개 무료 제공 — 이미지당 1개, 참조를 사용할 때는 2개가 소모됩니다.
  • 🖼️ 개인 갤러리, 🌗 기본 다크 모드, 그리고 21개 언어 (테툼어, 인도네시아어, 말레이어, 타갈로그어, 태국어, 베트남어… + RTL 아랍어).

Create Page

기술 스택 (The stack)

특별한 것은 없습니다 — 지루한 기술들이지만, 빠르게 출시했습니다:

  • Next.js 16 (App Router, React 19) + Tailwind CSS v4
  • Supabase — 인증 (auth), Postgres, 스토리지 (Storage), 행 수준 보안 (row-level security)
  • Together AI — 이미지 모델 (Flux, SDXL, Gemini Flash Image) + 텍스트용 Llama
  • Novus.ai — 제품 분석 (hackathon에서 요구한 유일한 필수 요소)
  • 전 과정에서 AI 지원 개발 (AI-assisted development)로 구축

AI 부분보다 더 어려웠던 세 가지

이미지 생성요? API 호출 몇 번이면 끝납니다. 진짜 작업은 그 주변을 둘러싼 _제품 (product)_을 만드는 것이었습니다.

1. 속일 수 없는 크레딧 시스템

"월 10회 무료 이미지"는 이중 지불(double-spends)이나 환불 문제를 생각하기 전까지는 사소해 보입니다. 저는 지출이 원자적(atomic)으로 이루어지도록 로직을 **Postgres 함수 (Postgres functions)**로 밀어 넣었습니다:

-- spend_credits(): 새로운 달이 시작되면 충전하고, 여유가 있는 경우에만 차감
update public.credits
   set balance = balance - cost
...

월간 초기화는 지연 (lazy) 방식입니다 — cron job을 사용하지 않습니다. 새로운 달의 첫 작업 시 잔액이 10으로 다시 채워집니다. 그리고 만약 결제 _후_에 생성이 실패하면, 크레딧은 자동으로 **환불 (refunded)**됩니다. 신규 사용자는 가입 트리거 (signup trigger)를 통해 10개의 크레딧을 받습니다.

Profile Page

2. 무거운 라이브러리 없이 구현한 21개 언어

저는 아주 작은 타입 지정 i18n 레이어를 만들었습니다: 로케일(locale)당 하나의 사전(dictionary)을 두고, 영어(English)를 폴백(fallback)으로 사용하며, {placeholder} 보간법(interpolation)과 아랍어를 위한 dir="rtl"을 포함했습니다. 로케일은 localStorage에 유지되며 useSyncExternalStore를 통해 해결되므로 하이드레이션 플래시 (hydration flash) 현상이 없습니다. 언어 전환은 즉각적입니다.

쇼케이스 스트립에 있는 두 개의 동티모르 국기 (Timor-Leste flag) 조각은 장식이 아닙니다 — 그것이 이 프로젝트의 핵심입니다.

3. "데이터베이스가 깨어 있는가?" 문제

저는 Supabase의 무료 티어를 사용 중인데, 이는 **약 7일 동안 유휴 상태(idle)가 되면 일시 중지 (pauses)**됩니다. 심사 중에 DB가 잠들어 있다는 것은 데모가 죽었다는 뜻입니다. 그래서 다음과 같은 조치를 추가했습니다:

  • /api/health 프로브 (probe)를 기반으로 푸터 (footer)에 표시되는 작은 DB 상태 표시기 (DB-status indicator) (초록색 = 연결됨),
  • 라이브 사이트를 몇 시간마다 핑 (ping) 하여 활성 상태를 유지하는 GitHub Action.

작은 디테일이지만, 이것이 "데모"와 "제품"을 가르는 차이입니다.

Novus와 함께 제품을 출시하며 배운 점

해커톤을 위해 Novus.ai가 필요했고, 저는 단순히 붙여놓고 잊어버릴 것이라고 예상했습니다.
하지만 그것은 제 작업 방식을 바꾸어 놓았습니다.

저는 실제 순간들을 계측 (instrumented) 했습니다 — user_registered (사용자 등록), image_generated (이미지 생성), image_downloaded (이미지 다운로드), content_moderation_blocked (콘텐츠 중재 차단), generation_blocked_no_credits (크레딧 부족으로 생성 차단), language_switched (언어 전환) — 그리고 갑자기 저는 추측할 필요가 없어졌습니다. 사람들이 어디에서 이탈하는지 볼 수 있게 되었습니다.

두 가지가 저를 진심으로 놀라게 했습니다:

  1. Novus Cortex가 스스로 제 앱의 사이트맵 (sitemap)을 구축했습니다 — 공개 페이지 → 보호된 생성 흐름 (Protected Create flow) → API 경로 (API routes) → 갤러리 (Gallery). 코드가 아닌 사용 패턴으로부터 아키텍처 (architecture)를 이해한 것입니다.
  2. Novus가 제 리포지토리 (repo)에 풀 리퀘스트 (pull requests)를 생성했습니다. 제가 병합 (merge) 할 수 있는 실제적이고 검토 가능한 변경 사항들 — AI의 피드백이 AI의 기여로 변한 것입니다.

이것이 변화의 핵심입니다: _"이게 좋을 것 같아"_에서 _"무엇이 작동하는지 볼 수 있고, 그에 따라 행동할 수 있다"_로의 변화 말입니다.

Novus Dashboard

Novus Site Map

빠르게 제품을 출시하는 모든 이들을 위한 교훈

  • 하나의 날카로운 제약 조건을 선택하세요. "동남아시아 언어에서 작동해야 한다"는 조건이 모든 의사결정을 더 쉽게 만들었습니다.
  • 복잡한 로직은 데이터베이스에 두세요. Postgres에서의 원자적 크레딧 소비 (Atomic credit spending)는 그 어떤 클라이언트 측 방어 기제보다 뛰어났습니다.
  • 첫날부터 계측(Instrument)하세요. 분석 (Analytics)은 출시할 때 하는 번거로운 일이 아닙니다. 제품을 만드는 동안 방향을 잡는 방법입니다.
  • "실제로 라이브 상태인가"에 대한 세부 사항에 신경 쓰세요. 데이터베이스 (DB)를 깨어 있게 유지하고, 시크릿 모드 (Incognito)에서 테스트하며, 가장 보기 좋은 테마를 기본값으로 설정하세요.

체험해보기

👉 라이브 앱: furaktoon.fun
👉 코드: github.com/ajitonelsonn/FurakToon

아이디어를 입력하고, 애니메이션 또는 만화를 선택하여 여러분의 언어로 아름다운 결과물을 만들어 보세요.

Mind the Product × Novus.ai가 제작한 **World Product Day 2026 — "Everyone Ships Now"**를 위해 만들어졌습니다. _Furak_은 테툼어 (Tetum) 🇹🇱로 "아름답다"는 뜻입니다.

EveryoneShipsNow

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0