# LLM 앱, 이 조합으로 시작했습니다 : Chainlit + LangFuse + Supabase

### 우리가 세운 3가지 가설

LLM 서비스를 처음 만들기로 했을 때, 우리가 가장 먼저 고민한 건 이거였다.

> "빠르게 만들 수 있을까? 그리고 그게 실제로 쓰일까?"

복잡한 아키텍처, 거대한 클라우드 인프라, 멋진 MLOps 도구. 처음부터 그런 걸 겨냥한 건 아니었다.  우리에겐 작지만 명확한 구조가 필요했고, 몇 주 안에 움직이는 서비스를 직접 보고 싶었다.

그렇게 우리는 하나의 실험실을 꾸리기로 했다. 매달 새로운 가설을 세우고, 빠르게 실험하고, 그 결과를 기록하는 “월간 실험실” 시리즈다.

### 가설-1: Chainlit UI만으로 MVP는 충분할까?

![Image](https://upload.cafenono.com/image/slashpagePost/20250705/224749_lKcYWhHbsAsXks8ZI4?q=80&s=1280x180&t=outside&f=webp)

LLM 기반 앱에서 가장 중요한 건 프론트엔드가 아니다라는 전제가 있었다. 대부분의 사용자 경험은 결국 대화 인터페이스에 머물고, 우리가 만든 게 실제로 쓰이는지 확인하려면 UI보다는 로직과 성능, 그리고 "대화 품질"이 더 중요하다고 생각했다.

- 그렇다면 정말 별도 프론트엔드 없이도 괜찮을까? 

- React/Vue 없이 Chainlit만으로 충분할까?

- 사용자에게 신뢰를 줄 만큼 깔끔한 UI는 가능한가?

- 간단한 커스터마이징(로고, 색상, 말풍선)만으로도 브랜드 인식에 도움이 될까?

이 질문들을 담아, 첫 MVP는 FastAPI + Chainlit + Bootstrap 조합으로 구성했다. 클론 수준이 아닌, 실제 서비스를 최소한으로 동작시킬 수 있는 구조였다.

Chainlit은 LLM 기반 애플리케이션을 빠르게 구축하고 배포할 수 있도록 설계된 오픈소스 프레임워크다. 특히 챗봇 UI에 최적화되어 있어, 복잡한 프론트엔드 코딩 없이도 Python 코드 몇 줄만으로 대화형 앱을 구현할 수 있다는 점이 강점이다.  LangChain, LlamaIndex 등 주요 LLM 툴들과도 쉽게 통합되며, 세션 관리나 대화 흐름 추적, 사용자 인터랙션 구현 등도 기본적으로 지원한다.

처음 이 스택을 고를 때 가장 크게 고려한 점은 개발 속도였다. 실제 사용자 피드백을 빠르게 확인하기 위해선, 번거로운 프론트 작업 없이 MVP를 완성할 수 있어야 했고, Chainlit은 그 목적에 잘 들어맞았다. 대화형 인터페이스만으로도 초기 실험엔 충분하다는 가설 아래, React나 Vue 없이도 빠르게 결과를 보여줄 수 있는 최적의 도구였다.

### 가설-2: LangFuse와 Supabase만으로 운영 가능한가?

![Image](https://upload.cafenono.com/image/slashpagePost/20250705/224805_d2pusdyVknCmivkyv8?q=80&s=1280x180&t=outside&f=webp)

LLM을 써보면 바로 느낀다.

> "왜 이 답이 나왔는지 알 수가 없다."

LLM의 불확실성은 처음엔 재밌지만, 서비스 입장에선 굉장히 불편한 요소다.

그래서 LangFuse를 도입했다. 프롬프트 변경 추적, 토큰 사용량, 히스토리 관리, 심지어 A/B 테스트 까지 모든 것이 다 들어있다.  특히 LangChain과 연동이 부드러운 것도 장점이다.

이걸 통해 궁금해졌다. 

LangFuse만으로 디버깅과 프롬프트 성능 추적이 충분할까?

실무에서 진짜 “필요한 정보”를 얼마나 빠르게 찾을 수 있을까?

로그 외에도 개선 포인트를 찾는 데 도움이 될까?

그리고 Supabase. 로그인, DB 저장, 함수 호출까지 한 번에 해결되며, 초기 비용은 거의 0원이다. RLS도 있고 PostgreSQL 기반이라 학습 곡선도 낮다.

> "Supabase 하나로 저렴하면서도 안정적인 운영이 가능할까?"

이 역시 우리의 실험 항목 중 하나이다.

### 가설-3: 이렇게 빠르게 만든 서비스, 진짜 사람들이 쓸까?

기술적으로 서비스가 돌아간다고 해서, 그게 곧 의미 있는 사용으로 이어지는 건 아니다. 그래서 가장 중요한 실험은 어쩌면 이거였는지도 모른다.

> "이렇게 만들어진 LLM 앱을 사람들이 진짜 사용할까?"

많은 예산이 투입된 마케팅도 없고, 대형 채널을 활용한 배포도 아니었다. 우리는 그냥, 아주 작은 범위 안에서 소규모 홍보만 진행할 것이다. 그 상태에서도 누군가가 흥미를 느끼고, 직접 가입하고, 질문을 던지고, 심지어 파일을 업로드해서 대화를 시작할까? 그게 궁금했다.

단순한 LLM 앱으로도 사람들의 반응을 확인할 수 있을지, 그저 내 눈으로 직접 보고 싶었다. 실제로 어떤 유형의 질문이 자주 나오는지, 어디서 맥이 끊기는지, 어떤 지점에서 이탈하는지. 이런 데이터는 단순 로그가 아니라 다음 앱을 설계할 때 반드시 참고해야 할 실마리다.

잘 만든 기능이 아니라, 잘 쓰이는 기능. 멋진 모델이 아니라, 다시 돌아오게 만드는 흐름. 우리는 그것들을 이 실험에서 찾고 싶었다.

### 진짜 이렇게 해서 될까?

그래서 우리는 진짜 그렇게 해보기로 했다. Chainlit만으로 어디까지 만들 수 있는지, 그걸로 MVP가 될 수 있는지, 직접 검증해보자는 거였다. 완벽하진 않아도, 돌아가기만 하면 되는 구조. 화려하진 않아도, 실제 대화를 주고받을 수 있는 인터페이스.

> “이렇게 만들어도 진짜 쓸 수 있을까?”

그 물음에 답을 찾기 위한 첫 번째 실험이, 그렇게 시작됐다.

For the site tree, see the [root Markdown](https://slashpage.com/monthly-lab.md).
