Yeonguk Lee

Software Engineer소프트웨어 엔지니어

Yeonguk Lee 이영욱

I can't leave a question alone. 궁금한 걸 그냥 못 넘겨요.

A back alley in a new city or the code under an app. I can't rest until I know how it runs. 낯선 골목이든 앱 밑바닥 코드든, 어떻게 굴러가는지 알아야 직성이 풀려요.

Irvine, CA Irvine, CA

01

Profile소개

Now지금은
A global program where a small team builds and ships a real product with industry mentorship. Ours shipped CLIR to the App Store., a project-based program in Irvine (full-stack & AI track), with weekly mentorship from a Blizzard Battle.net backend engineer 작은 팀이 현업 멘토링을 받으며 실제 제품을 만들어 출시하는 글로벌 프로그램이에요. 저희 팀은 CLIR을 App Store에 출시했어요.(Irvine)의 풀스택·AI 트랙에 있는 프로젝트형 프로그램이에요. 매주 Blizzard Battle.net 백엔드 엔지니어에게 멘토링을 받아요.
Shipped출시한 앱
CLIR, live on the App Store · Conever, published on ONE Store (Korea, 2025) CLIR는 App Store에, Conever는 ONE Store(한국)에 올라가 있어요.
Focus파고드는 것
Backend & systems: caching, concurrency, WebSocket, self-hosted infra · AI agents whose reliability is measured, not assumed 백엔드와 시스템(캐싱, 동시성, WebSocket, 직접 운영하는 서버), 그리고 믿음이 아니라 수치로 검증하는 AI 에이전트요.
Education학력
B.S. Computer Science, Kookmin University (expected Feb 2028) 국민대학교 컴퓨터공학, 2028년 2월 졸업 예정이에요.

When I travel I take photos, but rarely of the view. I shoot doors, stairwells, the underside of a bridge, how a building is actually put together. I care less about the place than how it holds up. I'm apparently exhausting to travel with.

여행 다니면 사진을 찍는데, 정작 풍경은 잘 안 찍어요. 남의 집 대문, 계단, 다리 밑, 건물이 어떻게 지어졌는지 같은 걸 찍죠. 장소보다 그게 어떻게 만들어졌는지가 더 궁금하거든요. 같이 여행 가면 좀 피곤한 스타일이래요.

I read code the same way. I can't move on until I know what's really running under the screen, so I dig down into systems and the low level, and I take the demo apart instead of trusting it. That digging turned into real things: I own CLIR's backend, live on the App Store, and a year earlier shipped Conever to Korea's ONE Store. In eighteen months I went from my first frontend page to backend, realtime, AI agents, and infrastructure.

코드도 똑같이 봐요. 화면 밑에서 실제로 뭐가 도는지 알아야 넘어가서, 시스템이랑 로우레벨까지 파고들어요. 데모만 보고 믿는 대신 직접 뜯어보고요. 그렇게 파다 보니 CLIR 백엔드를 맡아 App Store에 올렸고, 그 한 해 전엔 Conever를 한국 ONE Store에 냈어요. 18개월 동안 프론트엔드에서 백엔드, 실시간, AI 에이전트, 인프라까지 왔고요.

02

Work작업

sort정렬
show보기

Hand-ordered. The ones I want you to see first, first.제가 정한 순서예요. 먼저 보여드리고 싶은 걸 앞에 뒀어요.

Sellii

A resale-arbitrage agent that verifies before it acts.행동하기 전에 서버가 먼저 검증하는 resale arbitrage 에이전트예요.

featured대표 · solo · 2026 · not launched1인 개발 · 2026 · 미출시

CLIR

Scan a food label once, get a safe-or-not answer for your profile.라벨을 한 번 스캔하면, 내 프로필 기준으로 먹어도 되는지 알려줘요.

featured대표 · live · App Store · backend ownerApp Store 서비스 중 · 백엔드 담당

FlowCraft

A no-code Flutter app builder where agents never write the code directly.에이전트가 코드를 직접 쓰지 않는 노코드 Flutter 앱 빌더예요.

featured대표 · solo · 2026 · open source1인 개발 · 2026 · 오픈소스

LiveTrack

Real-time group location on a hand-written WebSocket layer.직접 짠 WebSocket 레이어로 만든 실시간 그룹 위치 공유예요.

solo · 2026 · self-hosted1인 개발 · 2026 · 직접 운영

Living Stage

A generative UI that grows on stage as the speaker talks.발표 속도에 맞춰 무대 위에서 자라나는 UI예요.

Google I/O hackathon · solo · 2026Google I/O 해커톤 · 1인 · 2026

Conever

Plan trips together, with AI suggestions and real-time sync.AI 추천과 실시간 동기화로 함께 여행을 계획하는 앱이에요.

