본문 바로가기
카카오 부트캠프 회고록

[카카오 부트캠프 회고록] AI 해커톤 회고

by Yoon_estar 2025. 12. 21.
728x90
반응형

🎯 PromiseMarry - AI 청첩장 생성 서비스 개발 회고

결혼을 약속하는 순간을 기록하는 디지털 청첩장 서비스


📌 목차

  1. 프로젝트 개요
  2. 왜 PromiseMarry인가?
  3. 기술 스택과 아키텍처
  4. PM/팀장으로서의 기술 의사결정
  5. 개발 과정 (3일간의 여정)
  6. 핵심 기능 소개
  7. 기술적 도전과 해결
  8. 발표 질의응답 & 인사이트
  9. 배운 점 & 성장 포인트
  10. 아쉬운 점 & 향후 개선 방향

1. 프로젝트 개요

🎊 PromiseMarry Lab

"결혼을 약속하는 순간을 기록하는 디지털 청첩장 서비스입니다.
두 사람의 이야기를 담아, 특별한 초대를 만듭니다."

  • 프로젝트 기간: 2025.12.18 ~ 2025.12.20 (3일)
  • 팀 구성: 6명 (FE 1명, BE 1명, AI 2명, Cloud 2명)
  • 내 역할: AI Model Server 개발, PM/팀장, 발표
  • 시연 영상: Google Drive 링크

2. 왜 PromiseMarry인가?

🚩 문제 의식: "사진만 갈아끼우는 청첩장은 이제 그만"

최근 결혼식을 올린 카카오 부트캠프 운영진분과의 인터뷰에서 이런 이야기를 들었습니다.

"영화관에서 처음 만난 우리의 추억을 담은 청첩장을 만들고 싶었는데,
기존 서비스는 템플릿만 제공해서 결국 포토샵을 배워야 했어요."

이 한 마디가 프로젝트의 시작이었습니다.

💡 기존 서비스의 한계

캔바 / 미리캔버스

  • ❌ 범용 디자인 툴 → 청첩장 특화 X
  • ❌ 템플릿 중 하나임 → 디자인 자유도는 높지만,
  • 결혼이라는 맥락·스토리·경험을 설계는 사용자가 직접 고민해야 함
  • ❌ 디자인은 예쁘지만, 수정이 번거로움

사설 청첩장 제작 업체

  • ❌ 디자인은 예쁘지만 비용이 높고 수정 어려움
  • ❌ 정해진 양식 중심으로 개인화 한계
  • ❌ 이미지나 중간에 분위기나 스타일 바꾸기 어려움

✨ PromiseMarry의 해결책

차별화 포인트 1: AI 기반 커스터마이징

  • 청첩장에 특화된 결혼 전용 서비스
  • 복잡한 디자인 과정 없이도
  • 두 사람의 이야기·감정·약속을 자연스럽게 담을 수 있도록 설계

차별화 포인트 2: 3가지 스타일 제공

  • 2D 청첩장: 전통적이지만 세련된 디자인 (3페이지 자동 생성)
  • 3D 청첩장: Meshy 6 모델로 입체감 있는 청첩장
  • 다양한 톤: 쉽고 빠르지만, 정형화되지 않은 청첩장 경험 제공

3. 기술 스택과 아키텍처

🛠 기술 스택

AI

  • Gemini (gemini-3-pro-image): TEXT, 2D Image 생성
  • Meshy 6: 3D Image 생성
  • FastAPI: AI Model Server

Frontend

  • React: SPA 기반 사용자 인터페이스

Backend

  • Spring Boot: RESTful API 서버

Cloud

  • AWS: EC2, S3, CloudFront
  • GitHub Actions: CI/CD 자동화
  • Docker: 컨테이너 기반 배포

🏗 시스템 아키텍처

