← 목록
기타 2026-06-15 9KB 읽기 9분

report.crowny.org 토론 게시판 기능 + 윤연정 4과목 토론 과제

개요

report.crowny.org(:9781)에 리포트 후 찬반 토론 + 다른 작성자 글 댓글 + 회원별 누적 기능을 추가하고, 사회복지 4과목 토론 과제(복학생 모드)를 병렬 생성해 게시판에 시드했다.

무엇을 했는지

1. 토론 게시판 기능 (신규)

  • engine/forum.js — 토론 엔진: 토픽/게시글/댓글(임베드) + 회원별 누적 집계(memberActivity) + 찬반 입장 분포 + 토론 과제 충족 판정(게시글1+댓글2).
  • engine/토론게시판.한선 — 한선씨 동반(핵심 로직 미러). hanseonc_high 컴파일+실행 검증 GREEN, 학습DB 등록(토론게시판_회원별집계).
  • server-report.js API 추가:
  • GET /api/forum/topics — 토픽 목록(입장 분포 포함)
  • POST /api/forum/topics — 토픽 생성
  • GET /api/forum/topic/:id — 토픽 상세 + 게시글
  • POST /api/forum/post — 게시글 작성(회원 식별 필수)
  • POST /api/forum/comment — 댓글 작성
  • GET /api/forum/member/:memberId — 내 활동(누적+과제현황)
  • public/토론.html — 토론 SPA(닉네임 등록→회원별 누적, 토픽 목록/상세/내 활동, 찬반 배지, 댓글 작성). tiomta 표준 토큰 적용.
  • 페이지 별칭 /토론 /forum /debate. index·사회복지 nav에 토론 링크 추가.
  • 2. 회원별 누적 (현재 "다 오픈" → 회원별 분리)

    • 기존 SSO 와이어링이 사실상 미작동(getUserId가 항상 default)이라 모든 글이 한 곳에 섞임 = "다 오픈" 상태였음.
    • 해결: 클라이언트 닉네임 기반 memberId(localStorage) + 로그인 시 userId 우선. 게시글·댓글이 memberId별로 누적되고 "내 활동"에서 본인 글/댓글/과제현황만 집계.

    3. 4과목 토론 콘텐츠 병렬 생성 (Workflow, sonnet ×4)

    복학생(B+) 페르소나로 주제별 학우 글 2 + 윤연정 게시글 1 + 윤연정 댓글 2(학우 글 대상) 생성 → 게시판 시드(주제4/게시글12/댓글8). 윤연정 4주제 모두 과제 충족(글1+댓2).
    • 노인복지론(노인연령 70세) — 윤연정 반대
    • 사회복지행정론(지방정부 역할 강화) — 윤연정 찬성(중앙 재정보전 조건)
    • 의료사회복지론(조현병 진단명 고지) — 윤연정 알려야 한다(방식이 핵심)
    • 학교사회복지론(혼자 다니는 학생) — 윤연정 도와준다(아이 속도에 맞춰)

    관련 파일

    • /Users/ef/crowny-report/engine/forum.js, engine/토론게시판.한선
    • /Users/ef/crowny-report/server-report.js (forum 라우트), public/토론.html
    • /Users/ef/crowny-report/data/forum/{topics.json, posts/*.json} (시드 데이터)
    • /Users/ef/crowny-report/data/{seed-debate.json, seed-forum.js} (시드 원본/스크립트)
    • 제출용 텍스트: /Users/ef/CrownyDoc/projects/2026-06-15-윤연정-토론과제-4과목/*.txt

    검증

    • 한선씨 동반 컴파일/실행 GREEN(과제충족 로직).
    • API 6종 GREEN, 페이지 200, 쓰기 경로(게시글+댓글+회원누적) 임시 토픽으로 검증 후 정리(라이브 4주제 무오염).
    • launchd kickstart 재기동(pid 2499→66249).

    잔여 이슈

    • SSO 정식 연동(로그인 사용자 = memberId 자동) 시 닉네임 폴백 위로 승격 가능.
    • 게시글 분량 371~410자(토론 게시판 기준 적정, 리포트 2200자 기준 아님).
    • 모사율 측정/필체 주입을 토론 글에도 연동하면 일관성↑.

    추가: 연계(사고 누적) 엔진 — "앞으로 단절되지 않게" 설계 (2026-06-15 오후)

    문제 인식 (사용자 지적)

    토론 1차 콘텐츠가 주제+페르소나만으로 생성돼, 윤연정의 기존 노인복지론 리포트(노노간병·시부모 간병 경험·"노인문제=내 미래"·권중돈/통계청)와 완전히 단절됐다. "같은 노인복지론인데 연계성이 없다 / 기회를 놓쳤어 / 앞으로 그러지 않게 설계하라." → 1차 콘텐츠는 재생성하지 않고(놓친 기회 인정), 연계성을 시스템에 내장.

    설계 (report = Thinking Digital Twin = 사고 누적)

    • engine/continuity.js — 회원·과목별 사고 원장. recordWork(글 적재) / buildPromptBlock(기존 글의 입장·본인 일화·핵심 관점(결론)·인용 출처를 생성 프롬프트용 블록으로) / getLedger / memberLedgers.
    • 휴리스틱 추출(LLM 없이): 일화=강신호(시부모/간병/그때/편찮…) 우선, 출처=참고문헌 파싱, 요지=결론 우선.
    • 자동 배선: forum.addPost·welfare.generateReport가 생성 후 continuity.recordWork 호출 → 각 글이 다음 글의 연계 자료가 된다. welfare.personaPrompt는 연계 블록을 본문 앞에 주입.
    • 백필: data/backfill-continuity.js → 윤연정(memberId m_yyj) 2026-05-25 4과목 리포트(복학생)를 원장에 적재. 이제 윤연정의 새 글은 기존 리포트를 물려받는다.
    • API: GET /api/forum/continuity?member=&topicId=, GET /api/continuity?member=&subject=.
    • UI: 토론 작성칸 위 "🧵 이미 쓴 글이 있어요 — 이어서 쓰세요" 힌트(본인 일화 표출).
    • 한선씨 동반: engine/연계.한선(원장 적재/조회 미러, 컴파일 GREEN), 학습 연계_사고누적_원장조회.
    • 세션 규칙: 메모리 feedback_report_continuity_required — 기존 인물의 새 산출물은 과거 작업을 먼저 조회·주입. Workflow 서브에이전트엔 연계 블록 직접 주입.

    검증

    • 백필 4과목 적재, 연계 블록에 노노간병·결론 관점·권중돈/통계청 표출 확인.
    • API GREEN(forum/continuity 연계있음:true, continuity subject별 원장).
    • 연계.한선 컴파일·실행 GREEN(연계 판정).

    한계/향후

    • 앵커 추출이 휴리스틱(향후 LLM 추출 고도화). 1차 토론 콘텐츠는 단절된 채 보존(재생성 안 함).

    추가: 게임형 낭만 리디자인 — "사고의 천문대" 월드 (2026-06-16)

    padella.crowny.org의 천상 월드 패턴(포털 입장→씬 이동·HUD·DOCK·낭만 카피·금/심야 팔레트·글로우)을 글쓰기/사고 누적 테마로 이식.

  • 컨셉: "밤의 서재 / 사고의 천문대 — 당신의 생각이 별이 되는 곳". 글 한 편 = 별 하나, 사고 누적 = 별자리(연계 엔진과 테마 일치).
  • public/월드.html (별칭 /월드 /world /천문대 /star): 자급 단일 페이지.
  • 포털 입장 → 로비(4개 문) → 씬 이동(글의 방/거울의 방/원형 광장/돌봄의 책상/별자리).
  • 각 방은 낭만 카피 + 실제 도구로 딥링크(/, /토론.html, /사회복지).
  • HUD(크레스트+레벨/별빛), DOCK(서재·글·광장·별자리), 밤하늘 그라데이션 무드 전환, 별 트윈클·흐르는 별, φ/Fib 간격, Cormorant/명조 세리프, 골드 글로우.
  • 라이브 데이터: /api/brain/insight(Lv·xp·글수), /api/forum/topics(광장 글 수), /api/continuity?member=m_yyj(이어진 사고 원장)을 별자리 방에 SVG 별자리+스탯으로 표출.
  • 전 페이지 헤더에 "✦ 천문대" 금색 진입 링크.
  • 검증: 4 별칭 200, 인라인 JS 문법 OK, 3개 데이터 엔드포인트 200, 헤드리스 스크린샷 렌더 확인(밤/금 낭만 톤·포털·HUD·DOCK).

  • 추가: 운영 이슈 3종 수정 (2026-06-16) — 느림·회원구분·삭제

    사용자 보고: ①반응 어마어마하게 느림 ②개인정보(회원) 구분 없음 ③작성 파일 삭제/수정 불가.

    진단

    • 로컬 백엔드는 1~3ms로 빠름. 느림 정체 = Gemini 이해 경로 재시도(타임아웃 15s×3회+백오프 = 최악 47초). 키 레이트리밋/네트워크 행 시 직격.
    • 회원구분: getUserId가 항상 default(SSO 미작동) → 모든 문서가 한 폴더 공유.
    • 삭제: /api/docs/:idDELETE 라우트 자체가 없었음(GET·PUT만). UI에도 삭제 버튼 없음.

    수정

    1. 빠른 폴백engine/llm-router.js Gemini 6s×2+짧은 백오프(최악 ~12.3초)로 축소, 실패 즉시 mock. public/월드.html 외부 Google Fonts 제거(블로킹 요인·외부의존 제거).
    2. 회원별 분리(opt-in)getUserIdx-member-id 헤더(닉네임 기반 localStorage) 우선 인식(sanitizeId로 traversal 차단). 프론트 API 래퍼가 헤더 주입. 닉네임 미설정=공용(default) 유지(기존 6문서 보존), 설정 시 개인 서재로 분리. 사이드바 회원 바 + 닉네임 전환 UI.
    3. 삭제+수정DELETE /api/docs/:id(deleteDocument, 회원 소유분만) 추가, 문서목록 🗑 버튼(deleteDoc, 확인 후 삭제). 수정(PUT autosave)은 정상 작동 확인.

    검증

    • 회원 분리: alice 글이 bob에게 안 보임 / bob의 alice 글 삭제 차단(소유 격리) / alice 본인 삭제·수정 GREEN.
    • default 라이브 6문서 보존. LLM 이해 ~1.2s(정상). 헤드리스 렌더(회원 바·천문대 링크·문서목록) 확인.