ART-WINDOWART-WINDOW
사용자의 공간 사진에서 작품 한 점을 추천·생성하고 POD 액자로 배송하는 공간 큐레이션 자동화 제품. 기획·브랜드 아키텍처·서버·클라이언트·인프라·POD 제작·배송 파트너 연동까지 1인 설계·구현.
A spatial-curation product: a single recommended artwork is generated from a photo of the user's room and shipped as a POD-framed print. Solo design and implementation across product planning, brand architecture, server, client, infra, and integrations with POD production and shipping partners.
- Java / Spring
- Oracle ADB · PostgreSQL
- Flutter
- SvelteKit · Svelte 5
- Gemini API
- Gemma 4 12B
- 임베딩 · 클러스터링
- OCI
- Docker
- Gemini API로 공간 사진을 분석해 작품을 추천하고, Replicate·Seedream으로 이미지를 생성하는 파이프라인 구축 (프롬프트 조립·응답 파싱·생성 웹훅 처리 포함)
- Built the pipeline that analyzes a room photo and recommends artwork with the Gemini API, then generates images via Replicate and Seedream (prompt assembly, response parsing, completion webhooks)
- 추천 시스템 고도화 — 방에 맞는 작품을 LLM의 한 번 추천에 맡기지 않고, 실제 인테리어·작품 사진 14만 장을 수집해 매칭 근거 데이터를 직접 구축. Gemma 4 12B(비전-언어 모델)로 의미 태깅하고, 액자·제품샷·워터마크를 게이트로 걸러 생성용 3만 장을 확정
- Recommendation-system upgrade — instead of trusting a single LLM suggestion for what fits a room, I built the matching-evidence data myself from 140k collected interior and artwork photos: semantic tagging with Gemma 4 12B (a vision-language model), then frame / product-shot / watermark gates to settle on a 30k generation pool
- 방은 픽셀이 아니라 스타일을 서술한 텍스트로 임베딩 — 실제 방과 연출된 방은 픽셀이 닮지 않기 때문. 화풍을 400개로 군집화해 노출용 209종을 뽑아, 사용자가 추상 파라미터 대신 실제 예제 이미지를 보고 고르게 개선 — 방 업로드부터 매칭·예제 선택·생성까지 배포 환경에서 end-to-end로 검증
- Rooms are embedded from a text description of their style, not pixels — a real room and a styled shoot don't resemble each other pixel-wise. I clustered styles into 400 groups and surfaced 209, so users choose from real example images instead of abstract parameters, and verified the whole path — room upload, matching, example pick, generation — end-to-end on the deployed build
LLM의 한 번 추천 대신 실제 데이터 기반 근거로 매칭. 방은 픽셀이 아니라 스타일 서술 텍스트로 임베딩 — 실제 방과 연출된 방은 픽셀이 안 닮기 때문. Matching runs on real-data evidence, not a single LLM guess. Rooms are embedded as a text description of style, not pixels — real and staged rooms don't match pixel-wise.
- 운영 안정화: 결제 웹훅 멱등 처리, 크레딧 차감 동시성 락, 외부 API 타임아웃, 시크릿 외부화(GitHub Secrets)
- Operational hardening: idempotent payment webhooks, concurrency locks on credit deduction, external-API timeouts, secrets moved into GitHub Secrets
- JMeter 부하 테스트와 성능 튜닝으로 병목 구간을 개선
- JMeter load testing and tuning to remove bottlenecks