┌─────────────┐      HTTP/REST      ┌─────────────┐      HTTP/REST      ┌─────────────┐
│   React     │ ◄─────────────────► │ Spring Boot │ ◄─────────────────► │   FastAPI   │
│  Frontend   │                     │   Backend   │                     │ Model Server│
│             │                     │  (Port 8101)│                     │ (Port 8102) │
└─────────────┘                     └──────┬──────┘                     └─────────────┘
                                           │                                    │
                                           ▼                                    ▼
                                    ┌─────────────┐                     ┌─────────────┐
                                    │    MySQL    │                     │  Gemini API │
                                    │   Database  │                     │  Meshy API  │
                                    └─────────────┘                     └─────────────┘

🔑 모델 API를 3번 부른 이유

PPT에서 강조한 "1번에 불렀을 때 vs 3번 불렀을 때" 비교:

1번에 불렀을 때 (초기 설계)

문제점:
❌ 처음 만든 결과물 다음 단계에서도 계속 참고하게 해서,
   이미지가 중간에 분위기나 스타일 바뀌지 않도록 했습니다

3번 불렀을 때 (최종 설계)

✅ 장점:
• 각 페이지별 최적화된 프롬프트 적용
• 페이지 1 (커버): 신랑신부 이름 + 메인 이미지
• 페이지 2 (본문): 초대 문구 + 부모님 성함
• 페이지 3 (위치): 장소 안내 + 지도

✅ 효과:
• 페이지별 역할 명확화
• 더 높은 퀄리티의 이미지 생성
• 유연한 커스터마이징 가능

4. PM/팀장으로서의 기술 의사결정

🤔 고민 1: 어떤 모델의 API를 사용할까?

선택지 비교

모델 장점 단점 결정
OpenAI DALL-E 3 이미지 퀄리티 우수 비용 높음, 한글 처리 약함
Stable Diffusion 오픈소스, 커스터마이징 인프라 구축 필요, 시간 부족
Gemini 3 Pro Image 멀티모달, 한글 우수, 빠른 응답 이미지 퀄리티 중간
Nanobanana 커스터마이징 가능, 청첩장 특화 API 응답 시간 30-60초

최종 결정: Gemini + Nanobanana 혼용

✅ Gemini 3 Pro Image
  - TEXT 생성 (6가지 톤 지원)
  - 2D 청첩장 이미지 생성 (빠른 프로토타이핑)

✅ Nanobanana
  - 고퀄리티 2D 청첩장 이미지 (3페이지 자동 생성)
  - 사용자 이미지 + 스타일 이미지 결합

✅ Meshy 6
  - 3D 청첩장 이미지 생성
  - 차별화 포인트 (캔바/미리캔버스 대비)

🤔 고민 2: 원하는 퀄리티의 이미지를 만들 수 있을까?

도전: 프롬프트 엔지니어링의 중요성

초기 테스트에서 Gemini의 결과물이 기대에 미치지 못했습니다.

문제 상황:

입력: "신랑신부 청첩장 만들어줘"
출력: 🤔 일반적인 청첩장 템플릿 (개성 없음)

해결: 프롬프트 파일 시스템 구축

prompts/
├── invitation/
│   ├── system.md          # 시스템 프롬프트
│   ├── text_generate.md   # 텍스트 생성 프롬프트
│   └── text_schema.json   # 응답 스키마
└── nanobanana/
    ├── page1_cover.md     # 커버 페이지 프롬프트
    ├── page2_content.md   # 본문 페이지 프롬프트
    └── page3_location.md  # 위치 페이지 프롬프트

프롬프트 예시 (page1_cover.md):

You are a professional wedding invitation designer.

Create a COVER page for a wedding invitation with:
- Bride: {{ bride_name }}
- Groom: {{ groom_name }}
- Style: {{ tone }} (romantic/modern/classic/formal/casual/minimal)
- Main image: {{ wedding_image }}
- Design reference: {{ style_image }}

Requirements:
1. Elegant typography with Korean fonts
2. Main image should be center-aligned
3. Names should be prominent but not overwhelming
4. Color palette: soft pastels with {{ tone }} vibes
5. Include subtle decorative elements (flowers, borders)

Output: High-resolution PNG, 1080x1920px

