AI 캐릭터와 대화하는 롤플레잉 챗봇, AlterAI를 만든 이유
도입
사이드 프로젝트를 여러 개 굴리다 보면 도구성 앱만 만들게 되진 않습니다. 이번에 소개할 AlterAI는 실용성보다는 순수하게 대화형 UX와 AI 캐릭터라는 주제 자체에 흥미가 생겨서 시작한 프로젝트입니다. Appler나 Pixaloom처럼 특정 문제를 해결하는 도구가 아니라, AI와 캐릭터를 통해 대화한다는 게 어떤 경험일지 직접 만들어보고 싶어서 시작했습니다. 여러 사이드 프로젝트를 동시에 굴리다 보니 성격이 완전히 다른 프로젝트를 하나쯤 가지고 있는 것도 나쁘지 않다고 느꼈습니다.

어떤 앱인가
AlterAI는 Google Gemini API를 기반으로 한 AI 캐릭터 롤플레잉 챗봇입니다. 사용자가 이름, 성격, 외모, 말투 같은 설정으로 캐릭터를 직접 만들고, 그 캐릭터와 채팅방을 열어 대화를 이어갈 수 있습니다. 채팅방마다 캐릭터와 모델, 대화 톤을 따로 지정할 수 있어서, 같은 캐릭터라도 채팅방에 따라 다른 분위기의 대화를 만들 수 있습니다. 현재는 클로즈드 상태로 계속 다듬고 있는 프로젝트입니다.
핵심 기능
캐릭터 생성 스튜디오에서는 이름과 키워드만 입력해도 AI가 성격, 외모, 직업 같은 캐릭터 프로필을 자동으로 만들어줍니다. 결과가 마음에 안 들면 특정 항목만 골라 다시 다듬을 수도 있습니다.
채팅방마다 사용할 모델, 대화의 창의성 수준, 초기 상황과 캐릭터 간 관계 설정을 따로 저장할 수 있어서, 캐릭터별 채팅방별로 다른 분위기를 유지할 수 있습니다. 대화의 창의성 수준은 안정적인 톤부터 자유분방한 톤까지 단계로 나눠 고를 수 있게 했는데, 같은 캐릭터라도 이 값에 따라 응답 스타일이 꽤 달라져서 신경 써서 나눈 부분입니다.
대화가 길어지면 이전 내용을 자동으로 요약해 컨텍스트로 유지하는 기능도 넣었습니다. 매번 처음부터 설명하지 않아도 캐릭터가 지난 대화를 기억하는 것처럼 느껴지게 하려는 목적입니다.
API 키가 없어도 쓸 수 있도록 별도 프록시 서버를 두었고, 여러 개의 API 키를 등록해서 상황에 따라 바꿔 쓸 수 있게 만들었습니다. 캐릭터 정보나 프롬프트 설정은 클라우드에도 백업해둘 수 있어서, 기기를 바꾸거나 재설치하더라도 다시 처음부터 만들 필요가 없습니다.
캐릭터가 많아지면 관리가 번거로워지기 때문에, 캐릭터를 그룹으로 묶어 정리하는 기능과 캐릭터별로 이미지 폴더를 따로 관리하는 기능도 넣었습니다.
개발하면서 소소하게 재미있었던 부분은, 앱 설정 화면 안에 이슈와 태스크를 노션과 슬랙으로 바로 등록하는 개발자용 도구를 넣어둔 것입니다. 버그를 발견하면 앱을 벗어나지 않고 바로 티켓을 만들 수 있어서, 평소 블로그와 쇼츠 자동화에 쓰던 노션 연동 습관을 이 프로젝트에도 그대로 가져온 셈입니다.
만들면서 신경 쓴 부분
화면과 데이터 계층을 모듈로 분리하고, 저장소도 용도에 맞게 나눴습니다. 캐릭터 프로필처럼 오래 남아야 하는 데이터는 로컬 데이터베이스에, 채팅 진행 상태처럼 실시간으로 자주 바뀌는 값은 별도의 가벼운 저장소에 담는 식입니다. 채팅 전송은 백그라운드 작업으로 처리해서, 화면을 벗어나거나 다른 채팅방으로 이동해도 전송이 끊기지 않도록 했습니다.
혼자 만드는 프로젝트다 보니 처음부터 완벽하게 설계하기보다는, 기능을 하나씩 붙여가면서 구조를 계속 조정하는 방식으로 작업했습니다. 그러다 보니 지금 코드베이스를 다시 들여다보면 아쉬운 부분도 꽤 보입니다.
마무리
AlterAI는 아직 계속 다듬는 중인 프로젝트입니다. 다음 글에서는 이 앱을 만들면서 실제로 부딪혔던 기술적인 문제들, 설계가 꼬였던 부분과 나중에서야 발견한 기술부채 같은 걸 좀 더 자세히 다뤄보려고 합니다.
[핵심요약] AI 캐릭터와 대화하는 롤플레잉 챗봇, AlterAI 소개