[portfolio](https://geonwoo.kim/ko/portfolio) › 루쿠쿠

# 설치미술 전시를 위한 360도 영상 앱과 AI 영상 생성 서버

https://geonwoo.kim/ko/portfolio/lukuku-ai-experience

기간: 2026.06 — 2026.08

작품마다 관람객의 사진·영상을 받는 방식이 달랐습니다. 작품별 현장 앱과 생성 작업은 따로 두고, 공통 서버와 운영 대시보드, 결과 웹은 함께 쓰게 만들었습니다.

카메라 SD카드를 꽂으면 영상을 이어 붙여 QR로 건네는 무인 현장 앱

팀: 고객사 프로젝트 · 현장 앱·서버·대시보드 담당

역할: Swift 현장 앱 · AI 생성 서버 · 운영 대시보드 · 결과 웹

Swift · SwiftUI · Python · FastAPI · PostgreSQL · AWS S3 · TypeScript

- 날다 · 풍선 의자 체험의 Swift 현장 앱
- 나무블럭 · 이미지와 단어로 약 15초 영상을 만드는 서버 API
- 비비히어로 · 사진으로 캐릭터 포스터를 만들고, 고른 모션으로 약 10초 영상을 만드는 서버 API
- 릴스13 · 13초씩 세 번 찍은 영상에서 하나를 골라 AI 영상으로 만드는 서버 작업
- 360도 풍선 체험 결과 웹 · 관람객이 QR로 영상을 받는 모바일 페이지
- 운영 대시보드 · 매장·장치·서비스 단위로 주문, 실패, 재시도, AI 사용료 확인

## 결과를 기다리는 관람객

문제: 사람이 카메라 파일을 옮기고 편집하면 관람객이 결과를 오래 기다려야 했습니다.

해결: SD카드를 꽂으면 앱이 새 파일만 골라 중복을 거르고, 화면 없이 영상을 잇습니다. 현장 PC가 합성과 업로드를 함께 하면 과부하가 걸릴 수 있어, 합성은 한 번에 하나씩 돌립니다. 미리보기를 먼저 올려 QR을 띄우고, 원본은 뒤이어 올립니다.

## 이전 관람객의 QR

문제: 다음 관람객이 이전 관람객의 QR을 읽을 수 있는 구간이 있었습니다.

해결: 기존 QR은 일정 시간 뒤 지우고 대기 영상으로 바꿨습니다. 카메라를 연결하면 복사 진행률을 보여 준 뒤 새 QR을 띄웁니다.

## AI 제공자와 실패 처리

문제: 외부 AI 서비스는 바뀌거나 실패할 수 있었습니다. 제공자를 바꿀 때마다 서버 코드와 작업 대기열을 함께 고치는 구조는 피해야 했습니다.

해결: 자체 GPU 대신 외부 서비스를 쓰기로 하고, 제공자 이름을 코드에 넣지 않고 연결부만 바꾸게 했습니다. 실패하면 최초 요청 뒤 3회까지만 다시 시도하고, 인증·설정·청구 오류는 다시 시도하지 않습니다. 이 기준을 코드, 문서, 대시보드에 같게 넣었습니다. 같은 요청이 다시 들어와도 생성 작업은 하나만 만듭니다.


[루쿠쿠 OS · 회사 온톨로지와 에이전트 운영 체계](https://geonwoo.kim/ko/portfolio/lukuku-os) · [스포츠 브랜드 국내 자사몰과 ERP의 판매 대사·연동 운영](https://geonwoo.kim/ko/portfolio/lukuku-commerce-erp)
