06

정서존엄 · 말벗·자서전

기능설계 ⑥ — 외로움을 덜고, 인생을 기록으로 남긴다

항목내용
기능 IDFEAT-EMOTION
연결 시스템마스터 시스템⑦ 정서존엄 · ① 아리 대화(d01) 위에 구축
한 줄 정의매일의 감정을 기록하고, 아리와의 대화에서 인생 이야기를 모아 자서전으로 엮는다
관련 액터PWA실벗서버아리
설계 철학 — 어르신의 인생은 한 권의 책입니다. 아리는 말벗이 되어주는 동시에, 대화 속 추억을 모아 자서전으로 남겨 존엄을 지킵니다.

설계 7계층 체크리스트

계층이 문서의 섹션
① UI감정 기록 / 자서전 화면 SCR-EMO-01·02
② Flow감정 체크 → 말벗 대화 → 자서전 챕터 생성
③ Datamood_logs / autobiography (확장)
④ API감정 기록·자서전 조회·챕터 생성
⑤ Seq대화 → 추억 추출 → 자서전 챕터 집필 시퀀스
⑥ Comp감정·자서전 서비스 구조
⑦ Test검수 체크리스트

① UI · 화면 명세

감정 기록 화면 SCR-EMO-01

영역요소 / 동작
오늘 기분큰 이모지 5단계(😊🙂😐🙁😢) 한 번 탭으로 기록
한 줄 일기음성/텍스트로 오늘 한마디 (선택)
주간 기분일주일 기분 흐름을 색 점으로 표시

자서전 화면 SCR-EMO-02

영역요소 / 동작
책 표지"순자님의 인생 이야기" + 챕터 수
챕터 목록아리가 대화에서 엮은 챕터(어린시절·결혼·자녀…), 큰 글씨
챕터 보기본문 + 관련 사진, TTS 낭독, 가족 공유·책 인쇄 주문

② Flow · 감정→대화→자서전

감정 체크 아리 말벗 대화(d01) 추억 신호 감지 자서전 소재 적립 챕터 자동 집필

아리는 대화 중 "옛날에…", "내가 젊을 때…" 같은 추억 신호를 감지하면 ari_memory(d01)에 mem_type=story로 적립. 일정량 모이면 챕터로 엮는다.

③ Data · DB 스키마

기존 mood_logs·autobiography 재활용. 자서전은 ari_memory(d01)의 story 타입을 원천으로 한다.

MariaDB · UTF8MB4 · InnoDB
CREATE TABLE mood_logs ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, mood TINYINT NOT NULL, -- 1(😢)~5(😊) note VARCHAR(255), logged_on DATE NOT NULL, UNIQUE KEY uq_day (user_id, logged_on), -- 하루 1건 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE autobiography ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, chapter VARCHAR(80), -- '어린 시절','결혼' body TEXT, -- 아리가 엮은 본문 photo_url VARCHAR(255), source JSON, -- 근거가 된 대화/기억 id 목록 status ENUM('draft','published') DEFAULT 'draft', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
설계 포인트 — 챕터는 draft로 먼저 생성되고 어르신이 확인·수정 후 published. AI가 임의로 사실을 확정하지 않는다(존엄·정확성).

④ API · 엔드포인트 명세

M경로설명
POST/emotion/mood오늘 기분 기록(하루 1건 upsert)
GET/emotion/mood/weekly주간 기분 추이
GET/emotion/autobiography자서전 챕터 목록
POST/emotion/autobiography/draft적립된 기억으로 챕터 초안 생성(LLM)
PUT/emotion/autobiography/{id}챕터 수정·published 전환

⑤ Seq · 대화 → 챕터 집필

아리
말벗 대화 중 추억 신호 감지 → ari_memory(mem_type=story) 적립
실벗 워커
story 기억이 임계치 도달 → POST autobiography/draft 트리거
DeepSeek
기억들을 따뜻한 1인칭 챕터로 집필 → draft 저장
실벗
"인생 이야기 한 편이 만들어졌어요" 알림
어르신
확인·수정 → published, 가족 공유/인쇄 주문
폴백 — LLM 집필 실패 시 기억은 그대로 보관되고 다음 주기에 재시도. 데이터 유실 없음.

⑥ Comp · 컴포넌트 / 모듈 구조

프론트엔드 (PWA)

features/emotion/ ├─ MoodCheck.js # 이모지 기분 기록 ├─ MoodChart.js # 주간 흐름 ├─ BookView.js # 자서전 책 └─ ChapterEditor.js # 챕터 확인·수정

백엔드 (PHP)

app/ ├─ Controllers/EmotionController.php ├─ Services/ │ ├─ MoodService.php │ └─ AutobiographyWriter.php # ari_memory→챕터 집필(LLM) └─ Jobs/ ChapterDraftJob.php # 임계치 도달 시 초안 생성
모듈책임
AutobiographyWriterd01의 ari_memory(story)를 입력으로 따뜻한 챕터를 집필. 항상 draft로만 생성(사실 확정 금지).

⑦ Test · 검수 체크리스트

ID시나리오기대 결과
T-01오늘 기분 😊 탭mood_logs 하루 1건 저장, 주간 그래프 반영
T-02같은 날 기분 다시 기록upsert(덮어쓰기), 중복 행 없음
T-03대화에서 추억 언급ari_memory에 story 적립
T-04story 임계치 도달자서전 draft 챕터 자동 생성 + 알림
T-05LLM 집필 실패기억 보존, 다음 주기 재시도(유실 0)
T-06챕터 수정 후 published가족 공유·인쇄 가능 상태로 전환
완료 판정 — T-01~T-06 통과 시 FEAT-EMOTION 완료. T-05(유실 0)와 draft-우선 원칙이 핵심.
기능설계 ⑥ 완성 — 말벗과 자서전을 7계층으로 설계했습니다. d01의 ari_memory를 그대로 재활용해 인생을 한 권의 책으로 남깁니다.