결과:

✅ 퀄리티 향상: 일반 템플릿 → 고퀄리티 커스텀 디자인
✅ 일관성 확보: 페이지별 톤 유지
✅ 유지보수 용이: 코드 수정 없이 .md 파일만 수정

🤔 고민 3: 단순 일반적인 청첩장 밖에 못 할까?

차별화 전략: 3D 청첩장 도입

경쟁 서비스(캔바, 미리캔버스)는 모두 2D 청첩장만 제공합니다.

Meshy 6 모델 활용:

2D 청첩장 이미지 → Meshy 6 API → 3D 입체 청첩장

✅ 효과:
• 차별화된 사용자 경험
• SNS 공유 시 눈에 띄는 디자인
• "우와, 이건 어디서 만들었어요?" 반응 유도

5. 개발 과정 (3일간의 여정)

📅 DAY 1: 주제 선정 및 아키텍처 설계

오전: 사용자 인터뷰 분석

  • 카카오 부트캠프 운영진 인터뷰
  • 문제점 도출: "디자인 툴 없이도 커스텀하고 싶다"
  • 해결책 도출: "AI로 누구나 쉽게 커스텀 디자인 완성"

오후: 기술 스택 선정

  • AI 모델 비교 (Gemini vs OpenAI vs Stable Diffusion)
  • 아키텍처 설계 (Frontend - Backend - Model API)
  • API 스펙 정의

저녁: 핵심 설계 결정

1. 토큰 기반 설계 (개인화 불필요)

// 해커톤 특성상 회원가입/로그인 생략
// 토큰으로 세션 관리

const token = uuidv4(); // 임시 토큰 생성
sessionStorage.setItem('invitationToken', token);

2. 프론트엔드 렌더링으로 로딩 UX 개선

// 이미지 생성 중에도 사용자 이탈 방지
// 스켈레톤 UI + 프로그레스 바

<LoadingModal>
  <ProgressBar current={2} total={3} />
  <p>멋진 청첩장을 만들고 있어요... (약 30초 소요)</p>
</LoadingModal>

3. 캐시 메모리 토큰 저장

// 사용자가 페이지 나갔다 와도 결과 유지
// sessionStorage로 캐싱

const cachedResult = sessionStorage.getItem(`invitation_${token}`);
if (cachedResult) {
  return JSON.parse(cachedResult);
}

밤: Mockup 제작

  • Figma로 UI/UX 설계
  • 3페이지 청첩장 레이아웃 확정

📅 DAY 2: 개발 시작 및 아이디어 고도화

오전: 모델 프롬프트 엔지니어링

  • 6가지 톤별 프롬프트 작성
  • 페이지별 프롬프트 분리 (.md 파일 시스템)
  • Gemini API 테스트 (100회 이상)

오후: 인프라 구축

  • CI/CD 구현: GitHub Actions로 자동 배포
  • AWS 설정: EC2, S3, CloudFront
  • Docker 컨테이너화: Model Server Dockerizing

저녁: BE/FE 개발

  • Backend: Spring Boot API 개발
    • /api/invitation/generate 엔드포인트
    • /api/invitation/3d 엔드포인트
  • Frontend: React 컴포넌트 개발
    • 입력 폼, 스타일 선택, 결과 페이지

📅 DAY 2.5 (새벽): 통합 및 발표 준비

00시 ~ 03시 : 코드 통합

  • AWS EC2에 배포
  • Frontend - Backend - Model API 연동 테스트
  • 버그 수정 (CORS, 이미지 업로드 등)

03시 ~ 04시 : 최종 테스트

  • 엔드투엔드 테스트 (실제 청첩장 10개 생성)
  • 성능 측정 (응답 시간, 이미지 퀄리티)
  • 시연 시나리오 작성

03시 ~ 05 시: 발표 준비

  • PPT 제작 (밤샘 😭)
  • 시연 영상 녹화
  • 발표 리허설

10시: 발표 


6. 핵심 기능 소개

✨ 기능 1: AI 텍스트 생성 (6가지 톤)

