개발 slecs

AI 사주 읽기 MVP 첫 출시

목차

세 개의 외부 서비스를 한꺼번에 엮어서 사주 AI 리딩 기능의 MVP를 출시했다. 음력 계산 엔진(lunar-typescript), Claude OAuth 기반 AI 해석, Polar 결제까지 한 번에 통합해야 했는데, 설정 복잡도를 최소화하면서도 기능 완성도를 살리는 게 가장 큰 숙제였다.

세 가지 핵심이 맞물린 설계

사주 기능은 기술적으로 독립적인 세 부분이 필수였다:

엔진(lunar-typescript): 음력 변환과 사주 계산이 정확해야 한다. 직접 구현하면 음력 윤달 처리, 천간지지 계산 같은 도메인 로직이 복잡해지고, 테스트도 어렵다. 기성 라이브러리를 선택한 건 "우리가 집중해야 할 부분은 사주 해석 경험"이라는 판단이었다. 외부 의존성을 늘리긴 했지만, 정확성이 먼저고 나중에 대체하기도 수월하다.

AI 해석(Claude OAuth): 사주 읽기 자체는 Claude의 지식과 문맥 이해력이 직결된다. OAuth 토큰으로 사용자가 직접 Claude API를 호출하게 하면, 민감한 API 키를 우리 서버에 저장할 필요가 없다. 보안과 스케일링 측면에서 좋은 선택이었다. 다만 사용자가 Claude 계정이 있어야 한다는 제약이 생겼는데, MVP 단계에선 감수할 만했다.

결제(Polar): 이 기능을 처음부터 유료로 운영하기로 결정했다. 무료 → 유료 전환은 나중에 사용자 마찰이 크니까, MVP부터 정가를 받으면서 가치를 검증하자는 전략이다. Polar는 구독 관리와 체크아웃이 깔끔해서 빠르게 통합할 수 있었다.

설정 파일 변경이 시사하는 것

.env.example 추가는 팀원들이 로컬 개발 시 필요한 환경 변수를 알 수 있도록 한 것이다. lunar-typescript는 다행히 주입할 게 적지만, Claude OAuth와 Polar 각각에 클라이언트 ID, 시크릿, 웹훅 시크릿 등이 필요하다. 이들을 명확히 문서화하지 않으면 온보딩할 때마다 "뭐가 빠졌지?" 하면서 시간을 낭비한다.

.gitignore 변경은 실 환경 .env 파일이 레포에 올라가는 걸 방지하는 것 같다 — 당연한 거지만, 새 기능 추가할 때마다 빠뜨리기 쉽다.

next.config.ts 수정은 Polar 또는 Claude API 호출을 위한 미들웨어, 환경 변수 인젝션, 혹은 빌드 타임 설정이 들어간 것 같다. next-env.d.ts는 TypeScript가 새로 추가된 환경 변수들을 타입으로 인식하도록 한 것이고, package-lock.json 변경은 lunar-typescript, Claude SDK, Polar SDK 등 세 라이브러리가 package.json에 들어갔다는 뜻이다.

MVP 범위를 여기까지만 한 이유

처음엔 더 큰 계획이 있었을 거다: 사주 보관함, 친구에게 공유하기, 해석 이력 추천, 운세 트렌드 분석 등등. 하지만 MVP라는 이름 아래 가장 핵심 흐름 — 사주 입력 → AI 해석 → 결제 → 리포트 다운로드 — 만 먼저 만들기로 했다.

이 판단이 좋은 이유:
- 외부 의존성 최소화: 세 서비스만 잘 통합하면 된다. 더 많은 기능은 각각 새로운 의존성과 버그 벡터를 만든다.
- 배포 위험 낮음: 엔진은 라이브러리, API는 OAuth로 사용자 리소스, 결제는 Polar 담당. 우리가 관리할 상태가 적다.
- 피드백 루프 빠름: 실제 사용자가 몇 주 안에 피드백을 주고, 그 다음 뭘 우선할지 데이터로 결정할 수 있다.

다만 트레이드오프가 있었다. 예를 들어 Polar 없이 먼저 무료로 시작했다면 사용자 수를 더 빨리 모을 수 있었을 텐데, 대신 나중에 유료화 전환할 때 저항을 받을 가능성이 높다. MVP 단계에서 유료 모델로 가는 건 조기일 수도 있고, 정확한 가치 검증에는 필수일 수도 있다. 우리 팀은 후자를 택했고, 그 결정이 맞는지는 다음 분기 메트릭이 말해줄 것이다.

회고: 세 가지를 동시에 통합하기

이 정도 규모의 MVP에서 가장 조심할 점은 각 부분의 장애가 전체를 마비시키는가하는 것이다. 만약 lunar-typescript에 버그가 있으면 음력이 틀려서 사주가 틀린다. Claude API가 응답 안 하면 해석이 안 된다. Polar 웹훅이 누락되면 결제 후 리포트가 안 간다.

따라서 배포 전에 각 부분을 독립적으로 테스트하고, 통합 테스트를 꼼꼼히 했다. 특히 Polar 웹훅은 샌드박스에서 충분히 검증하고, Claude OAuth 플로우는 토큰 갱신 시나리오까지 고려했다.

또 하나는 모니터링 계획이다. 세 서비스가 엮여 있으면, 어디가 느려지는지 한눈에 파악하기 어렵다. next.config에 들어간 설정이 요청 로깅이나 성능 추적을 포함했다면, 그건 좋은 선택이다. 안 했다면, 출시 직후 첫 주 동안 사용자 피드백으로 병목을 찾게 될 테고, 그 경험 자체가 다음 반복 개선의 밑거름이 될 것이다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.