본문으로 바로가기

Petty · Character AI · 2026

김현중

페티 — 대화로 이어가는 나만의 이야기

캐릭터를 만나고, 다음 장면을 함께 만들어가는 AI 대화 앱입니다.

서비스 방문
페티 — 대화로 이어가는 나만의 이야기 프로젝트 대표 이미지

프로젝트 개요

페티는 AI 캐릭터와 대화하며 역할극과 이야기를 이어가는 앱입니다. 캐릭터와 스토리 설정, 대화 기억, 답장 추천을 연결하고 있습니다. OpenRouter 기반 모델 응답을 스트리밍하며, 웹과 모바일을 함께 운영합니다.

답변보다 다음 장면이 궁금한 대화

페티에서는 사용자가 질문을 던지고 답을 받는 것보다, 캐릭터와 함께 이야기를 이어가는 경험이 중요합니다. 캐릭터의 말투와 설정이 유지되고 이전 대화가 다음 장면에 연결되어야 이야기에 머물 수 있다고 생각했습니다.

캐릭터를 발견하는 화면부터 대화, 다시 돌아왔을 때의 이력까지 하나의 제품으로 만들고 있습니다. 기획·디자인·개발과 서비스 운영은 혼자 진행합니다.

캐릭터를 고르는 순간부터

사용자는 취향에 맞는 캐릭터와 스토리를 선택하고, 설정된 세계 안에서 대화를 시작합니다. 진행한 대화는 다시 열 수 있고, 다른 답변을 보고 싶을 때는 재생성을 사용할 수 있습니다.

다음 말을 떠올리기 어려울 때는 답장 추천이나 선택지가 대화를 이어갈 실마리를 줍니다. 이 기능도 단순히 무작위 문장을 보여주지 않고, 최근 대화와 축적된 기억을 참고하도록 구성했습니다.

빠르게 도착하고, 편하게 읽히는 응답

본문 생성은 OpenRouter에 연결한 모델을 사용합니다. Lambda에서 인증과 대화 소유권을 확인한 뒤 SSE로 생성되는 내용을 전달하고, 완료된 본문과 메시지 상태를 저장합니다.

서버가 텍스트를 보내는 속도와 사람이 읽는 속도는 다릅니다. 화면에는 별도의 표시 큐를 두어 첫 부분은 바로 보여주고, 이후 문장은 읽기 편한 속도로 이어지게 했습니다. 서버의 저장과 완료 처리는 화면 애니메이션을 기다리지 않습니다.

이 둘을 나누면서 답변이 늦게 보이는 문제와, 한꺼번에 쏟아지는 문장 때문에 읽기 어려운 문제를 따로 다룰 수 있었습니다.

긴 대화에서 놓치지 않으려는 것

대화가 길어지면 모든 메시지를 그대로 모델에 보낼 수는 없습니다. 최근 대화 이력과 별도로 축적한 기억을 조합하고, 재생성할 때는 이전 답변 버전도 보존합니다.

응답 언어와 캐릭터의 화자 표시도 별도로 확인합니다. 한국어로 이어가던 이야기에 다른 언어가 섞이거나, 화면에 보인 답변과 저장된 답변이 달라지는 상황을 줄이기 위한 처리입니다.

실패하거나 중단한 턴은 정상 완료된 대화와 구분하고, 사용량 처리도 그 상태와 맞춥니다. 대화의 몰입감을 유지하려면 문장 생성뿐 아니라 이력과 상태가 함께 맞아야 했습니다.

웹과 모바일이 공유하는 앱

Next.js 정적 출력과 Capacitor를 사용하고, 데이터와 인증은 AWS 서버리스 백엔드에 연결합니다. TanStack Query와 Zustand로 서버 데이터와 화면 상태를 나눠 관리합니다.

AI 공급자와 전송 방식은 대화 화면과 분리했습니다. 화면은 대화·메시지·스트림이라는 계약을 사용하고, 실제 모델 호출과 저장은 어댑터가 연결합니다. 모델을 바꾸는 일이 화면 전체를 고치는 일로 번지지 않도록 한 선택입니다.

실제 스토리 탐색 화면

현재 서비스의 홈과 공개 스토리 상세 화면입니다. 추천에서 이야기를 발견하고, 설정을 살펴본 뒤 대화를 시작하는 흐름을 보여줍니다.

페티 실제 스토리 탐색 홈
추천과 장르 탐색에서 새로운 이야기를 발견합니다.
페티 실제 공개 스토리 상세
이야기와 캐릭터의 설정을 살펴보고 대화를 시작합니다.

페티 사용해 보기 · 웹앱 열기