사용자 입력:

{
  "groom_name": "홍길동",
  "bride_name": "김영희",
  "wedding_date": "2025년 5월 20일",
  "tone": "romantic"
}

AI 출력 (Gemini Flash 2.5):

{
  "greetings": [
    "사랑하는 두 사람이 하나가 되는 날, 함께해주세요",
    "평생을 함께할 우리의 첫 걸음에 함께해주세요",
    "영원한 사랑을 약속하는 자리에 초대합니다"
  ],
  "invitations": [
    "따뜻한 봄날, 저희 두 사람이 사랑의 결실을 맺습니다",
    "손잡고 걸어온 시간들이 이제 평생이 됩니다",
    "서로를 향한 마음이 하나가 되는 순간을 함께해주세요"
  ],
  "location": "서울 강남구 테헤란로 123, 더 클래식 500 3층 그랜드홀",
  "closing": [
    "소중한 분들과 함께 이 기쁨을 나누고 싶습니다",
    "귀한 걸음 해주시면 큰 기쁨이 되겠습니다",
    "축복해 주시면 감사하겠습니다"
  ]
}

6가지 톤:

  • formal: 격식 있는 표현
  • casual: 친근한 표현
  • modern: 현대적인 표현
  • classic: 고전적인 표현
  • romantic: 감성적인 표현
  • minimal: 간결한 표현

✨ 기능 2: 3페이지 청첩장 자동 생성

입력:

  • 신랑신부 사진 (웨딩 이미지)
  • 스타일 참고 이미지
  • 텍스트 정보 (이름, 날짜, 장소)

출력: 3개 페이지

Page 1 (커버):

[ 신랑신부 메인 사진 ]
┌─────────────────────────┐
│                         │
│    🌸  Wedding Day  🌸   │
│                         │
│      홍길동 ♥ 김영희      │
│                         │
│    2025. 05. 20. SAT    │
│                         │
└─────────────────────────┘

Page 2 (본문):

┌─────────────────────────┐
│  비봄의 주역이시고        │
│  귀한 자녀님            │
│  저희가 결혼하게        │
│  축하해주십시오.         │
│                         │
│  신랑: 홍부·김씨의 장남   │
│  신부: 김부·이씨의 장녀   │
│                         │
│  [ 초대 문구 ]          │
│                         │
└─────────────────────────┘

Page 3 (위치):

┌─────────────────────────┐
│  🗺  Location  🗺        │
│                         │
│  더 클래식 500           │
│  3층 그랜드홀            │
│                         │
│  서울 강남구 테헤란로 123 │
│                         │
│  [ 지도 이미지 ]         │
│                         │
│  2025년 5월 20일 토요일   │
│  오후 2시 30분           │
│                         │
└─────────────────────────┘

✨ 기능 3: 3D 청첩장 생성 (Meshy 6)

프로세스:

2D 청첩장 (Page 1) → Meshy 6 API → 3D 입체 이미지

✅ 360도 회전 가능
✅ 입체감 있는 디자인
✅ SNS 공유 최적화

차별화 포인트:

  • 캔바/미리캔버스: 2D만 지원
  • PromiseMarry: 2D + 3D 둘 다 지원

7. 기술적 도전과 해결

🔥 도전 1: 이미지 생성 속도 (30-60초)

문제:

Nanobanana API 응답 시간: 30-60초
→ 사용자 이탈 위험

해결책:

1. 프론트엔드 로딩 UX 개선

// LoadingModal.jsx
export default function LoadingModal({ current, total }) {
  const progress = (current / total) * 100;

  return (
    <div className="loading-modal">
      <h2>멋진 청첩장을 만들고 있어요...</h2>
      <ProgressBar value={progress} />
      <p>약 {60 - (current * 20)}초 남았어요</p>

      {/* 재미 요소: 랜덤 메시지 */}
      <p className="tip">
        {getRandomTip()}
      </p>
    </div>
  );
}

2. 스켈레톤 UI로 기대감 형성