team · frontend lead · 2025 · ONE Store팀 · 프론트 리드 · 2025 · ONE Store

GPSTracker

Fleet driving-analytics dashboard, built mock-API-first.mock API로 먼저 굴러가게 만든 차량 주행 분석 대시보드예요.

team · Kernel360 · 2025팀 · Kernel360 · 2025

Driftless

Keeps an AI agent's context files in sync on every PR.PR마다 AI 에이전트의 컨텍스트 파일을 코드와 맞춰줘요.

48h hackathon · solo · 202648시간 해커톤 · 1인 · 2026

PetAge AI · Danzam

A pet-age estimator and an award-winning sleep predictor.반려동물 나이 추정기, 그리고 우수상을 받은 수면 예측 앱이에요.

team · 2025 · Excellence Award팀 · 2025 · 우수상

Sellii

A resale-arbitrage agent that verifies before it acts. 행동하기 전에 서버가 먼저 검증하는 resale arbitrage 에이전트예요.

solo1인 개발 Mar–May 2026 not launched · private repo · code walkthrough available 미출시 · private repo · 코드 워크스루 가능

An agent built to scan Facebook Marketplace, OfferUp, and Craigslist on a daily schedule, price finds against eBay sold comps, and estimate net profit. A human approves every deal.

Facebook Marketplace, OfferUp, Craigslist를 매일 훑고, eBay 실거래가와 비교해서 순이익을 추정하도록 만든 에이전트예요. 거래는 전부 사람이 승인해요.

The interesting part is trust. Instead of believing the model, the server recomputes every economic figure from canonical eBay comps and stores the evidence with each decision. I turned the reliability claims into three reproducible offline harnesses and published the result tables.

핵심은 신뢰예요. 모델이 말한 숫자를 그대로 믿지 않고, 서버가 eBay 실거래 데이터로 모든 금액을 다시 계산해요. 판단의 근거도 결정에 같이 저장하고요. 이 주장들이 진짜인지 오프라인에서 재현되는 하네스 3개로 직접 쟀고, 결과 표를 공개했어요.

Harness results · measured 2026-07-09 · offline, not production하네스 결과 · 2026-07-09 측정 · 오프라인, 프로덕션 아님
What I measured측정 항목 Result결과 Scope범위
Fabricated price claims blocked지어낸 가격 차단 17/17 prompt-only: 0/17 44-fixture harness픽스처 44개 하네스
Valid deals preserved정상 거래 보존 8/8 0 false positives same harness같은 하네스
Commits per replayed event이벤트 재전송 시 커밋 수 1 naive pattern: up to 40비원자 패턴: 최대 40 replay harness, side effects mocked리플레이 하네스, side effect 모킹
Projected LLM spend예상 LLM 비용 −98.8% vision calls 31 → 0vision 호출 31 → 0 fixed 31-listing fixture고정 매물 31개 픽스처
Profitable listings kept수익 매물 유지 12 / 15 same fixture같은 픽스처

Full methodology, result tables, and the cases it does not catch → harness results page 방법론 전체와 못 잡은 케이스까지 검증 결과 페이지에 정리해 뒀어요 →

Stack: TypeScript · Fastify · BullMQ · Redis · PostgreSQL · GPT-4o · Playwright

CLIR

Scan a food label once, get a safe-or-not answer for your own allergy and dietary profile. 라벨을 한 번 스캔하면, 내 알레르기·식이 프로필 기준으로 먹어도 되는지 바로 알려줘요.

live · App StoreApp Store 서비스 중 backend owner, 4-person team4인 팀, 백엔드 담당 Mar 2026 – present 현재 App Store ↗ clir-app.com ↗

Every scan used to trigger a paid AI call for ingredient analysis. At realistic scale, that breaks the cost model. So I built a perceptual-hash dedup cache, now live in production: a repeat label scan skips the model ladder entirely. Exact-match caching can't work here, because two photos of the same label never hash identically. Keys are versioned by schema and prompt, so cache invalidation is a non-event, and every scan records its own latency, cost, and cache-hit telemetry.

원래는 스캔할 때마다 유료 AI 호출이 나갔어요. 규모가 커지면 비용 구조가 무너져요. 그래서 perceptual hash로 중복을 잡는 캐시를 만들었고, 지금 프로덕션에서 돌고 있어요. 같은 라벨을 다시 스캔하면 모델 호출을 아예 건너뛰어요. 같은 라벨이라도 사진마다 해시값이 달라지니까, 단순 일치 캐시로는 풀 수 없는 문제였어요. 키에 스키마· 프롬프트 버전을 넣어서 캐시 무효화가 사건이 아니고, 스캔마다 지연·비용·캐시 적중 텔레메트리를 남겨요.

The community feed survives request bursts with TTL jitter, stale-while-revalidate, and a distributed lock, so N concurrent requests no longer trigger N recomputes of the 7-day aggregation.

