플릿(Plit) - AI 캐릭터 채팅 플랫폼
NestJS 11Next.js 16TypeScriptPrisma 7 (PostgreSQL 18)Redis 7 (ioredis)Google Gemini APIClaude APIpgvector (시맨틱 메모리)ZustandTanStack QueryTossPaymentsClerk (Auth)Cloudflare R2Tailwind CSS 4PWA (커스텀 Service Worker)Web Push (VAPID)Docker ComposeSentry
링크
스크린샷
플릿 메인 화면 Hero Section
프로젝트 개요
플릿(Plit)은 10~20대 여성(웹소설·오토메 독자, 연애 리얼리티 시청자) 타겟의 AI 캐릭터 채팅 플랫폼입니다.
스토리 모드(감독형 AI — 호감도·분기 기반 에피소드 진행), 토크룸 모드(목적형 AI — 테마 드리븐 1:1/그룹 채팅), 캐릭터 챗 모드(관계형 AI — 친밀도 8단계·스킬 해금·31종 감정 표현)의 3가지 모드를 제공합니다.
Gemini(메인) + Claude(보조) 멀티모델 파이프라인, pgvector 시맨틱 메모리, 젬+행동력 이중 재화, TossPayments 결제, 한국어 특화 콘텐츠 안전 필터, POST-based SSE 스트리밍을 핵심 기술로 활용합니다.
서비스 기획부터 아키텍처 설계, AI 파이프라인, 결제, 인프라, 운영까지 전 과정을 1인 풀스택으로 구축·운영 중입니다.
담당 역할
풀스택 개발 (서비스 기획 → 시스템 아키텍처 설계 → DB 모델링 → AI 파이프라인 구현 → 프론트엔드/백엔드 구현 → 인프라 구성 → 운영)
주요 기능
- 3모드 AI 채팅 아키텍처 (스토리/토크룸/캐릭터 챗 — 모드별 독립 프롬프트 빌더·메모리 스코프·AI 지시문 분기)
- 캐릭터 독립 엔티티 설계 (N:M 참조 관계 — 캐릭터 원본은 characters 테이블, 모드별 맥락은 연결 테이블에서 분리 관리)
- 3단계 멀티모델 AI 파이프라인 (Target Resolution → Response Generation → State Update, 역할별 Gemini/Claude 모델 분리 오케스트레이션)
- POST-based SSE 실시간 스트리밍 (JSON 항목 점진적 파싱, 나레이션·대사·감정·호감도 변동을 청크 단위 즉시 전달)
- pgvector + Voyage AI 임베딩 기반 장기 메모리 (RRF 하이브리드 검색, 모드별 메모리 범위 차등 — 에피소드 8개, 방 12개, 크로스 컨텍스트)
- 친밀도 8단계 시스템 (캐릭터 챗 — -3~5 레벨, 31종 감정 표현 3단계 해금, 스킬 해금 시스템, AI 평가 기반 관계 수치 산정)
- 호감도 시스템 (스토리 모드 — 0~100 범위, ±5 단위 변동, 연속 변동 감쇄 알고리즘, affinitySnapshot 기반 되돌리기)
- 스토리 이벤트 상태 머신 (순차/조건부 트리거, 호감도 임계값 기반 자동 분기, 에피소드 전환 제어)
- 콘텐츠 안전 시스템 (13카테고리 4단계 위험도 필터, LLM 가드레일, 한국어 자모 분해·공백 삽입 우회 방지, 3-strike 정지 시스템)
- 젬+행동력 이중 재화 + TossPayments 결제 (선차감-환불 패턴, referenceId 기반 멱등 트랜잭션, 서버 측 결제 승인 → 젬 자동 충전)
- Plit+ 구독 시스템 (월간/연간 플랜, 월간 젬 자동 충전, 구독 만료 cron 처리, 구독자 전용 기능 해금)
- Redis 분산 락 기반 동시성 제어 (메모리 생성 중복 방지, AI 응답 실패 시 재화 자동 롤백)
- 콘텐츠 관리 어드민 패널 (스토리·에피소드·이벤트·캐릭터·토크룸 CRUD + AI 콘텐츠 자동 생성, 감사 로그)
- 2단계 Rate Limiting (IP 미들웨어 전역 300req/60s + 엔드포인트별 4-tier 사용자 제한)
- PWA + Web Push 알림 (커스텀 Service Worker, 오프라인 폴백, 미응답 세션 자동 넛지 — 세션당 횟수·쿨다운 제어)
- Cloudflare R2 이미지 스토리지 (캐릭터 WebP 이미지 업로드·서빙, 개발/프로덕션 버킷 분리)
기술적 의사결정
- 3단계 AI 파이프라인 설계: 입력 필터 → Target Resolution(경량 모델로 응답 캐릭터 결정) → Response Generation(메인 모델로 JSON 스트리밍) → State Update(호감도·감정·메모리 병렬 처리) → 출력 필터의 파이프라인을 설계하여 모드별 분기와 실패 복구를 구조화함
- 한국어 콘텐츠 안전 필터: Unicode NFC 정규화 + 자모 분해 알고리즘으로 '바ㅂ보' 같은 자모 조합 우회, 공백 삽입 우회를 차단하고, SSE 스트리밍 중 실시간 출력 검사까지 적용함
- 장기 대화 맥락 유지: 컨텍스트 윈도우 한계를 pgvector + Voyage AI 임베딩 + RRF(Reciprocal Rank Fusion) 하이브리드 검색으로 해결하고, 모드별 메모리 범위를 차등 적용하여 관련성 높은 기억만 RAG로 주입함
- 이중 재화 트랜잭션 정합성: 행동력 선차감 → AI 응답 생성 → 실패 시 자동 롤백의 흐름을 referenceId 기반 멱등 트랜잭션으로 설계하고, Redis 분산 락으로 메모리 생성 중복을 방지하여 재화 손실 없는 과금 구조를 구현함
- 멀티모델 비용 최적화: Gemini(메인 응답 생성)와 Claude(보조 평가/요약)를 역할별로 분리하고, 경량 모델(Flash Lite)을 입출력 필터·타겟 결정에 배치하여 품질 유지와 비용 절감을 동시에 달성함
- 호감도 인플레이션 방지: 같은 방향 연속 변동에 감쇄 알고리즘을 적용하고, affinitySnapshot 기반 되돌리기 기능으로 사용자가 선택지를 탐색할 수 있는 자연스러운 관계 변화 곡선을 구현함