// SkeletonInvitation.jsx
<div className="skeleton">
  <div className="skeleton-image shimmer" />
  <div className="skeleton-text shimmer" />
  <div className="skeleton-text shimmer short" />
</div>

3. 페이지별 순차 렌더링

// 3페이지 동시 생성 X, 순차 생성 O
async function generateInvitation() {
  const page1 = await generatePage(1); // 20초
  setPreview(page1); // 👈 즉시 보여주기

  const page2 = await generatePage(2); // 20초
  setPreview([page1, page2]);

  const page3 = await generatePage(3); // 20초
  setPreview([page1, page2, page3]);
}

🔥 도전 2: 비동기 처리 (발표 질문)

발표 후 받은 질문:

"이미지 생성이 30초 걸리는데, 비동기/동기 어떻게 처리했나요?"

우리의 답변:

Backend (Spring Boot): 동기 처리

@PostMapping("/api/invitation/generate")
public ResponseEntity<InvitationResponse> generateInvitation(@RequestBody InvitationRequest request) {
    // 동기적으로 Model API 호출 (30-60초 대기)
    String imageUrl = modelApiClient.generateImage(request);

    // 결과 반환
    return ResponseEntity.ok(new InvitationResponse(imageUrl));
}

이유:

  • 해커톤 시간 제약 (3일)
  • 비동기 처리 시 추가 구현 필요:
    • WebSocket 또는 Server-Sent Events
    • 작업 큐 시스템 (Redis, RabbitMQ)
    • 폴링 메커니즘
  • 프론트엔드 UX로 충분히 커버 가능 판단

Frontend (React): 비동기 처리

const handleSubmit = async () => {
  setLoading(true);

  try {
    // 비동기 API 호출 (Promise)
    const response = await axios.post('/api/invitation/generate', formData);

    setResult(response.data);
  } catch (error) {
    setError('이미지 생성에 실패했습니다.');
  } finally {
    setLoading(false);
  }
};

향후 개선 방향:

WebSocket 기반 실시간 업데이트

// Frontend
const socket = new WebSocket('ws://localhost:8101/ws/invitation');

socket.onmessage = (event) => {
  const data = JSON.parse(event.data);

  if (data.status === 'progress') {
    setProgress(data.percent); // 10%, 20%, 30%...
  } else if (data.status === 'completed') {
    setResult(data.imageUrl);
  }
};

// Backend
@PostMapping("/api/invitation/generate-async")
public ResponseEntity<String> generateInvitationAsync(@RequestBody InvitationRequest request) {
    String taskId = UUID.randomUUID().toString();

    // 비동기 작업 시작
    CompletableFuture.runAsync(() -> {
        String imageUrl = modelApiClient.generateImage(request);
        webSocketHandler.sendMessage(taskId, imageUrl);
    });

    return ResponseEntity.ok(taskId);
}

🔥 도전 3: 캐시 메모리 토큰 저장

문제:

사용자가 결과 페이지에서 뒤로가기 → 다시 들어옴
→ 이미지를 다시 생성? (30초 또 대기?) ❌

해결: sessionStorage 캐싱

// utils/cache.js
export const saveToCache = (token, data) => {
  const cacheKey = `invitation_${token}`;
  sessionStorage.setItem(cacheKey, JSON.stringify(data));
};

export const getFromCache = (token) => {
  const cacheKey = `invitation_${token}`;
  const cached = sessionStorage.getItem(cacheKey);
  return cached ? JSON.parse(cached) : null;
};

// InvitationPage.jsx
useEffect(() => {
  const token = sessionStorage.getItem('invitationToken');
  const cached = getFromCache(token);

  if (cached) {
    setResult(cached); // 캐시에서 복원
    setLoading(false);
    return;
  }

  // 캐시 없으면 생성
  generateInvitation();
}, []);

효과:

  • ✅ 사용자 경험 향상 (뒤로가기해도 즉시 로드)
  • ✅ API 호출 횟수 감소 (비용 절약)
  • ✅ 서버 부하 감소