커뮤니티 피드는 TTL jitter, stale-while-revalidate, 분산 락으로 지켰어요. 요청이 한꺼번에 몰려도 7일 집계를 다시 계산하는 일이 N번 일어나지 않아요.

Repeat-scan path · call counts by mechanism, not measured hit-rates중복 스캔 경로 · 호출 횟수 기준, 적중률 실측 아님
BeforeAfter
Paid API calls유료 API 호출 up to 4최대 4 3 OpenAI + 1 Vision 0
Lookup조회 4-stage model ladder, 30s budget모델 4단계, 최대 30초 one Redis readRedis 조회 1번

Stack: TypeScript · Fastify · Redis · PostgreSQL · React Native (Expo) · Railway

FlowCraft

A no-code Flutter app builder where agents never write the code directly. 에이전트가 코드를 직접 쓰지 않는 노코드 Flutter 앱 빌더예요.

solo1인 개발 Mar 2026 – present 현재 github.com/Poiurity/FlowCraft ↗

Six LLM agents (Clarifier, WidgetExtender, Structure, Design, Repair, Critic) emit a typed AppState instead of raw Flutter; a deterministic generator compiles it to code. In enforce mode, generation runs in a closed loop: a static validator checks the output, and a repair agent patches failures (two attempts max, with oscillation and wall-clock guards). When repair fails, the system falls back to the prior valid state when one exists.

LLM 에이전트 6개(Clarifier, WidgetExtender, Structure, Design, Repair, Critic)가 Flutter 코드 대신 타입이 정해진 AppState를 만들어요. 코드는 생성기가 정해진 규칙대로만 만들어서, 같은 상태면 늘 같은 코드가 나와요. enforce 모드에서는 생성이 닫힌 루프 안에서 돌아요. 정적 검증기가 결과를 확인하고, 실패하면 Repair 에이전트가 최대 2번 고쳐요. 무한 반복과 시간 초과를 막는 가드도 있어요. 그래도 안 되면, 이전에 성공한 상태가 있을 때 거기로 돌아가요.

The rule is a deliberate design choice, not a patch: raw code generation drifts between model calls, so nothing in the pipeline edits code directly. All 53 automated tests pass; preview runs in the browser via DartPad.

이 규칙은 나중에 덧댄 게 아니라 처음부터 의도한 설계예요. 코드를 그대로 생성하면 모델을 호출할 때마다 조금씩 달라지니까, 파이프라인 어디서도 코드를 직접 건드리지 않게 했어요. 자동 테스트 53개가 전부 통과하고, 미리보기는 브라우저에서 DartPad로 돌아가요.

in parallel main.dart errors re-verify still failing → prior valid state ok user prompt Clarifier enriches prompt · intent WidgetExtender stages non-standard widgets Structure screens · widgets · state Design theme · layout Typed AppState JSON model · never raw Flutter Deterministic generator compiles AppState to code Static validator structural checks vars · nesting · reserved ids Repair patches AppState · max 2 oscillation + time guards Critic scores intent fidelity Runnable Flutter app DartPad preview in browser
Fig. 1 · closed-loop generation pipeline (enforce mode)닫힌 루프 생성 파이프라인 (enforce 모드)
FlowCraft: chat, generated Flutter code, live preview
Fig. 2 · chat → generated code → live preview대화 → 코드 생성 → 실시간 미리보기

Stack: Flutter · Dart · OpenAI API · JSON Schema · DartPad

LiveTrack

Real-time group location on a hand-written WebSocket layer, fully self-hosted.직접 짠 WebSocket 레이어로 만든 실시간 그룹 위치 공유예요. 서버도 직접 운영해요.

solo1인 개발 Apr 2026 – present 현재 GitHub ↗

Real-time location sharing for groups that split up on a trip. I wrote the WebSocket layer myself instead of reaching for a managed realtime service, because I wanted to own the failure handling: failures are classified by retryability, with separate paths for partially completed operations. The whole stack runs on one Hetzner VPS with Docker Compose, and movement analytics run on PostGIS.

여행 중에 흩어진 일행이 서로 위치를 실시간으로 보는 앱이에요. 관리형 실시간 서비스 대신 WebSocket 서버를 직접 짰어요. 실패 처리를 남에게 맡기지 않고 직접 감당해 보고 싶었거든요. 실패는 재시도해도 되는지를 기준으로 나누고, 반쯤 끝난 작업은 따로 처리해요. 전체 스택은 Hetzner VPS 한 대에서 Docker Compose로 돌아가고, 이동 분석은 PostGIS로 해요.

ws:// bidirectional geo queries verify token Hetzner VPS · Docker Compose Mobile clients React Native (Expo) react-native-maps Firebase Auth JWT identity provider WebSocket hub Node.js + Fastify · ws room broadcast Database PostgreSQL + PostGIS self-hosted in Docker

