인물 + 관계 맥락
이 결과물이 누구를 위한 것인지 — 이름, 관계 유형, 그리고 최근 그 관계가 어떠했는지에 대해 우리가 아는 내용이에요. 이번 주에 언니에 대해 세 번 일기를 썼다면, 그 결이 여기에 반영됩니다.
Cosmic Story v2의 모든 결과물은 동일한 흐름을 거칩니다. 그 흐름을 쉬운 말로 정리하면 다음과 같아요.
각 요소는 프롬프트에 들어가는 맥락의 한 줄이에요.
이 결과물이 누구를 위한 것인지 — 이름, 관계 유형, 그리고 최근 그 관계가 어떠했는지에 대해 우리가 아는 내용이에요. 이번 주에 언니에 대해 세 번 일기를 썼다면, 그 결이 여기에 반영됩니다.
네이탈 차트, 당신과 그 사람 사이의 상호 궁합, 그리고 현재의 운행. 모두 Swiss Ephemeris(sweph)로 계산됩니다. 점성술은 프롬프트 자체가 아니라 프롬프트를 조정하는 요소예요.
이 관계와 관련된 최근 체크인, 공명 점수, 일기 기록, 코치 메시지예요. 저장 시 암호화되며, 바로 이 관계에 대한 콘텐츠를 생성할 때만 읽혀요.
지금 이 순간에 어떤 형태의 콘텐츠가 어울릴지 정해요. 일일 챕터, 주간 요약 편지, 코치 답장, 의식 알림 등이 있어요. 주기에 맞춰 적절한 템플릿이 선택돼요.
트리거에서 노출까지 일곱 단계로, 각 단계는 실제로 하는 일을 따서 이름이 붙어 있어요.
'언니를 위한 오늘의 챕터 생성' 같은 사용자 동작이거나, 일요일 9시 요약처럼 예약된 cron, 또는 6시간마다 갱신되는 날씨 정보 같은 거예요.
작업은 soulwise-chapter-generation이라는 BullMQ 큐에 들어가며, 28초의 강제 타임아웃이 적용돼요. 오래 걸리는 작업은 중단되고 사용자에게 '다시 시도'로 안내돼요.
ChapterGenerationService가 네 가지 요소로 된 프롬프트(인물 맥락, 점성술, 신호, 주기)를 하나의 입력으로 조합해요. 원본 사용자 개인정보(PII)는 그대로 프롬프트에 들어가지 않으며, 모두 먼저 정제돼요.
AI_GENERATION_ADAPTER 심볼 토큰을 통해 AI 공급자가 호출되며, 이 공급자는 교체할 수 있습니다. 응답은 진행하기 전에 길이, 형식, 안전성을 검사합니다.
네 가지 작업이 진행됩니다. 위기 분류기가 위기 관련 표현을 검사하고, 애스펙트 칩 추출기가 1~3개의 점성술 칩을 추출하며, 안티클레임 필터가 금지된 표현을 제거하고, 본문은 플랫폼이 관리하는 키로 AES-256 암호화됩니다.
산출물은 적절한 MongoDB 컬렉션(챕터, 저널 항목, 공명)에 기록되며, 빠른 조회를 위해 userId와 personId 인덱스가 적용됩니다. 먼저 소프트 삭제가 이루어지고, 개인정보(PII)의 하드 삭제는 30일 후에 진행됩니다.
데이터베이스 커밋 이후 EventEmitter2 이벤트(CHAPTER_COMPLETED, JOURNAL_CREATED)가 발생합니다. 알림 모듈이 이를 받아 받은편지함 항목을 생성하고, 선택적으로 푸시를 전송합니다(하루 한 번으로 제한되며, 방해 금지 시간을 준수합니다).
프런트엔드는 인증된 API 호출을 통해 산출물을 가져옵니다. 허브는 새로운 콘텐츠로 다시 렌더링됩니다. 사용자가 오프라인 상태였다면 캐시가 어제의 화면을 제공하고, 다시 연결되면 새 산출물이 나타납니다.
네 개의 MongoDB 컬렉션, 각각이 처리하는 쿼리에 맞게 인덱싱되어 있습니다.
soulwise_persons — soulwise_persons — 앨범 항목이에요. userId, status, deletedAt로 인덱싱돼요.soulwise_chapters — soulwise_chapters — AI가 작성한 모든 챕터로, 본문은 암호화돼요. personId, userId, generatedAt로 인덱싱돼요.soulwise_journal_entries — soulwise_journal_entries — 회원님의 기록으로, 본문은 암호화돼요. userId, personId, createdAt로 인덱싱되며, 검색을 위해 텍스트 인덱싱도 적용돼요.soulwise_resonances — soulwise_resonances — 관계별 4차원 점수예요. personId마다 고유 인덱스가 부여돼요.AI 호출은 3초에서 25초까지 걸려요. 그 시간 동안 요청을 열어두는 방식은 확장성이 떨어지고 응답이 없는 것처럼 느껴져요. 비동기 방식은 작업 ID를 즉시 반환하고, 챕터는 백그라운드에서 완성되며, 준비되는 순간 받은 편지함에 표시돼요. 작업이 진행되는 동안에도 회원님은 앱을 계속 사용할 수 있어요.
28초의 BullMQ 시간 초과 설정이 완료되지 않은 작업을 종료해요. 회원님께는 '다시 시도' 상태가 보이며, 완성되지 않은 챕터가 표시되는 일은 없어요. 실패한 작업은 기록되고, 기능별 재시도 한도까지 재시도돼요.
AI 코치(Luminara)가 무료 일일 한도를 모두 사용한 뒤에도 계속 들어줄 수 있는 경로가 필요하기 때문이에요. 위기 분류기가 우회가 필요한 메시지를 표시해요. 이는 기계적인 안전망일 뿐 임상적 보장은 아니며, 위기 대응 자원이 필요할 때는 기존 지원 서비스를 안내해 드려요.
Soulwise가 물결을 열어가는 지금, 우리의 대표 점성술 앱은 이미 여러분의 손안에 있어요.
점성술 콘텐츠는 성찰과 즐거움을 위한 것입니다. 여기서 설명하는 Cosmic Story v2 기능은 개발 중이며, 제공 여부는 예고 없이 변경될 수 있습니다.