8. 발표 질의응답 & 인사이트

💰 질문 1: "서비스 가격표는 어떻게 되나요?"

우리의 답변:

프리미엄 모델 제안:

플랜 가격 기능
무료 체험 0원 • 2D 청첩장 1개 생성
• 워터마크 포함
• 기본 톤 3종
베이직 9,900원 • 2D 청첩장 무제한
• 워터마크 제거
• 6가지 톤 전체
프리미엄 19,900원 • 2D + 3D 청첩장
• 고해상도 다운로드
• 커스텀 프롬프트
엔터프라이즈 문의 • 웨딩 업체용
• API 제공
• 전담 지원

비용 분석:

API 비용 (1회 생성):
• Gemini API: 약 $0.03 (텍스트) + $0.05 (이미지) = $0.08
• Nanobanana: 약 $0.10
• Meshy 6 (3D): 약 $0.30

총 비용: 약 $0.48 (약 600원)
판매가: 9,900원
마진율: 약 94%

⏱ 질문 2: "이미지 생성 시간을 더 줄일 수 있나요?"

우리의 답변:

현재:

  • Nanobanana: 30-60초
  • Gemini: 3-5초

개선 방향:

1. 모델 경량화

Nanobanana → Gemini Flash 2.5 (더 빠른 모델)
60초 → 5초 (90% 단축)

2. 병렬 처리

// 현재: 순차 처리
const page1 = await generatePage(1); // 20초
const page2 = await generatePage(2); // 20초
const page3 = await generatePage(3); // 20초
// 총 60초

// 개선: 병렬 처리
const [page1, page2, page3] = await Promise.all([
  generatePage(1),
  generatePage(2),
  generatePage(3)
]);
// 총 20초 (66% 단축)

3. CDN 캐싱

동일한 스타일 이미지 → CDN에 캐싱
재생성 시간: 0초

9. 배운 점 & 성장 포인트

📈 기술적 성장

1. 백엔드/프론트엔드 지식 습득

AI 파트 담당이었지만, PM으로서 전체 스택을 이해해야 했습니다.

배운 것:

  • Spring Boot: RESTful API 설계, JPA, CORS 설정
  • React: Hook (useState, useEffect), 컴포넌트 설계
  • AWS: EC2 배포, S3 스토리지, CloudFront CDN
  • Docker: 컨테이너 기반 배포

예시: CORS 오류 해결

// 문제: Frontend에서 Backend API 호출 시 CORS 오류
// Cross-Origin Request Blocked

// 해결: Spring Boot에 CORS 설정 추가
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://localhost:3000") // Frontend URL
                .allowedMethods("GET", "POST", "PUT", "DELETE");
    }
}

2. 프롬프트 엔지니어링 실전 경험

배운 점:

  • 프롬프트는 "코드"다: 버전 관리, 테스트, 리팩토링 필요
  • 구체적일수록 좋다: "예쁘게" (X) → "soft pastel colors, elegant typography" (O)
  • 예시 제공 효과: Few-shot learning으로 퀄리티 향상

Before:

Create a wedding invitation.

After:

You are a professional wedding invitation designer with 10 years of experience.

Create a COVER page for a Korean wedding invitation with:
- Bride: {{ bride_name }}
- Groom: {{ groom_name }}
- Style: romantic
- Main image: [uploaded wedding photo]

Requirements:
1. Use elegant Korean fonts (배달의민족 주아체 or similar)
2. Center-aligned composition
3. Soft pastel color palette (pink, beige, cream)
4. Include subtle floral decorations (cherry blossoms)
5. Names should be in 40pt, date in 24pt
6. Maintain 16:9 aspect ratio

Example output:
[Provide example image URL]

Output format: PNG, 1920x1080px, 300dpi

결과: 성공률 40% → 90% 향상


🧑‍💼 PM으로서의 성장

"내가 모르는 지식을 가진 팀원들과 협업하기"