Stack: React Native (Expo) · Node.js · Fastify · ws · PostgreSQL + PostGIS · Hetzner VPS · Docker Compose

Living Stage

A generative UI that grows on stage as the speaker talks.발표 속도에 맞춰 무대 위에서 자라나는 UI예요.

Google I/O hackathon · soloGoogle I/O 해커톤 · 1인 May 2026 GitHub ↗

Built in about five hours at a Google I/O hackathon hosted by Cerebral Valley and Google DeepMind. As the speaker talks, structured-output streaming grows widgets on stage. The hero Sim widget stays fully interactive: pulling a slider re-evaluates a sandboxed mathjs model and redraws a 60fps canvas chart, with no model call in the interaction loop.

Cerebral Valley와 Google DeepMind가 주최한 Google I/O 해커톤에서 5시간쯤 걸려 만들었어요. 발표자가 말하면 structured output 스트리밍으로 위젯이 무대에 하나씩 생겨요. 핵심 위젯은 슬라이더를 당기면 샌드박스 mathjs 모델을 다시 계산해서 60fps 캔버스 차트를 그리는데, 이 상호작용 루프에는 모델 호출이 없어요.

Stack: React · TypeScript · Gemini · Web Speech API · mathjs · Cloudflare Workers

Conever

Plan trips together, with AI suggestions and real-time sync.AI 추천과 실시간 동기화로 함께 여행을 계획하는 앱이에요.

team · frontend lead팀 · 프론트 리드 2025 published on ONE Store (Korea)ONE Store(한국) 출시 GitHub ↗

Team-built travel app with AI route suggestions, native maps, and real-time trip sync over WebSocket. I led the frontend track.

팀으로 만든 여행 앱이에요. AI 경로 추천, 네이티브 지도, WebSocket 실시간 일정 동기화가 들어가요. 프론트엔드 트랙을 이끌었어요.

Stack: Flutter · Dart · Gemini API · Naver Map SDK · Kakao OAuth · WebSocket

GPSTracker

Fleet driving-analytics dashboard, built mock-API-first.mock API로 먼저 굴러가게 만든 차량 주행 분석 대시보드예요.

team · Kernel360팀 · Kernel360 2025

Fleet driving-analytics dashboard. The frontend ran mock-API-first so the team could move before the backend was ready; I collaborated on the Docker and Jenkins CI/CD pipeline.

차량 주행 분석 대시보드예요. 백엔드가 준비되기 전에 mock API로 프론트를 먼저 움직이게 했고, 팀의 Docker·Jenkins CI/CD는 같이 구축했어요.

GPSTracker route replay
Fig. 1 · route replay경로 리플레이

Stack: React · TypeScript · Zustand · TanStack Query · MSW · Docker · Jenkins

Driftless

Keeps an AI coding agent's context files in sync with the code on every PR.PR이 생길 때마다 AI 코딩 에이전트의 컨텍스트 파일을 코드와 맞춰줘요.

48h hackathon · solo48시간 해커톤 · 1인 May 2026 GitHub ↗

Keeps an AI coding agent's persisted context (rules, skills, AGENTS.md) in sync with the codebase on every pull request, using only the agent's own extension mechanisms. Built solo in a 48-hour IBM hackathon; 7 of 7 mock test scenarios pass.

PR이 생길 때마다 AI 코딩 에이전트의 컨텍스트 파일(규칙, 스킬, AGENTS.md)을 코드베이스와 맞춰주는 도구예요. 에이전트가 원래 가진 확장 수단만 썼어요. IBM 해커톤에서 48시간 동안 혼자 만들었고, mock 테스트 시나리오 7개가 전부 통과해요.

Stack: IBM Bob (Skills, Slash Commands) · watsonx · GitHub

PetAge AI · Danzam

A pet-age estimator and an award-winning sleep predictor.반려동물 나이 추정기, 그리고 우수상을 받은 수면 예측 앱이에요.

PetAge estimates a pet's age from photos (EfficientNet-B0 served through FastAPI); I led the team. Danzam, a caffeine-rhythm sleep predictor, won the Excellence Award at the 4th COKOTHON.

PetAge는 사진으로 반려동물 나이를 추정해요(EfficientNet-B0 + FastAPI). 팀을 이끌었어요. 카페인 리듬으로 수면을 예측하는 Danzam은 제4회 COKOTHON에서 우수상을 받았어요.

PetAge AI age estimate
Fig. 1 · PetAge: age estimate from a photoPetAge: 사진으로 나이 추정
Danzam caffeine dashboard
Fig. 2 · Danzam: caffeine dashboardDanzam: 카페인 대시보드

Stack: Flutter · FastAPI · Supabase · EfficientNet-B0 (PyTorch/ONNX)

03

Writing