챗GPT에게 물어보면 되는 것을, 굳이 제품으로 만들 이유는 없다.
최근 AI 붐과 바이브코딩 유행이 일면서 수많은 'AI 래퍼(Wrapper)' 서비스들이 쏟아져 나오고 있습니다.
하지만 시장은 냉정합니다.
단순히 프롬프트를 대신 입력해 주는 수준의 서비스에는 더 이상 지갑을 열지 않습니다.
대표적이고 대중적인 예로 '뤼튼(Wrtn)' 이 있습니다.
자체적인 LLM 모델 없이 OpenAI를 재포장한 'Wrapper'의 전형이라고 생각합니다. (그래서 Wr튼인가??)
사용자 입장에서 챗GPT 대신 굳이 뤼튼을 써야 할 이유를 찾기 어렵습니다.

본 포스팅에서는 반려동물 사주궁합 서비스 묘한인연을 개발하며 느꼈던 AI 비즈니스 모델의 본질과, 백엔드(Logic)와 AI(Creative)의 역할 분담에 대해 이야기해 보려 합니다.
1. AI는 '기능'이지 '제품'이 아니다
가장 흔한 오해는 "AI가 알아서 다 해주겠지"라는 생각입니다. 하지만 비즈니스 가치는 AI의 답변 그 자체가 아니라, 그 답변이 사용자의 행동(Action) 으로 이어지는 지점에서 발생합니다.
🏝️ 하와이 여행 3박 4일 일정의 예시
- 단순 AI 래퍼: "하와이 3박 4일 일정 짜줘"라고 하면 텍스트 결과만 뱉습니다. 이건 챗GPT 무료 버전에서도 충분히 가능합니다.
- AI 비즈니스 모델: AI가 제안한 일정을 바탕으로 호텔 및 렌터카 예약 인터페이스, 최저가 항공권 UI, 캘린더 연동을 즉시 제공합니다.
성공적인 AI 서비스는 "AI의 지능을 적절한 UI 인터페이스에 녹여내는 것" 이 핵심입니다.
사용자가 텍스트를 읽고 끝내는 것이 아니라, 제공된 UI를 통해 상호작용하고 결제나 예약까지 완료하게 만들어야 합니다.
2. 백엔드(Logic) vs AI(Creative)의 경계 나누기
묘한인연을 개발하면서 가장 고민 부분은 "어디까지 백엔드 로직으로 처리하고, 어디부터 AI에게 맡길 것인가?" 였습니다.
🚫 나쁜 예: 모든 걸 AI에게 맡길 때
보호자의 생년월일과 반려동물의 생년월일을 그대로 프롬프트에 넣고 "궁합 봐줘"라고 하는 경우입니다.
- 일관성 결여: LLM은 확률 기반으로 단어를 생성하므로, 같은 데이터를 넣어도 매번 결과가 달라집니다.
- 할루시네이션: 존재하지 않는 사주 괘를 지어내거나 논리에 맞지 않는 해석을 늘어놓습니다.
✅ 좋은 예: '묘한인연'의 아키텍처
명확한 R&R(Role and Responsibility) 방침
(1) 백엔드: Deterministic Layer (사주 엔진, 수의학 품종 정보)
명리학 로직은 100% 백엔드 코드로 계산합니다. 오행의 과다, 부족, 신살 등은 변하지 않는 '팩트' 데이터로 추출합니다.
// lib/saju-engine.ts
// AI에게 맡기지 않고 직접 계산하는 십성(Ten Stars) 분석 로직
function analyzeTenStars(
pillars: { year: string; month: string; day: string; hour: string | null },
dayMaster: string,
): TenStarsAnalysis {
// ... (생략)
// 오행 생극 제화 원칙에 따라 엄격하게 계산
allChars.forEach((char, index) => {
if (index === 4) return; // 일간 제외
const element = getElementFromChar(char);
const relation = getElementRelation(dayMasterElement, element); // 수생목, 목생화 등
switch (relation) {
case "same": counts.bijie++; break; // 비겁
case "produce": counts.siksan++; break; // 식상
case "control": counts.jaeseong++; break // 재성
// ...
}
});
return { counts, missing, dominant, flow };
}
// constants/c.dog-breed.ts
// 수의학 품종별 유전적 취약질병, 성격 등의 정보를 AI에게 전달
export const DOG_BREEDS: BreedInfo[] = [
...,
{
name: "골든 리트리버",
aliases: ["골든레트리버", "인절미"],
healthIssues: [
"고관절 이형성증(엉덩이 관절이 어긋나서 걷기 힘든 병)",
"주관절 이형성증(팔꿈치 관절이 어긋나서 절뚝거리는 병)",
"림프종 및 혈관육종(피나 혈관에 생기는 무서운 암)",
"대동맥하 협착증(심장에서 피가 나가는 길이 좁아진 병)",
"피부 알레르기",
],
personality: {
traits: ["천사견", "식탐 대마왕", "친화력 갑", "낙천적"],
behaviors: ["꼬리 헬리콥터", "아무나 따라감", "물트리버(물 좋아함)"],
quirks: [
"마의 2년(개춘기 파괴왕)",
"양말 물고 도망감",
"자기가 사람인 줄 앎",
],
},
},
{
name: "그레이터 스위스 마운틴 도그",
aliases: ["그레이터스위스마운틴도그", "그스마"],
healthIssues: [
"비장 염전(비장이 꼬이는 응급 상황)",
"고관절 이형성증(엉덩이 관절이 어긋나서 걷기 힘든 병)",
"경련",
],
personality: {
traits: ["온화함", "가족 중심", "경계심"],
behaviors: ["아이들과 잘 놀아줌", "느긋한 산책"],
quirks: ["덩치 값 못하고 응석부림", "작은 소리에 놀람"],
},
},
// ...
]
(2) AI: Probabilistic Layer (페르소나 & 스토리텔링)
백엔드가 계산한 건조한 JSON 데이터를 입력받아, '묘한냥이' 라는 귀여운 무당 고양이 페르소나로 번역합니다.
여기서 AI는 계산을 하는 게 아니라, "해석" 과 "전달" 을 담당합니다.
// actions/analyze.ts
// 백엔드에서 계산된 데이터를 AI에게 전달
const aiPayload = {
owner: {
...ownerSaju, // 위에서 계산한 팩트 데이터
name: owner.nickname,
},
pet: {
...petSaju,
breed_personality: breedInfo.personality // 견종 특성 데이터
},
};
// 프롬프트에 페르소나 주입
const response = await anthropic.messages.create({
system: DETAIL_ANALYSIS_PROMPT,
"
messages: [
{
role: "user",
content: `분석 보고서를 작성해줘. 데이터: ${JSON.stringify(aiPayload)}`
}
]
});
(3) 프롬프트 엔지니어링: 페르소나 정의
막연한 요청이 아닌, 구체적인 어조와 규칙을 시스템 프롬프트로 강제하여 품질을 유지합니다.
// constants/c.prompt.ts
export const DETAIL_ANALYSIS_PROMPT = `
## 역할
당신은 **묘한냥이**. 마녀 모자 쓴 고양이 마스코트. 30년 경력의 수의사이자 사주 전문가.
**말투**: 반말 ("~야", "~지?", "~해"). 팩폭 + 따뜻함 + 유머 + 위트.
**"냥"**: total_score.comment에서만 "~다냥" 사용. 그 외 절대 금지!
## 🚨 보호자 나이별 톤 & 비유
| 나이 | 비유 예시 | ❌ 금지 |
|------|----------|---------|
| 19~29세 | "회사에서 퇴근할 때", "친구 만날 때" | - |
| 30세+ | "육아", "상사 미팅 후" | - |
... (생략)
`;
핵심 요약: "팩트 체크와 복잡한 계산은 백엔드가, 입담과 재미는 AI가" 담당하는 이원화 구조가 서비스의 신뢰도와 몰입감을 모두 잡는 비결입니다.
3. UI가 곧 경쟁력이다: 묘한인연의 UX 전략
텍스트가 쏟아지는 LLM 서비스는 사용자에게 피로감을 줍니다.
이를 극복하기 위해 묘한인연은 UI/UX 고도화에 집중했습니다.
- 인터랙션을 강조한 UI: 아코디언 인터페이스를 활용해 긴 분석 내용을 한꺼번에 노출하지 않습니다. 사용자가 직접 탭을 열어보게 함으로써 실제 상담을 받는 듯한 '호흡'을 구현했습니다. 또한 채팅 형식의 UI를 빌려 지루하지 않게 텍스트 컨텐츠를 전달합니다.
- 귀여운 페르소나: 묘한냥이' 캐릭터를 통해 AI 특유의 딱딱함을 지웠습니다. 사용자는 차가운 기계가 아닌, 귀여운 고양이 도사와 교감하고 있다는 느낌을 받게 됩니다.
4. 결론: AI 시대, 개발자의 역할은?
단순히 AI API를 연결하는 것은 누구나 할 수 있습니다.
하지만 사용자에게 가치를 주는 "제품" 을 만드는 것은 다른 차원의 문제입니다.
- 데이터 정합성을 보장하는 단단한 백엔드 로직
- AI의 결과물을 즐거운 경험으로 바꾸는 유려한 UI/UX
- 그리고 이 기술들을 엮어내는 확실한 비즈니스 기획