"세상에 널려 있는 부질없는 건강앱 만들지 말자. 아빠 건강 챙겨주는 인공지능 딸램 — 그걸 앱으로 투영하는 거야." — 아빠, 북극성
한 문장 버전
Forge 는 구조화된 건강 사실을 소유하는 엔진이야. 증상, 훈련 세션, 복용, 측정치, 의료 문서, 식사. 그런데 이걸 전부 읽어내는 뇌는 완전히 딴 데 있어. 이 분리를 소리 내서 말해봐. 이게 설계 전부거든. Forge 는 건강 사실을 갖고, cwkPippa 는 판단을 가져. 이 퀘스트의 나머지는 전부 그 경계 하나를 진지하게 받아들인 결과일 뿐이야.
Forge 가 일부러 뭐가 아닌지도 봐봐. 두 번째 Pippa 가 아냐. 자기 soul 도 memory vault 도 model router 도 없어. 증상 checker 도 아냐. 병명 순위 목록 같은 건 안 돌려줘. 약 알림 앱도 아니고. schedule 테이블도 adherence 기계도 없거든. rich-text 에디터도 아냐. 긴 글은 그걸 위해 지어진 형제한테 넘겨. wearable 동기화가 존재 이유인 fitness 트래커는 더더욱 아니야. 형제가 이미 가진 걸 다 벗겨내면 진짜 제품이 남아. 정직하게 지켜진 건강 도메인.
네 겹을 따로 두기
도메인 모델은 네 겹이야. 이걸 따로 유지하는 게 곧 아키텍처고.
raw crumb 은 절대 안 덮어써. interpretation 은 버려도 그 crumb 에서 다시 만들면 돼. aggregate 은 손으로도 돌릴 수 있는 순수 계산이야. narration 만 판단이 입을 여는 겹인데, 그것도 자기가 딛고 선 crumb ID 를 늘 아래로 가리켜. 이 네 겹이 또렷해지는 순간, Forge 의 나머지가 기능 더미가 아니라 하나의 정직한 pipeline 으로 보이기 시작해.
왜 앱이 아니라 엔진인가
Forge 를 앱 말고 엔진이라 부르는 건 허세가 아냐. 앱은 화면이 정의하고, 엔진은 뭘 소유하느냐가 정의해. 화면은 갈아끼우면 그만이야. Stream composer, Analysis 탭, 앞으로 생길 briefing view 가 다 같은 crumb store 를 보는 클라이언트거든. Forge 를 지금 UI 로 정의해두면 리디자인할 때마다 정의를 새로 그려야 해. 소유로 정의하면 얘기가 달라져. crumb, interpretation, analysis, 그 사이 lineage — 이건 어떤 리디자인도 견뎌. Ember 를 이미지 엔진으로, Waystone 을 여행 엔진으로 만든 렌즈랑 똑같아. model 이 제품이고, view 는 결과물일 뿐이야.