이전 프로젝트에서는:

  • 내가 아는 정보에서 팀원들을 이끌어 가는 느낌
  • "이렇게 하면 됩니다" (탑다운 방식)

이번 프로젝트에서는:

  • 내가 모르는 지식을 가진 팀원들과 협업
  • Spring Boot(BE), React(FE), AWS(Cloud) 모두 처음
  • "어떻게 하면 좋을까요?" (보텀업 방식)

깨달음:

"PM은 모든 걸 알 필요 없다.
하지만 팀원들의 언어를 이해하고, 소통할 수 있어야 한다."

구체적 행동:

  • 매일 아침 스탠드업 미팅: 각자 진행 상황 공유
  • Slack 채널 활성화: 실시간 질문/답변
  • 공통 용어 정의: API 스펙 문서로 소통 통일

예시: API 스펙 문서

## POST /api/invitation/generate

### Request
{
  "groom_name": "홍길동",
  "bride_name": "김영희",
  "wedding_date": "2025-05-20",
  "tone": "romantic"
}

### Response
{
  "success": true,
  "data": {
    "pages": [
      { "page_number": 1, "image_url": "https://..." },
      { "page_number": 2, "image_url": "https://..." },
      { "page_number": 3, "image_url": "https://..." }
    ]
  }
}

"소통을 위한 개발 공부의 필요성"

결심:

"남은 카카오 부트캠프 기간 동안 개발 공부에 집중하자"

학습 계획:

  1. Spring Boot 기초: 인프런 강의 수강
  2. React 심화: 공식 문서 정독
  3. AWS 자격증: SAA (Solutions Architect Associate) 준비
  4. 매일 코딩: 백준/프로그래머스 1문제씩

🎤 발표 역량 성장

떨리지 않았다고 생각했는데...

발표를 할 땐 떨지 않고 했다고 생각했습니다.
하지만 다른 팀들의 PPT와 영상을 보니 부족함을 많이 느꼈습니다.

다른 팀들의 강점:

  • ✅ 시각화 자료 풍부 (차트, 다이어그램, 애니메이션)
  • ✅ 스토리텔링 구조 (문제 → 해결 → 성과)
  • ✅ 시연 영상 편집 퀄리티 (BGM, 자막, 전환 효과)

우리 팀의 약점:

  • ❌ PPT를 밤새 급하게 만듦 → 시각적 완성도 낮음
  • ❌ 데이터 시각화 부족 (성능 비교, 사용자 플로우 등)
  • ❌ 시연 영상이 단순함 (화면 녹화만)

다음엔 이렇게 하겠다:

1. 시각화 자료 강화

텍스트 설명 (X)
      ↓
인포그래픽, 차트, 다이어그램 (O)

예시:
"이미지 생성 속도가 빠릅니다" (X)
→ [Before: 60초 | After: 20초] 막대 그래프 (O)

2. 스토리텔링 구조

1. Hook: 공감 가는 문제 제시
   "여러분은 청첩장 만들 때 어떻게 하셨나요?"

2. Problem: 구체적인 페인 포인트
   "디자인 툴을 배우는데 2주가 걸렸어요..."

3. Solution: 우리의 해결책
   "AI로 1분 만에 완성합니다"

4. Demo: 실제 시연
   [라이브 데모 or 편집된 영상]

5. Impact: 성과와 비전
   "디자인 시간 90% 단축, 비용 80% 절감"

3. 시연 영상 편집

Before: 화면 녹화 그대로
After:
• BGM 추가 (감성적인 웨딩 음악)
• 자막 (핵심 기능 설명)
• 전환 효과 (페이드, 줌)
• Before/After 비교

10. 아쉬운 점 & 향후 개선 방향

😢 아쉬운 점

1. 이미지 처리 속도 (30-60초)

문제:

  • 사용자 이탈 위험
  • 실시간 피드백 어려움

원인:

  • Nanobanana API 자체 응답 시간
  • 고해상도 이미지 생성 (1920x1080)

개선 필요:

  • 모델 경량화 or 더 빠른 모델 탐색
  • 캐싱 전략 (동일 스타일 재사용)
  • WebSocket으로 실시간 프로그레스 바

