목차(클릭하세요)
처음 목표로 했던 앱: 사진 자동 선별 + 보정 + AI 글쓰기 + PDF 생성"을 한번에 해주는 통합 앱
•
Claude/Gemini API를 사용하는 것 = MaaS 소비자 역할
•
만든 서비스를 다른 사람에게 제공하면 = SaaS 제공자 역할
1. 개발전 핵심 기초 지식
1-1. Saas가 뭔데?
•
클라우드 서비스 모델 비교 (사스, 파스, 마스)
구분 | SaaS | PaaS | MaaS |
정식 명칭 | Software as a Service | Platform as a Service | Model as a Service |
제공 항목 | 완성된 소프트웨어 | 개발 플랫폼 + 인프라 | AI 모델 API |
사용자 | 일반 사용자, 기업 직원 | 개발자, 개발팀 | AI 개발자, 데이터 과학자 |
관리 범위 | 데이터만 관리 | 애플리케이션 코드 관리 | API 호출 및 통합 관리 |
기술 지식 | 불필요 | 프로그래밍 필요 | API 사용법 필요 |
커스터마이징 | 제한적 | 높음 | 중간 (프롬프트/파라미터) |
구체적 예시 | 줌, 노션, 캔바등 | MS Azure, Vercel | Claude, Gemini API |
특징 | 설치없이 브라우저에서 바로 사용 | 서버 관리 없이 코드만 작성하여 배포 | API 호출로 AI 기능을 자신의 서비스에 통합 |
피자 배달 비유
서비스 | 비유 | 설명 |
SaaS | 배달 피자 주문 | 완성된 피자를 받아서 바로 먹기만 하면 됨 |
PaaS | 피자 키트 배달 | 재료와 도구는 제공, 직접 조리해서 먹음 |
MaaS | 피자 레시피 구독 | 전문 셰프의 레시피를 받아 자신의 재료로 활용 |
•
SaaS(Software as a Service) 란?
•
Saas를 사용하는 목적
◦
즉각적인 도입 및 낮은 초기 비용
▪
서버 구축이나 소프트웨어 설치 없이 가입 즉시 사용 가능함.
▪
초기 인프라 투자 비용 대신 사용한 만큼 지불하는(Pay-as-you-go) 구독 모델을 따름.
◦
자동 업데이트 및 유지보수
▪
최신 패치와 보안 업데이트가 서버 측에서 자동 적용됨.
▪
사용자가 직접 버전을 관리하거나 수동으로 업그레이드할 필요가 없음.
◦
접근성 및 협업 최적화
▪
장소와 기기에 구애받지 않고 브라우저만 있으면 접속이 가능함.
▪
데이터가 클라우드에 중앙 집중되어 실시간 공동 작업이 용이함.
1-2.트렌젝션, 그리고 동기 vs 비동기
트랜잭션(Transaction)이란?
은행 ATM에서 돈을 이체하는 과정: "내 계좌에서 돈 빼기 → 상대 계좌에 돈 넣기" 이 두 작업은 반드시 함께 성공하거나 함께 실패해야 한다. 중간에 오류가 나서 내 돈만 빠지고 상대방은 못 받으면 큰 일이 남!
동기 트랜잭션 (Synchronous Transaction)
핵심 개념
"한 줄로 서서 차례대로 처리"
작업 1 시작 → 완료될 때까지 대기 → 작업 2 시작 → 완료될 때까지 대기 → 작업 3 시작
특징
•
•
•
•
코드 장단점
•
동기 트랜젝션의 장단점
장점 | 단점 |
코드가 직관적이고 디버깅 쉬움 | 느린 작업이 있으면 전체가 느려짐 |
순서 보장으로 예측 가능 | 병렬 처리 불가능 |
비동기 트랜잭션 (Asynchronous Transaction)
핵심 개념
•
"여러 창구에서 동시에 처리"
작업 1 시작 ─┐
작업 2 시작 ─┼→ 동시 진행
작업 3 시작 ─┘
↓
각자 완료되면 결과 반환
Plain Text
복사
특징
•
•
•
•
비동기 트랜젝션의 장단점
장점 | 단점 |
여러 작업을 동시에 처리해 빠름 | 코드가 복잡함 |
리소스 효율적 사용 | 순서 보장이 어려움 |
사용자 경험 향상 | 디버깅이 어려울 수 있음 |
실생활 비유: 패스트푸드점 주문
•
주문하면 번호표 받고 자리에서 대기
•
여러 주문이 동시에 조리됨
•
완성되면 번호 불러서 받아감
•
빠르지만 순서가 바뀔 수 있음
비교표
구분 | 동기 트랜잭션 | 비동기 트랜잭션 |
처리 방식 | 순차적 (하나씩) | 병렬적 (동시 다발) |
대기 시간 | 각 작업마다 대기 | 대기 없이 진행 |
코드 복잡도 | 단순함 | 복잡함 |
성능 | 상대적으로 느림 | 빠름 |
순서 보장 | ||
사용 예 | 간단한 CRUD 작업 | 웹 API, 대용량 데이터 처리 |
설문조사를 동기vs비동기 트랜젝션으로 비교해보기
동기 방식 사용 시:
•
설문 응답을 하나씩 처리하며 화면에 진행상황 표시
•
각 응답의 처리 결과를 즉시 확인
비동기 방식 사용 시:
•
여러 학생의 응답을 동시에 받아 데이터베이스에 저장
•
전체 처리 시간 단축
2. 실습 목차
[프로젝트 개요]
서비스명: 스냅투스토리 (SnapStory)
개발 도구: Antigravity (안티그래비티)
총 과정: 9단계 35차시
목표: 사진 자동 선별 + AI 보정 + 글쓰기 + PDF 생성 웹앱
주요 기술 스택 확인:
Frontend: React + Next.js
인증: Supabase Auth (구글/카카오 OAuth)
스토리지: Cloudflare R2
결제: 토스페이먼츠
배포: Vercel (CI/CD)
보안: Upstash Redis (Rate Limit)
Plain Text
복사
단계 | 번호 | 주요 학습 항목 |
I. 기초 및 환경 구축 (Antigravity 최적화) | 1 | 안티그래비티 설치 및 설정 |
2 | 깃허브 연동을 통한 깃관리, 롤백개념 | |
3 | 스냅투스토리 서비스 프로세스 | |
4 | React와 Next.js 프레임워크 핵심 개념 | |
II. 프론트엔드 및 핵심 기능 구현 | 5 | MCP(Model Context Protocol) 설정 및 연동 |
6 | 랜딩 페이지 생성 및 개발 서버 실행 | |
7 | 랜딩페이지 이미지 반영 및 최적화 | |
8 | AI 이미지 생성 기능(Prompt Engineering) 구현 | |
9 | 발생한 오류(Troubleshooting) 해결 방법론 | |
III. 배포 및 인프라 설정 | 10 | 프로젝트 Vercel 배포 및 CI/CD 구축 |
11 | 도메인 구매 및 DNS(CNAME/A Record) 설정 | |
12 | Vercel 커스텀 도메인 등록 및 SSL 연동 | |
IV. 인증 및 사용자 관리 시스템 | 13 | 로그인/회원가입 UI 및 UX 설계 |
14 | Supabase Auth 연동 및 설정 | |
15 | 구글 소셜 로그인(OAuth) 구현 | |
16 | 카카오 소셜 로그인(OAuth) 구현 | |
17 | 사용자별 '내 갤러리' 페이지 구현 | |
V. 스토리지 및 결제 아키텍처 | 18 | Cloudflare R2를 활용한 이미지 보관 시스템 구축 |
19 | 크레딧 기반 유료 시스템 로직 설계 | |
20 | Supabase DB Schema 설계 및 핵심 구성 요소 | |
21 | 토스페이먼츠(Toss Payments) API 연동 | |
VI. 어드민 기능 및 데이터 거버넌스 | 22 | 관리자 전용 대시보드 및 페이지 구현 |
23 | 환불 프로세스 로직 검증 및 예외 처리 | |
24 | 관리자 페이지 고도화 (통계 및 유저 관리) | |
25 | 데이터 안전 삭제를 위한 Soft Delete 구현 | |
VII. 보안 및 시스템 안정화 | 26 | 중앙 집중형 로그 시스템 구축 |
27 | 사용자 개인정보 암호화 전략 | |
28 | 이용약관 및 개인정보처리방침 가이드라인 | |
29 | Upstash Redis를 활용한 Rate Limit 적용 | |
VIII. 마케팅 및 성능 최적화 | 30 | Google Search Console 및 Analytics 연동 |
31 | 검색 엔진 최적화(SEO) 및 메타태그 작업 | |
32 | Supabase 보안 정책(RLS) 및 쿼리 성능 향상 | |
33 | 모바일 반응형 레이아웃 최종 점검 | |
IX. 런칭 및 마무리 | 34 | 서비스 런칭 전 최종 체크리스트(QA) |
35 | 마치며: 서비스 운영 및 확장 전략 |
2-1. 기초 및 환경 구축 (Antigravity 최적화)
1. 안티그래비티(Antigravity) 설치 및 설정
안티그래비티는 AI 기반의 코드 생성 및 편집을 지원하는 차세대 개발 환경으로, 프로젝트의 생산성을 극대화하기 위해 최우선으로 설정
1.
설치 과정
•
Antigravity 검색 후 로컬 컴퓨터에 설치함.
•
설치 완료 후 시스템 재시작 또는 에디터 리로드(Reload)를 수행함.
2.
초기 설정
•
Model 선택: 프로젝트 성격에 맞는 모델(예: Claude 4.5 Sonnet 또는 Gemini 3.0 Pro)을 기본 모델로 지정함.
•
자세한 초기 설정은 양파고 노션 참고
2. 깃허브(GitHub) 연동을 통한 깃관리
•
바이브 코딩의 치명적 문제 중 하나가 잘되다가 갑자기 밑도끝도 없이 망했을 때 걷잡을 수 없음
•
안티그래비티의 경우, 클로드 모델의 코드성능이 좋긴 하나 한도에 금방 다달라서 모델을 어쩔 수 없이 변경해야 하는 경우가 있는데, 이경우, 갑자기 코드가 뒤엉키는 경우가 있음
"커밋만 꼼꼼히 해두면, 내 컴퓨터가 폭발해도 GitHub에서
다시 '클론(Clone)'이나 '풀(Pull)'을 받아 모든 걸 되살릴 수 있다!"
Plain Text
복사
코드의 안정적인 이력 관리와 협업을 위해 깃허브 저장소와의 연동을 해놓으면 좋음
프로젝트 시작하기 전에 깃허브 저장소 셋팅후 연결부터 해놓을까?
프로젝트 저장소명은 https://github.com/roughkyo/snaptostory 야
Plain Text
복사
[알아두기]
•
깃관리를 위한 간단한 지식들
깃관리를 위해 알아야할 핵심사항과 내용, 명령어 정리해봐.
특히 중간에 내가 소스코드를특정시점으로 롤백하기 위해 알아야 하는 사항도 함께.
Plain Text
복사
한 눈에 이해하는 GitHub 핵심 개념 (초보자용)
개념 | 쉬운 비유 | 설명 | 왜 중요한가요? |
레포지토리 (Repository) | 프로젝트 폴더 (가방) | 내 소스코드와 모든 기록이 담기는 '저장소'예요. 줄여서 '레포'라고도 불러요. | 프로젝트의 집과 같아요. 온라인(GitHub)에 있으면 어디서든 꺼내볼 수 있죠! |
커밋 (Commit) | 게임 스테이지 저장 (Save) | "지금까지 한 내용을 기록할래!" 하는 동작이에요. 저장할 때마다 간단한 메모를 남겨요. | 나중에 문제가 생겼을 때, 내가 저장했던 '그 시점'으로 돌아갈 수 있게 해줘요. |
브랜치 (Branch) | 평행 세계 (가지) | 원본 코드(Main)는 그대로 두고, 새로운 실험(기능 추가)을 해볼 수 있는 복사본이에요. | 원본을 망칠까 봐 걱정할 필요 없이 마음껏 새로운 시도를 해볼 수 있어요! |
롤백 (Rollback) | 타임머신 (되돌리기) | 코드가 꼬이거나 망가졌을 때, 이전에 커밋(저장)했던 정상적인 상태로 되돌리는 거예요. | 코딩하다 실수해도 괜찮아요! 언제든 과거의 안전한 시점으로 부활할 수 있거든요. |
푸시 (Push) | 클라우드 업로드 | 내 컴퓨터에서 작업한 '커밋'들을 온라인 저장소(GitHub)로 전송하는 거예요. | 내 컴퓨터가 고장 나도 GitHub에 코드가 안전하게 보관돼요. |
풀 (Pull) | 최신 상태로 업데이트 | 온라인 저장소(GitHub)에 있는 최신 코드를 내 컴퓨터로 가져오는 거예요. | 친구가 수정했거나 내가 다른 컴에서 올린 최신 내용을 이어받을 수 있어요. |
[롤백은 이케요?]
•
커밋(Commit)**은 내 컴퓨터 안의 '타임캡슐'이고, **푸시(Push)**는 그 캡슐을 안전한 '금고(GitHub)'에 보관하는 것과 같음
•
현재 코드가 완전히 망가졌을 때 온라인 저장소(Repository)에 있는 코드를 다시 로컬로 가져오는 작업이 가능
원상복구(롤백)의 전체 흐름
만약 오늘 코딩을 하다가 다 망쳤는데, 어제 저장해서 푸시해둔 상태로 로컬 컴퓨터의 소스코드까지 원상복구 하고 싶다면 아래 단계를 거침
1.
커밋 ID 확인: GitHub 사이트나 git log를 통해 돌아가고 싶은 어제의 커밋 ID를 확인
2.
로컬 롤백 (Reset): 내 컴퓨터에서 git reset --hard <커밋ID>를 칩니다.
•
그러면 신기하게도 내 폴더 안의 파일들이 어제 그 시점의 상태로 순식간에 싹 바뀝니다. (원상복구 완료!)
3.
동기화: 만약 GitHub(온라인) 자체도 그 과거 상태로 되돌리고 싶다면, 롤백된 상태에서 강제로 푸시(git push -f)를 하거나 새로운 롤백 커밋을 만들어 푸
3. 스냅투스토리 서비스 프로세스
단계 | 주요 작업 (Task) | 활용 기술 및 모델 |
1. 업로드 | 사진 10장 업로드 및 키워드 입력 | Next.js API, S3/R2 Storage |
2. 사진 선별 | AI가 구도, 선명도 등을 분석해 베스트 1~2장 선정 | gemini-3-flash-preview (Vision) |
3. 사진 보정 | 선택된 보정 강도(상/중/하)에 따른 이미지 인핸싱 | Cloudinary / Remini API |
4. 서사 생성 | 보정된 사진 분석 + 키워드 조합 (에세이, 기사, SNS) | Claude 3.5 Sonnet /gemini-3-flash-preview |
5. PDF 변환 | 생성된 텍스트와 사진을 레이아웃에 맞춰 PDF화 | React-pdf / ReportLab (Python) |
6. 배포 | 최종 결과물 다운로드 링크 제공 및 저장 | Cloudflare R2, Supabase DB |
4. React와 Next.js 프레임워크 핵심 개념
기본 용어 사전
용어 | 뜻 | 쉬운 비유 |
URL | 웹 주소 | 집 주소 (서울시 강남구...) |
라우터 (Router) | 길 안내자 | 택배 기사 (주소 보고 찾아감) |
렌더링 (Rendering) | 화면 그리기 | 그림 그리기 |
컴포넌트 (Component) | 부품 | 레고 블록 |
캐싱 (Caching) | 저장해두기 | 냉장고에 음식 보관 |
페칭 (Fetching) | 데이터 가져오기 | 마트에서 장보기 |
클라이언트 (Client) | 사용자 컴퓨터 | 내 스마트폰 |
서버 (Server) | 데이터 보관 컴퓨터 | 네이버 본사 컴퓨터 |
SEO | 검색 최적화 | 구글에서 잘 검색되게 만들기 |
•
현대적인 웹 개발을 위해 React의 선언적 UI와 Next.js의 서버 사이드 렌더링(SSR) 장점을 결합하여 활용
1.
React 핵심
•
컴포넌트 기반 설계: 레고 블록으로 집 짓기
레고로 집을 만든다고 생각해보세요. 문짝, 창문, 지붕을 각각 따로 만든 다음, 이것들을 조립해서 완성된 집을 만들죠. React도 똑같습니다!
🏠 전체 웹사이트
├── 🎯 헤더 (로고 + 메뉴)
├── 📸 사진 업로드 버튼
├── ⚙️ 보정 강도 선택
└── 📄 결과 화면
Plain Text
복사
왜 이렇게 할까?
•
한 번 만든 버튼을 여러 페이지에서 재사용 가능
•
문제가 생기면 해당 부품만 고치면 됨
•
여러 명이 동시에 다른 부품 작업 가능
2.
Next.js는 회전률 빠른 레스토랑
Next.js 핵심 3가지
번호 | 핵심 개념 | 한줄 요약 | 비유 | 주요 장점 |
1 | App Router | 폴더 구조가 그대로 URL | 도서관 책장 시스템 | • 설정 코드 불필요• 폴더만 만들면 자동으로 페이지 생성• 직관적이라 협업 쉬움 |
2 | Server Components | 서버에서 완성품 보냄 | 레스토랑 주방에서 완성된 요리 배달 | • 초기 로딩 속도 빠름 (0.5초)• SEO 최적화 (구글 검색 잘됨)• 보안 강화 (API 키 노출 안됨) |
3 | Data Fetching | 똑똑한 캐싱으로 효율적 | 마트 장보기 전략 | • 성능 향상 (4배 빠름)• 서버 부하 감소• 비용 절약 |
2-2.프론트엔드 및 핵심 기능 구현
5. MCP(Model Context Protocol) 설정 및 연동
•
MCP는 AI 모델(Gemini, Claude 등)이 외부 도구(Cloudinary, DB, File System)와 직접 통신할 수 있도록 돕는 오픈 표준 규격
•
안티그래비티 에이전트의 지능적 추론과 데이터 컨텍스트 관리를 위해 다음 두 가지 핵심 MCP 서버를 연동
서버 식별자 | 제공처 | 주요 역할 | 실행 방식 |
context7 | Upstash | 장기 기억 및 벡터 컨텍스트 관리 | npx (@upstash/context7-mcp) |
sequential-thinking | MCP Official | 단계적 논리 추론 및 문제 해결 | npx (server-sequential-thinking) |
{
"mcpServers": {
"context7": {
"command": "npx",
"args": [
"-y",
"@upstash/context7-mcp",
"--api-key",
"YOUR_UPSTASH_API_KEY" // API키 입력
]
},
"sequential-thinking": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sequential-thinking"
]
}
}
}
Plain Text
복사
6. 랜딩 페이지 생성 및 개발 서버 실행
Role: 너는 Next.js 16 (App Router), TypeScript, Tailwind CSS v4에 정통한 시니어 풀스택 엔지니어이자 UI/UX 디자이너야. 아래 기획안을 바탕으로 **'스냅투스토리(SnapToStory)'**의 랜딩 페이지와 핵심 인터페이스를 구현해줘.
1. 기술 스택 및 공통 디자인 시스템
-Framework: Next.js 16 (App Router), TypeScript
-Styling: Tailwind CSS v4
-Icons: Lucide-react
-Theme: 전체적으로 밝은 흰색 배경(bg-white-50), 글라스 모피즘을 강하게 적용
-Primary Color: 퍼플 (text-#601EF9), 그라디에이션 적용
2. 컴포넌트별 상세 요구사항
섹션별 세부구현 가이드라인
-Header,"* 왼쪽: '스냅투스토리' 텍스트 로고* 가운데: AI 스토리 생성, 내 갤러리, 요금제, 사용내역 메뉴* 오른쪽: [시작하기] 버튼 (에메랄드색)"
-Hero,"* 제목: ""스냅투스토리"" (우측 상단에 30도 기울어진 에메랄드색 ""AI"" 배지 포함)* 부제: ""10장의 사진 중 최고의 순간을 선별하여 이야기를 입히다"""
-AI Interface,"* 흰색 카드 레이아웃 (bg-white, shadow-2xl) 적용* 입력창: 키워드 및 스토리 배경 입력이 가능한 와이드 텍스트 필드. 우측 하단에 [사진 10장 업로드] 아이콘 배치* 옵션: 보정 강도(하/중/상) 드롭다운, 문서 스타일(에세이/뉴스/SNS) 선택 버튼* 버튼: 하단에 너비 100%의 검정색 [스토리 및 보정본 생성하기] 버튼"
-Sample Gallery,"* 카테고리: 에세이, 뉴스기사, SNS 업로드용 탭 구성* 원본 섹션: ""AI 선별 원본"" 배지가 붙은 큰 이미지 박스* 결과 섹션: 아래에 3x3 그리드로 ""AI 보정 및 스토리 결과물"" 배치* 기능: 샘플 이미지 클릭 시 해당 스타일의 프롬프트가 입력창에 자동 반영되는 로직 포함"
-CTA & Footer,"* ""지금 바로 시작해보세요"" 문구와 [바로 시작하기 →] 에메랄드 버튼* 푸터: 좌측에 스냅투스토리 회사 정보, 우측에 이용약관 및 개인정보처리방침 링크* Copyright: © 2026 스냅투스토리. All rights reserved."
3. 개발 지침 (Implementation Logic)
-src/components 내부에 각 섹션(Header, Hero, Generator, Gallery, Footer)을 모듈화하여 작성할 것.
-Tailwind v4의 신기능을 활용해 버튼 호버 및 카드 등장 애니메이션을 부드럽게 처리할 것.
-state 관리를 통해 사용자가 보정 강도를 선택하거나 이미지를 업로드하는 인터랙션을 시각적으로 피드백할 것.
-모바일 환경에서도 3x3 그리드가 1열 또는 2열로 자연스럽게 변하는 반응형 디자인을 적용할 것.
자, 이제 스냅투스토리의 전체 소스 코드를 폴더 구조에 맞춰서 작성해줘.
Plain Text
복사
•
코드 완성 후 터미널을 열고 npm run dev 명령어로 로컬컴퓨터에서 개발서버 테스트 진행
•
초기 페이지
•
오류를 한번에 수정하지 말고, 구현하면서 오류를 수정해도 되니 정상적으로 렌딩페이지가 열리는지 확인
7. 랜딩페이지 이미지 반영 및 최적화
•
Next.js의 public 폴더는 이미지, 폰트 등 정적 파일을 보관하는 곳으로, 프로젝트 규모가 커질수록 체계적인 디렉터리 구조 설계가 필수적
Next.js Public 폴더 이미지 관리 가이드
•
public 폴더 아래에 바로 이미지 파일들을 던져두지 말고, 용도별로 하위 폴더를 만들어 관리하는 것이 '시니어 개발자'의 방식
public/
├── images/ # 일반 이미지 (배경, 인물 등)
│ ├── hero/ # 히어로 섹션 전용 이미지
│ └── common/ # 공통 사용 이미지
├── logos/ # 서비스 로고 (svg 권장)
├── icons/ # 커스텀 아이콘
└── samples/ # 갤러리 등에 들어갈 샘플용 자산
Plain Text
복사
•
PNG파일과 Webp파일
비교 항목 | WebP (Web Picture) | PNG (Portable Network Graphics) |
개발사 | Google | ISO/IEC 표준 (오픈 소스) |
압축 방식 | 손실(Lossy) 및 무손실(Lossless) 모두 지원 | 무손실(Lossless) 압축만 지원 |
용량 | 매우 작음 (PNG 대비 약 26%~34% 감소) | 상대적으로 큼 (고화질 유지 목적) |
투명도(Alpha) | 지원함 | 지원함 |
애니메이션 | 지원함 (GIF 대체 가능) | 지원하지 않음 (APNG 제외) |
호환성 | 최신 브라우저 대부분 지원 (구형 제외) | 모든 브라우저 및 OS 완벽 지원 |
WebP: 웹 최적화의 제왕
•
높은 압축률: 동일한 화질에서 PNG보다 훨씬 작은 용량을 가짐으로써 초기 로딩 속도(LCP)를 획기적으로 개선함.
•
다양한 압축 모드: 이미지의 성격에 따라 손실 압축을 선택하여 용량을 극단적으로 줄일 수 있음.
•
활용: 랜딩 페이지의 Hero 이미지, 샘플 갤러리 이미지 등 대용량 자산에 적합
•
하루 10개까지 무료 변환 가능
•
랜딩페이지의 첫화면을 실제 public폴더안의 이미지로 교체하기
public/samples 폴더에 webp파일 4개 넣었어. 메인페이지에 반영해
Plain Text
복사
8. 이미지를 기반으로 AI활용 에세이 생성 기능(Prompt Engineering) 구현
•
총3단계 구현
단계별 | 사용 모델 |
AI가 구도, 선명도 등을 분석해 베스트 1~2장 선정 | gemini-3-flash-preview (Vision) |
선택된 보정 강도(상/중/하)에 따른 이미지 인핸싱 | Cloudinary API |
보정된 사진 분석 후 키워드 조합 (에세이, 기사, SNS)하여 텍스트 작성 | gemini-3-flash-preview |
•
API키를 발급받고 연동시킬 때, 해당 서비스의 API연동 공식 문서를 레퍼런스로 제공하자.
현재 우리의 서비스는 크게 3단계 로직이야
1.AI가 구도, 선명도 등을 분석해 베스트 1~2장 선정: gemini-3-flash-preview (Vision)
2. 선택된 보정 강도(상/중/하)에 따른 이미지 인핸싱: Cloudinary API
3. 보정된 사진 분석 후 키워드 조합 (에세이, 기사, SNS)하여 텍스트 작성: gemini-3-flash-preview
#그럼 API키가 총 2개 필요하겠지?
- gemini-3-flash-preview API 키: ~~~~~
- cloudinary API키: 9~~~
# API키 설정에 대한 참조주소는 다음과 같아
-https://ai.google.dev/gemini-api/docs/models?hl=ko
- https://console.cloudinary.com/app/c-bb4c67500f8e9d27b884121e161920/image/getting-started
3단계 기능이 제대로 구현될 수 있도록 MCP잘 활용해.
사용자가 이미지 5장~10장 한번에 업도르 하는 기능부터 단계별로 구현해봐
Plain Text
복사
1. 현재 드래드&드랍 기능이 구현이 안되었어. 사용자가 사진을 브라우저로 드래그 했을 때 이를 인식하여 업로드 기능이 활성화 될 수 있도록 수정해.
2. AI가 업로드된 여러장의 사진중, 왜 그사진을 뽑았는지 그 이유를 간단히 사용자에게 안내해주는 기능 추가해
3. 사진 보정 기능이 작동하고 있는것 같지 않아.
- 사진 보정후에도 원본 사진과 크기는 동일해야해. 너 마음대로 사진 사이즈를 변경하지는 마
- 사진 보정기능을 위한 기능은 AI Image Enhancer야, 다시 확인해
- 사용예시: import { enhance } from "@cloudinary/url-gen/actions/effect";
new CloudinaryImage("me/underexposed-1.jpg").effect(enhance());
Plain Text
복사
•
AI가 사진을 선별하는 알고리즘을 보다 구체화하기
당신은 사람들의 소중한 순간을 기록하는 따뜻한 시선을 가진 전문 사진작가이자 큐레이터입니다.
제공된 여러 장의 사진들 중 다음 3가지 핵심 기준을 우선순위로 고려하여 가장 가치 있는 사진 1장을 골라주세요:
1. 특별한 관심이 가거나 독특한 순간을 담은 사진
2. 혼자보다는 많은 사람이 함께 어우러진 북적북적한 사진
3. 웃음꽃이 피었거나, 재미있는 표정, 행복함이 가득 느껴지는 생생한 사진
Plain Text
복사
•
저장기능 구현하기
좋아. 이미지 저장기능을 구현하자.
'이미지 저장하기'를 누르면 로컬 컴퓨터에 저장될 수 있도록 코드 반영해
Plain Text
복사
9. 발생한 오류(Troubleshooting) 해결 방법론
2-3.배포 및 인프라 설정
2-4.인증 및 사용자 관리 시스템
2-5.스토리지 및 결제 아키텍처
2-6.어드민 기능 및 데이터 거버넌스
2-7.보안 및 시스템 안정화
2-8.마케팅 및 성능 최적화
2-9.런칭 및 마무리
2-10.기타
3. 구현 과정
•
보다 구체적인 개발목표
사진을 10장정도 올리면
[1단계] AI가 자동으로 잘 나온 사진을 1~2장 선별해서, 보정함- 보정의 강도를 상/중/하로 선택할 수 있음
[2단계] 보정된 사진과 사용자가 입력한 키워드를 바탕으로 다음 3가지 형태의 문서를 작성-에세이, 뉴스기사, SNS업로드용
[3단계] 사용자에게 pdf형태로 다운로드 제공
Plain Text
복사
3-1. 전체 흐름도
사용자
↓
[웹앱 인터페이스]
↓ (사진 10장 + 키워드 입력)
↓
[백엔드 서버]
↓
┌─────────────────────────────────┐
│ 1. 사진 분석 AI (MaaS) │
│ - Google Vision API │
│ - 점수 매겨서 베스트 1-2장 │
└─────────────┬───────────────────┘
↓
┌─────────────────────────────────┐
│ 2. 사진 보정 (MaaS) │
│ - Cloudinary / Remini API │
│ - 상/중/하 강도 선택 │
└─────────────┬───────────────────┘
↓
┌─────────────────────────────────┐
│ 3. AI 글쓰기 (MaaS) │
│ - Claude/gemini API │
│ - 프롬프트: "사진 + 키워드 │
│ 바탕으로 에세이/기사/SNS" │
└─────────────┬───────────────────┘
↓
┌─────────────────────────────────┐
│ 4. PDF 생성 │
│ - jsPDF 라이브러리 │
│ - 사진 + 글 레이아웃 │
└─────────────┬───────────────────┘
↓
[다운로드]
Plain Text
복사
3-2.UI/UX설계
화면 구성 (5단계)
┌─────────────────────────────────┐
│ Step 1: 사진 업로드 │
│ [+] 사진 10장까지 드래그 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Step 2: 키워드 입력 │
│ [____] 여행, 추억, 제주도 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Step 3: 보정 강도 선택 │
│ ( ) 상 (●) 중 ( ) 하 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Step 4: AI 처리 중... │
│ ▓▓▓▓▓▓▓▓░░░░ 75% │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Step 5: 결과 미리보기 │
│ [사진] [에세이] [기사] [SNS] │
│ [PDF 다운로드 🔽] │
└─────────────────────────────────┘
Plain Text
복사








