안녕하세요! 퇴근 후 "되묻고 깊어지는 상담 대화"를 목표로 주역 상담 AI를 개발 중인 직장인 바이브코더입니다.
드디어 프로젝트가 로컬 개발 환경을 벗어나 배포작업을 진행중에 있습니다.
유튜브 다른 분들은 딸깍으로 해결하시던데 저는 너무나도 어렵군요...ㅠㅠ 어제 저녁부처 현재까지 뭔가 하나씩 안됩니다..ㅠㅠ
🛠️ My Vibe Coding Stack
- Frontend: Vercel (Next.js 16 App Router, Turbopack, Modern Zen Theme)
- Backend: Google Cloud Run (FastAPI / Python 3.11-slim, 0~10 오토스케일링)
- Database: Supabase Seoul Region (ap-northeast-2, PostgreSQL + pgvector 2,536건)
- LLM Engine: Vertex AI Gemini 2.5 Flash (asia-northeast3)
- Security & Regulatory: Zero-Trust Architecture & SaMD Wellness Guidelines
1. LLM API 교체 및 3초 지연시간 최적화 (Gemini 2.5 Flash)
로컬 Ollama(Gemma4) 기반 개발 환경에서 실제 운영 서비스로 전환하기 위해 Gemini 2.5 Flash API로 전격 교체했습니다. 이 과정에서 발생한 병목과 해결책입니다.
|
발생 문제 |
원인 및 해결 방법 |
최적화 성과 |
|
JSON 응답 잘림 |
Ollama 기본 num_ctx: 4096 부족 ➔ 16384 명시 주입 |
JSON 구조 파싱 완벽 안정화 |
|
응답 18초 지연 |
Gemini의 thinking_budget 기본값 과다 소모 ➔ ThinkingConfig(thinking_budget=0) 주입 |
응답 속도 18초 ➔ 3초 (6배 단축) |
|
토큰 비용 폭증 |
세션이 길어질수록 컨텍스트 누적 ➔ 최근 3턴(6발화) 슬라이딩 윈도우 적용 |
세션당 토큰 비용 50% 절감 |
2. 제로 트러스트 보안 & SaMD 웰니스 규제 대응
상용 서비스 출시에 맞춰 보안 스캐너(security_scan.py) 기준 0 Issues Clean 상태를 달성했습니다.
- BOLA(세션 하이재킹) 차단: CounselSession.user_id와 요청자 user_id 불일치 시 HTTP 403 즉시 차단
- Rate Limiter: IP당 1분 30회 슬라이딩 윈도우 제한 (HTTP 429)
- 컨테이너 하드닝: 비루트 사용자 appuser:1000 환경에서 가볍게 구동SaMD 의료기기 규제 대응: 외부 API 응답에서 safety_category 필드를 완전 제거하여 단순 웰니스 서비스 경계를 준수하고, 자살예방 핫라인(109) 안내 및 웰니스 면책 UI 패널을 추가했습니다.
3. 3계층 클라우드 배포 아키텍처
Browser ➔ Vercel (Next.js 16) ➔ Cloud Run (FastAPI) ➔ Supabase (PostgreSQL + pgvector)
- Supabase DB (Seoul): 64괘 386효 번역 완료 + 2,536건 HNSW 벡터 인덱스. RLS(Row Level Security) 적용 및 신규 가입 시 50 크레딧 자동 지급 트리거 구축.
- Google Cloud Run (Seoul): iching-counsel-api 무상태 컨테이너 오토스케일링 구동.
- Vercel Frontend: Modern Zen 다크 테마 UI, 6효 시각화 애니메이션, RAG 근거 패널 투명 공개.
4. 13시간 동안 식은땀 흘린 'Vercel 배포 파이프라인 락' 사건
배포 후 구글 로그인 시 HTTP 500 에러가 발생하여 코드를 3번이나 수정했지만 전혀 고쳐지지 않는 기이한 현상이 발생했습니다.
- 진짜 원인: 루트 vercel.json 파일에 존재하지 않는 "rootDirectory" 키가 적혀 있었습니다. 이로 인해 Vercel 빌드 서버가 조용히 Crash를 일으키며 13시간 동안 이전 옛 빌드 상태로 서비스가 고착되어 있었습니다. 코드를 아무리 고쳐도 프로덕션에 반영되지 않았던 것입니다!
- 해결: vercel.json 삭제 후 Vercel CLI (npx vercel --prod)로 직접 배포를 쏘아 파이프라인을 뚫었고, HTTP 500 ➔ 200으로 즉시 정상화되었습니다.
- 카카오 로그인 결단: 카카오 로그인 KOE101 에러(REST API 키 오타 및 플랫폼 도메인 복합 문제)가 지속 발생하여, 1인 개발 씬의 명확한 스코프 유지를 위해 카카오 배포를 제거하고 Google 로그인 단일 체제로 집중하기로 결단했습니다.
현재, 로그인 기능 구현후 웹앱이 작동이 되지 않아 수정중이며, 클로드 코드 및 안티그래비티의 토큰이 없어서 일단 오늘은 여기까지 하고자 합니다.ㅠㅠ 수정 완료되면 깃허브 레포부터 공개로 바꾸고자 합니다.
현재 프로젝트의 목표는 "해볼수 있는건 다해보는거" 라 손익분기 분석 및 유료 결제까지 추가하고자 합니다. 유료결제 추가후 공개 예정입니다.
크루님들께 드리는 질문!
드디어 정식 서비스의 기반이 무사히 클라우드에 안착했습니다!
- Vercel이나 Cloud Run 같은 멀티 클라우드 환경을 운용할 때, 배포 파이프라인의 조용한 실패(Silent Failure)나 빌드 서버 고착을 사전에 감지하는 자신만의 헬스체크 팁이 있으신가요?
2. 상용 API(Gemini 2.5 Flash 등)의 레이턴시를 3초대 이하로 지키면서, 유저 만족도를 높이는 UI/UX 연출(예: 스트리밍 타이핑, 로딩 스켈레톤 등) 노하우가 있다면 조언 부탁드립니다! 👇