2. 프롬프트 A/B 테스트 부족

문제:

  • 현재 프롬프트가 최선인지 확신 못함
  • 사용자 피드백 기반 최적화 미흡

개선 방향:

A/B 테스트 시스템 구축:

Version A: 현재 프롬프트
Version B: 수정된 프롬프트

→ 100명 사용자 테스트
→ 만족도 점수, 재생성 비율 비교
→ 더 좋은 버전 채택

3. 비용 최적화 미흡

현재 비용:

  • Gemini API: $0.08/건
  • Nanobanana: $0.10/건
  • Meshy 6: $0.30/건
  • 총 $0.48/건 (약 600원)

문제:

  • 사용자 100명 = $48 (약 6만원)
  • 스케일링 시 비용 급증

개선 방향:

1. 캐싱 전략
   - 동일 스타일 이미지 재사용
   - CDN 캐싱으로 재생성 방지

2. Gemini Flash 활용
   - Nanobanana 대신 Gemini Flash 2.5 사용
   - 비용: $0.10 → $0.05 (50% 절감)

3. Batch 처리
   - 여러 요청 묶어서 처리
   - API 호출 횟수 감소

4. 3D 청첩장 완성도

문제:

  • Meshy 6 모델의 퀄리티가 기대보다 낮음
  • 일부 이미지에서 왜곡 발생

개선 방향:

  • 3D 모델 프롬프트 고도화
  • 후처리 (Blender 등) 추가
  • 사용자 커스텀 옵션 제공

5. 사용자 테스트 부족

문제:

  • 실제 예비부부 사용자 테스트 못함
  • 내부 팀원 테스트만 진행

개선 방향:

사용자 테스트 계획:

1. 베타 테스터 모집 (예비부부 20쌍)
2. 실제 청첩장 제작 요청
3. 피드백 수집 (설문조사)
4. 개선 사항 반영
5. 정식 출시

🚀 향후 개선 방향

1. 개인화 기능 추가

현재: 템플릿 기반
향후: 사용자 스토리 기반

예시:
"우리는 영화관에서 만났어요"
→ AI가 영화 티켓, 팝콘 이미지 자동 삽입

"우리는 등산을 좋아해요"
→ AI가 산, 나무 배경 자동 생성

2. 멀티 언어 지원

현재: 한국어만 지원
향후: 영어, 일본어, 중국어 지원

→ 글로벌 시장 진출

3. 웨딩 업체 연동

PromiseMarry → 웨딩홀, 스튜디오 연결

예시:
청첩장 생성 → "이 홀이 마음에 드세요?"
→ 예약 연결 → 수수료 수익 모델

4. 소셜 기능 추가

친구들과 청첩장 공유
→ 좋아요, 댓글 기능
→ "가장 예쁜 청첩장" 투표
→ 커뮤니티 형성

11. 마무리

💬 회고 한 마디

"디자인 툴을 배우지 않아도, 누구나 자신만의 이야기를 담은 청첩장을 만들 수 있다는 것을 증명했습니다.

PM이자 개발자로서 기술이 사람들의 '특별한 순간'을 더 특별하게 만들 수 있다는 것을 경험했습니다.

3일간의 해커톤은 짧았지만, 배운 것은 평생 기억에 남을 것 같습니다.

이제 시작입니다. PromiseMarry Lab, 계속 발전시켜 나가겠습니다."


🔗 링크 모음


📊 프로젝트 성과 요약

항목 성과
개발 기간 3일
팀 구성 6명 (FE, BE, AI, Cloud)
API 개발 3개 주요 엔드포인트
평균 응답 시간 텍스트 3-5초, 이미지 30-60초
지원 톤 6가지 (formal/casual/modern/classic/romantic/minimal)
생성 페이지 3페이지 자동 레이아웃
차별화 기능 2D + 3D 청첩장 지원
문서화 1,000줄+ 가이드 작성

감사합니다! 🙏

반응형