플랫폼 인수인계 — 2026-09-13 작업
범위: 노드 게시 거버넌스 · 공통 알림 · AI 게시본 분석 · 서비스 경계 확정 · 검색/모델 게이트웨이 저장소: portal-foundation(PF) · ProcessCenter(PC) · UiCenter(UI) · FileStore(AS) · ModelGateway(MG, 신규)
1. 요약
- 노드 게시 거버넌스 도입 — 검토 요청(
IN_REVIEW)·승인·반려·폐기와 불변 게시본(process_node_versions) 스냅샷·이력·승인자(RACI) 사용자 참조 저장. - 공통 알림 — PF
@hohyun94/portal-operations0.2.0 알림 계약 +PortalNotificationCenterUI, PC는 파생 결재함 + 저장형 인앱 알림(portal_notifications). - AI 게시본 분석 — PF
@hohyun94/portal-ai0.1.0(provider·구조화 응답·캐시·요약 유틸)과PortalAiSummaryCard, PC는 버전 차이 자동 분석·기록. - DB 전략 — 트랜잭션은 MySQL/PostgreSQL 이중 지원 유지, 벡터는 PostgreSQL+pgvector 또는 외부 벡터 DB(
VectorStore계약), AI 완성은 DB 중립(docs/DB_STRATEGY.md). - 서비스 경계 확정 — UI플랫폼은 표현 규칙 전용, 메뉴는 포털 소유, RAG는 ExploreGateway, 모델 접근은 ModelGateway(신규 저장소 생성·dev 스택 등록 완료).
2. 확정된 서비스 경계
| 계층 | 소유자 | 근거 문서 |
|---|---|---|
| 공통 UI 패키지·테마·릴리스·배포·런타임 설정 | UI플랫폼(UiCenter) | UI_PLATFORM_SCOPE.md §5, DECISION_LOG.md(2026-09-13) |
| 포털 메뉴 구조(트리·퀵링크·그룹 접근) | 각 포털 | SERVICE_BOUNDARIES.md, ARCHITECTURE.md |
| 사용자·조직·인증·포털 접근권한·capability | Portal Control Center(DirectoryService) | DirectoryService/docs/SERVICE_BOUNDARIES.md |
파일 원본 보관·감사·색인 발행(ragPublishAllowed) | FileStore | FileStore/docs/ARCHITECTURE.md |
| 다중 포털 탐색 실행 조합(포털 어댑터 오케스트레이션) | ExploreGateway | ExploreGateway/docs/SERVICE_BOUNDARIES.md · ProcessCenter/docs/EXPLORE_ADAPTER_CONTRACT.md |
| 문서 인덱스·RAG·citation | RAGCenter | UiCenter/docs/DECISION_LOG.md(2026-09-13 정정) · FileStore/docs/ARCHITECTURE.md |
| 모델 접근·키·쿼터·비용·감사 | ModelGateway | MODEL_GATEWAY_SCOPE.md, DECISION_LOG.md |
| AI 계약·유틸 라이브러리 | portal-foundation @hohyun94/portal-ai | PF/docs/PORTAL_FOUNDATION_HANDOVER.md |
| AI 적용 결정·프롬프트 내용 | 각 포털 | MODEL_GATEWAY_SCOPE.md §8-1 |
실사 정정(2026-09-13): GitHub 계정 실사에서
ExploreGateway(Portal Control Center control plane catalog + 사용자 Scope로 포털 어댑터를 선택·실행하는 오케스트레이터)와RAGCenter(Python 문서 파이프라인·청킹·인덱싱·pgvector RLS 검색·스트리밍 답변·감사·PII·평가)가 이미 존재함을 확인했습니다. 이에 따라 경계를 위 표대로 정정하고(같은 날 앞선 "RAGCenter 없음" 결정은DECISION_LOG.md정정 항목으로 대체), 반대 방향으로 작성했던 위임 클라이언트·계약 문서를 폐기하고 어댑터 계약(ProcessCenter/docs/EXPLORE_ADAPTER_CONTRACT.md·explore-adapter.openapi.json)으로 대체했습니다. ProcessCenter의 어댑터는server/remoteExplore.ts에 이미 구현되어 있습니다.
3. 계약·문서 위치
| 문서 | 위치 | 내용 |
|---|---|---|
| 탐색 어댑터 계약(PC가 제공) | ProcessCenter/docs/EXPLORE_ADAPTER_CONTRACT.md | 엔드포인트·서비스 토큰·x-explore-subject-id·응답 형태·방향 정정 이력 |
| 탐색 어댑터 OpenAPI 3.1 | ProcessCenter/docs/explore-adapter.openapi.json | POST /api/explore/v1/search + 요청·응답·오류 스키마 |
| ExploreGateway 경계·계약(상대 서비스) | ExploreGateway/docs/SERVICE_BOUNDARIES.md · docs/control-plane-contract.md | adapter 선택 규칙·catalog·부분 실패·RAG는 RAGCenter 소유 |
| ModelGateway 범위·정책 | UiCenter/docs/MODEL_GATEWAY_SCOPE.md | 이름·범위·인터페이스·운영 정책 8항목 결정 |
| ModelGateway OpenAPI 3.1 | ModelGateway/docs/openapi.json | 5개 경로·귀속 헤더·오류 스키마 |
| DB 전략(AI·벡터 포함) | ProcessCenter/docs/DB_STRATEGY.md | 트랜잭션 이중 지원·벡터 분리·서비스 경계 §8 |
| 플랫폼 경계·결정 이력 | UiCenter/docs/SERVICE_BOUNDARIES.md · DECISION_LOG.md · ARCHITECTURE.md | 소유자 표·2026-09-13 결정 4건 |
| 거버넌스 계획·검증 | ProcessCenter/docs/PROCESS_NODE_GOVERNANCE_PLAN.md · scripts/verify-postgres-governance.ts | 단계·후속 항목 |
| RAGCenter 연동 계획 | ProcessCenter/docs/RAGCENTER_INTEGRATION_PLAN.md | 실사(API 표면·JWT 인증·RLS·수집 계약) + P0~P3 + 미해결 |
4. 구현 산출물
portal-foundation (PF 0.6.154)
@hohyun94/portal-operations0.2.0 — 알림 계약(PortalNotification·readAt·targetType/targetId·PortalNotificationInboxStore·dispatchNotificationTo·사용자 신원 헬퍼·인메모리 스토어)@hohyun94/portal-ai0.1.0 —PortalAiProvider·createOpenAiCompatibleProvider·createDisabledAiProvider·completeWithRetry·completeStructured·extractJsonPayload·createAiResponseCache·summarizeContentChange·PortalAiError- UI —
PortalNotificationCenter,PortalAiSummaryCard,PortalShell.notificationCenter슬롯
ProcessCenter (PC)
- 스키마:
process_nodes(게시 상태·게시본),process_node_versions(불변 스냅샷 + AI 요약 컬럼),process_node_raci_users,portal_notifications,process_histories.action확장 (PG·MySQL 동시) - 서버: 거버넌스 서비스(submit/approve/reject/retire/versions/RACI), 알림 서비스·라우터, 버전 AI 분석 서비스(
process.version-summary),server/ai/aiClient.ts(capability 분리·ModelGateway 우선),server/rag/vectorStore.ts(pgvector/외부/비활성),server/remoteExplore.ts(탐색 어댑터, 세션 이전 구현) - 클라이언트:
ProcessGovernanceBar,ProcessVersionHistory(AI 카드 포함),ProcessNotificationCenter, RACI 참조 저장(raciReferences.ts) - 마이그레이션: PG
0014~0016(idempotent), MySQL0027·0028(파일만) - 개발 스택:
docker-compose.dev.yml에 model-gateway 서비스 + 전용 DB 연결
ModelGateway (신규 서비스)
- OpenAI 호환 프록시(
/v1/chat/completions·/v1/embeddings) · 모델 카탈로그(/v1/models) · 상태(/v1/health) · 사용량(/v1/usage) - 서비스 토큰 인증(다중 토큰 = 무중단 회전) · 업스트림 키 격리 · 요청 스키마 검증 · 허용 모델 제한
- 감사·비용·쿼터 영속화(PostgreSQL,
model_gateway_audit·model_gateway_quota_policies, 부팅 시 idempotent DDL) · 쿼터 초과 시429 + Retry-After· DB 장애 시 메모리 폴백 - 귀속 헤더(
x-portal-id·x-purpose·x-actor·tenant/org) · 모델 폴백(CLOUD 한정) · 메타데이터만 감사(본문 미저장)
5. 검증 상태
| 항목 | 결과 |
|---|---|
| PF 테스트 | 38개 파일 통과(기존 실패 10건은 @testing-library/jest-dom 누락 — 이번 변경과 무관) |
PF pnpm check | 0 errors |
PC pnpm check / 서버 테스트 | 0 errors / 34개 파일 전부 통과 |
MG pnpm check / 테스트 | 0 errors / 4개 파일 통과(gateway 9 · contract 5 · usage 4 · resilience 4) |
| PG 거버넌스 검증 | pnpm db:postgres:verify-governance 통과(마이그레이션 0014~0016) |
| 개발 스택 실기동 | PC http://localhost:3000/ 200 · MG http://localhost:3400/v1/health 200(업스트림 주소·키 비노출) · 무토큰 401 · /v1/models 정상 |
| 쿼터 E2E | 정책(한도 10)+사용량 10 → 요청 시 429 + Retry-After 60, 감사 status=429 기록, 집계 tokens=10 확인 후 테스트 데이터 정리 |
| 계약 일치 | MG 계약 테스트(문서↔서버 경로·401 본문·$ref) · PC 계약 테스트(클라이언트 페이로드↔OpenAPI 스키마) |
6. 커밋 목록 (오늘 세션, 모두 미푸시)
portal-foundation
| 커밋 | 내용 |
|---|---|
de2ecf1 | feat(ai): @hohyun94/portal-ai 신설 + PortalAiSummaryCard (release 0.6.154) |
27f7cf5 | feat(notifications): 공통 알림 계약·알림함 컴포넌트 (release 0.6.153, operations 0.2.0) |
ProcessCenter
| 커밋 | 내용 |
|---|---|
d4f29c3 · 10447f3 | 관리자 콘솔 버튼 아이콘 전용 전환·일괄 등록 정리 |
ce26a72 | 노드 게시 거버넌스(검토·승인·반려·폐기) + 불변 게시본 |
d4b110c | 게시본 이력 UI · 승인자 사용자 참조 저장 · 플랜 문서 |
3ade3d4 | PostgreSQL 거버넌스 검증 스크립트 |
d429f0a | 포털 공통 알림함(파생 결재함 + 저장형 인앱 알림) |
7305a14 | 게시본 버전 차이 AI 자동 분석·기록 |
1ab2c5e | AI 완성/벡터 검색 capability 분리 + VectorStore 계약 + DB 전략 |
fed14d7 · 60fea48 · e83bd5c | AI·벡터 서비스 경계 명시 → ExploreGateway·ModelGateway 소유자 확정 반영 |
f4494da · e9886bd · 0bc300f · 1b5ef68 | ExploreGateway 위임 계획 → 클라이언트·라우터 이중화 → 계약서 → OpenAPI + 계약 테스트 |
a1a7757 · da1f924 | ModelGateway 우선 사용(귀속 헤더) + 임베딩 게이트웨이 경유 |
4ebfcfa · a19dbfe | 개발 스택 model-gateway 등록 + 전용 dev DB 연결 |
UiCenter
| 커밋 | 내용 |
|---|---|
43c74a2 · 061a5ed | UI플랫폼 재편 범위 문서 → 범위 확정 + RAG 소유자를 ExploreGateway로 결정 |
e805e6f · c6e6a4c · fc5f4df | 위임 계획 체크 · themePolicy/runtimeSettings 실측 검증 · 메뉴 소유자를 각 포털로 확정 |
99f38b8 | FileStore 문서 표기 갱신 완료 반영 |
89cdf20 · 66942ba | 모델 게이트웨이 범위·이름 제안 → ModelGateway 확정 반영 |
ef99fa5 · 1ea5582 · 50008c3 · fe5e30a | 저장소 생성·소비자 P1·P2 완료·개발 스택 등록·OpenAPI 링크 |
ea02f55 · dbc7af2 | 비용·쿼터·조회 결정 → 운영 정책 4항목 결정(프롬프트·폴백·임베딩·토큰) |
FileStore
| 커밋 | 내용 |
|---|---|
379ebb3 | RAGCenter 표기를 ExploreGateway로 통일(문서·코드 주석, API 필드명 유지) |
ModelGateway (신규 저장소, 로컬 git init만 완료)
| 커밋 | 내용 |
|---|---|
21767c3 | 서비스 골격(OpenAI 호환 프록시·서비스 토큰·메타데이터 감사) |
9af8132 | 개발 스택 기동 지원(진입점 listen·업스트림 미설정 허용·Dockerfile) |
7705f6b | OpenAPI 3.1 계약 + 문서·서버 일치 테스트 |
3ea15cb | 비용·쿼터·감사 영속화(PostgreSQL) + /v1/usage + 쿼터 429 |
05c0795 | 토큰 회전(다중 토큰)·모델 폴백(CLOUD 한정)·프롬프트 소유 경계 |
정합화(2026-09-13, 실사 정정) — FileStore 표기 원복(RAGCenter) · UiCenter 경계·결정 이력 정정 · ProcessCenter 어댑터 계약 정리(EXPLORE_ADAPTER_CONTRACT.md·explore-adapter.openapi.json·remoteExplore.test.ts) · 반대 방향 위임 클라이언트·문서 폐기
7. 미해결 · 후속 (우선순위)
| # | 항목 | 내용 | 위치 |
|---|---|---|---|
| 1 | 푸시 | 5개 저장소 모두 완료(2026-09-13) — PF(main + 태그 v0.6.153·v0.6.154)·ProcessCenter·UiCenter·FileStore·ModelGateway(원격 생성 후 최초 push) | 5개 저장소 |
푸시 준비 점검(2026-09-13) — 상세는 아래 절차 참고.
| 저장소 | 원격 | 미푸시 | 태그 | 비고 |
|---|---|---|---|---|
| portal-foundation | origin ✔ | 2 커밋 | v0.6.153·v0.6.154 미푸시 | --follow-tags 필요 |
| ProcessCenter | origin ✔ | 19 커밋 | 신규 없음 | vendor tarball 추적 ✔(107건, 0.6.154·ai 0.1.0 포함) |
| UiCenter | origin ✔ | 15 커밋 | 신규 없음 | vendor 추적 ✔(44건) |
| FileStore | origin ✔ | 1 커밋 | 신규 없음 | — |
| ModelGateway | origin ✔ (2026-09-13 생성, 비공개) | 0 | 없음 | 최초 push 완료 |
- 추적 중인
.env*는 모두.example(값 비어 있음) 이고 실제.env는 무시 상태다 — 비밀정보 유출 위험 없음. - 전 저장소
dirty=0(작업 트리 clean), lockfile 추적 ✔. - PF의
artifacts/는 의도적으로 gitignore 상태다(빌드 산출물). 배포 tarball의 보관 책임은 소비 저장소의vendor/가 진다 — 새 클론에서는pnpm pack으로 재생성한다. - 알려진 격차: ProcessCenter가
@hohyun94/portal-operations0.1.0을 참조하는데 PF 산출물에는 0.2.0이 있다(알림 계약 최신화). 푸시 후 0.2.0으로 올리는 것을 권장(복사 → 의존성 갱신 → 설치 → 컨테이너 재시작).
푸시 절차(순서)
portal-foundation:git push origin main --follow-tags(main +v0.6.153·v0.6.154태그 동시)ProcessCenter:git push origin mainUiCenter:git push origin mainFileStore:git push origin mainModelGateway: 원격 저장소 생성 후git remote add origin https://github.com/hohyun94/ModelGateway.git→git push -u origin main
푸시 실행 결과(2026-09-13)
| 저장소 | 결과 |
|---|---|
| portal-foundation | bbe7a0d..de2ecf1 · 태그 v0.6.153·v0.6.154 신규 등록 ✔ |
| ProcessCenter | 24afd09..da1f924 (19 커밋) ✔ |
| UiCenter | f7d4d8d..1ed0c46 (16 커밋) ✔ |
| FileStore | 24e2bd4..379ebb3 (1 커밋) ✔ |
| ModelGateway | origin(hohyun94/ModelGateway, 비공개) 생성 후 최초 push 완료 — main = 05c0795 |
| 2 | ExploreGateway 연동 |
| 3 | RAGCenter 연동 |
| 4 | 결재선 사용자 매핑 |
| 5 | 알림 확장 |
| 6 | MySQL 이관 |
| 7 | 외부 벡터 저장소 |
| 8 | RAG 비활성 사유 노출 |
| 9 | 배포 토큰 절차 |
| 10 | PF 기존 실패 테스트 |
8. 개발 환경 주의사항
- 컨테이너 소스/볼륨: 각 서비스는 소스를 bind mount하지만
node_modules는 익명 볼륨이다. 새 패키지·vendor tarball을 추가하면docker restart <컨테이너>(또는up -d --build)가 필요하다. - ModelGateway 기동:
docker compose -f docker-compose.dev.yml up -d --build model-gateway(호스트 3400). 로그에usage=postgres가 뜨면 영속 저장소 정상. - DB: 전용
model_gatewayDB 사용(생성 완료). 부팅 시model_gateway_*DDL을 재실행하며 모두 idempotent하다. DB가 없거나 장애면 메모리 저장소로 폴백하고 기동한다. - 쿼터:
model_gateway_quota_policies에 정책이 없으면 무제한이다. 정책을 넣으면 해당 (portal, purpose)의 일별 토큰 한도를 넘는 요청은 429로 차단된다. - PC ↔ 게이트웨이:
MODEL_GATEWAY_URL·MODEL_GATEWAY_SERVICE_TOKEN이 있으면 LLM 완성과 임베딩 모두 게이트웨이를 우선 사용하고, 실패 시PRIVATE_LLM_URL/PRIVATE_EMBEDDING_URL로 폴백한다. 둘 다 없으면 AI 기능은SKIPPED. - dev 업스트림: MG의 업스트림은
http://host.docker.internal:11434(호스트의 Ollama 등)이다. 모델 서버가 없으면 호출은502/요약은FAILED로 남지만 게시·분석 흐름은 차단되지 않는다. - AI 활성 조건: AI 완성은
MODEL_GATEWAY_URL또는PRIVATE_LLM_URL만으로 켜진다(DB 종류·RAG_ENABLED와 무관). 벡터 검색만RAG_ENABLED+ PostgreSQL + 임베딩 URL을 요구한다.
9. 다음 세션 시작점
- RAGCenter 연동 — API 계약(문서 인덱싱·검색·근거 답변) 확인 후 PC
rag경로 연결, 로컬 구현 축소. - ExploreGateway 연동 — 어댑터 계약·catalog 등록 확인,
EXPLORE_GATEWAY_API_KEY운영 주입(어댑터는server/remoteExplore.ts에 구현됨). - ModelGateway 운영 — 배포 토큰 2개 주입·회전 절차 문서화, 필요 시 사용량 대시보드 소유자 결정.
- 정합성 보완 — ProcessCenter의
@hohyun94/portal-operations를 0.2.0으로 갱신(알림 계약 최신화). - ExploreGateway·RAGCenter 저장소 상태 — 클론된 두 저장소의 미푸시·미커밋 여부 확인 및 최신화.
10. 세션 최종 상태 (2026-09-13 마감 · 이 절이 최신 기준)
§4~§9는 세션 진행 중 기록이고, 아래 §10이 마감 시점의 확정 상태다(커밋·검증·남은 작업).
10.1 최종 서비스 지도
| 서비스 | 저장소 | 이번 세션에서 추가된 것 | 상태 |
|---|---|---|---|
| portal-foundation 0.6.155 | portal-foundation | 알림(operations 0.2.0)·AI(ai-core 0.1.0)·통합 탐색(operations 0.3.0 + PortalExploreSearch) | ✅ 푸시 완료 |
| ProcessCenter | ProcessCenter | 노드 게시 거버넌스·불변 게시본·알림·AI 게시본 분석·DB 전략·탐색 어댑터·통합 탐색 프록시/화면·RAGCenter P1·P2 | ✅ 푸시 완료 |
| ExploreGateway | ExploreGateway | HTTP 런타임(탐색 API·DS 토큰 인증·catalog 기반 어댑터 자동 구성)·온보딩 문서 | ✅ 푸시 완료 · e2e 검증 |
| ModelGateway (신규) | ModelGateway | 서비스 골격·OpenAPI 계약·비용/쿼터 영속화·토큰 회전·모델 폴백 | ✅ 푸시 완료(비공개 저장소 생성) |
| DirectoryService | DirectoryService | 서비스 토큰 소비자별 등록(D1) · 위임 토큰 발급(D3) · 계약 문서 | ✅ 푸시 완료 · e2e 검증 |
| FileStore | FileStore | RAGCenter 표기 정정(원복) | ✅ 푸시 완료 |
| RAGCenter | RAGCenter | (변경 없음 — 계약만 실사) | 클론만 · 관찰 대상 |
| UiCenter | UiCenter | 경계·결정 이력·인수인계 문서 | ✅ 푸시 완료 |
10.2 계약·문서 위치 (최종)
| 문서 | 위치 | 내용 |
|---|---|---|
| 플랫폼 서비스 경계 | UiCenter/docs/{SERVICE_BOUNDARIES,ARCHITECTURE,DECISION_LOG,UI_PLATFORM_SCOPE,MODEL_GATEWAY_SCOPE}.md | 소유자 표·결정 이력(2026-09-13 4건) |
| 위임 토큰 계약 | DirectoryService/docs/delegation-token-contract.md | 경로 A/B·클레임·검증 6단계·D1~D4 진행 |
| 중앙 인증 계약 | DirectoryService/docs/portal-central-auth-contract.md | PKCE 로그인 + 위임 링크 |
| 탐색 어댑터 계약(PC 제공) | ProcessCenter/docs/EXPLORE_ADAPTER_CONTRACT.md + explore-adapter.openapi.json | POST /api/explore/v1/search·서비스 토큰·x-explore-subject-id |
| ExploreGateway 온보딩 | ExploreGateway/docs/adapter-onboarding.md | 카탈로그 등록·키 주입·런타임·검증 체크리스트(7/7) |
| RAGCenter 연동 계획 | ProcessCenter/docs/RAGCENTER_INTEGRATION_PLAN.md | 실사(API·JWT·RLS·수집 계약)·P1·P2 구현·미해결 |
| ModelGateway 계약 | ModelGateway/docs/{openapi.json,ARCHITECTURE.md} | 5경로·귀속 헤더·영속화·회전·폴백 |
| DB 전략 | ProcessCenter/docs/DB_STRATEGY.md | 트랜잭션 이중 지원·벡터 분리·서비스 경계 §8 |
10.3 검증 상태 (최종)
| 대상 | 결과 |
|---|---|
| portal-foundation | pnpm check 0 · 신규 테스트 operations-core/explore.test.ts(6) · ui-react/exploreSearch.contract.test.tsx(6) 통과 · 릴리스 0.6.155·artifacts 생성 |
| ProcessCenter | pnpm check 0 errors · 서버 테스트 35개 파일 전부 통과 · 실기동 200 |
| ExploreGateway | pnpm check 0 · 5개 파일 통과 · 실기동 헬스/탐색/401 확인 |
| ModelGateway | pnpm check 0 · 4개 파일 통과(gateway·contract·usage·resilience) · 실기동 usage=postgres |
| DirectoryService | pnpm check 0 · 2개 파일(10건) 통과 · 레거시 테마 서비스 토큰 200(회귀 없음) |
개발 스택 e2e
| 시나리오 | 결과 |
|---|---|
| ① 통합 탐색 | 사용자 토큰 → 게이트웨이(3500) → DS 카탈로그 → PC 어댑터(loopback) → 업무 데이터 반환(partial=false) |
| ② 위임 토큰 | DS POST /api/internal/delegation-token → 게이트웨이 탐색 성공(aud=explore-gateway) · 잘못된 시크릿 401 |
| ③ RAG 수집 엔드포인트 | PC GET /api/rag/v1/documents/:id — 무토큰 401 · 미게시 404(게시본 존재 시 200) |
| ④ ModelGateway 쿼터 | 한도 초과 시 429 + Retry-After 60 · 감사 status=429 기록 · /v1/usage 집계 일치 |
10.4 커밋 목록 (이번 세션 · 전부 푸시 완료)
| 저장소 | 커밋 |
|---|---|
| portal-foundation (3) | 27f7cf5(알림) · de2ecf1(portal-ai) · 3841981(통합 탐색 클라이언트·컴포넌트) |
| ProcessCenter (30) | 거버넌스·알림·AI 분석·DB 전략(d4f29c3~1ab2c5e 7+1) → 서비스 경계·정합화(fed14d7, 60fea48, e83bd5c, f4494da, e9886bd, 0bc300f, 1b5ef68, 9281512, 90b7246, f25aa4a, a4ee0c7, f765e78) → 게이트웨이·PF 반영(4ebfcfa, a1a7757, a19dbfe, da1f924, ae7f711, 5dd938a) → 프록시·RAG(be00c06, ba1e4af, e5542cd, aa48abf) |
| UiCenter (20) | 경계·결정 문서(43c74a2~dbc7af2) · 인수인계(4efb5de, 1ed0c46, 50008c3) · 이후 갱신(320e390, bbe6e2a, d15c641, 3cdeb87, aeda820) |
| DirectoryService (2) | 3aaa5a0(위임 토큰 계약) · 0792464(D1 소비자 등록 + D3 위임 발급) |
| ModelGateway (5) | 21767c3(골격) · 9af8132(기동) · 7705f6b(OpenAPI) · 3ea15cb(영속화·쿼터) · 05c0795(토큰 회전·폴백) |
| ExploreGateway (4) | 7283036(온보딩 문서) · e304bed(HTTP 런타임) · 75bd5fa(검증 기록) · 0a73713(스테이징 파일 정리) |
| FileStore (2) | 379ebb3(표기 변경) · 6fb0b8c(표기 원복) |
10.5 남은 작업 (우선순위)
| # | 항목 | 내용 |
|---|---|---|
| 1 | RAGCenter 수집 API 협의 | HTTP 수집 엔드포인트 확정 시 PC contentLocator로 POST 추가 → RAG_SERVICE_ENABLED=true 전환. DS에 rag-center 포털 principal 등록(rag:read/rag:sync/rag:admin) |
| 2 | RAGCenter P3 | RAGCenter 가동 후 로컬 폴백 미사용 확인 → server/rag/**(청킹·임베딩·pgvector) 축소 |
| 3 | DS D2 완성 | directory_users.clearance_level 속성·관리 화면(현재 INTERNAL 기본값) → 사용자별 RAG 열람 등급 |
| 4 | 탐색/RAG 화면 노출 | ✅ 기본 메뉴 시드에 추가 완료(/explore 통합 탐색 · /rag 프라이빗 RAG, AUTHENTICATED·sortOrder 30/40). 관리자 메뉴 관리 화면에서 순서·노출 조정 가능 |
| 5 | 운영 설정 | ExploreGateway 카탈로그 정책·포털 토큰 교체(다중 토큰 회전), 게이트웨이 PORTAL_CONSOLE_JWT_AUDIENCE 운영 값 |
| 6 | ModelGateway 운영 | 배포 토큰 2개 주입·회전 절차 문서화, /v1/usage 대시보드 소유자, 프롬프트 표준화(§8-1) |
| 7 | PF 기존 실패 10건 | @testing-library/jest-dom devDependency 추가로 해소 |
| 8 | DS 위임 경로 A | 사용자 토큰 교환(경로 A)이 필요해지면 추가(현재는 경로 B만 구현) |
| 9 | 저장소 상태 | ExploreGateway·RAGCenter 저장소의 미커밋/미푸시 상태 확인(이번 세션에서 변경 없음) |
10.6 개발 환경 변수 요약 (dev compose)
| 서비스 | 주요 변수 |
|---|---|
| ProcessCenter | MODEL_GATEWAY_URL·MODEL_GATEWAY_SERVICE_TOKEN·MODEL_GATEWAY_MODEL · EXPLORE_GATEWAY_URL·EXPLORE_GATEWAY_AUDIENCE=explore-gateway·EXPLORE_GATEWAY_API_KEY · RAG_SERVICE_ENABLED=false·RAG_SERVICE_URL·RAG_SERVICE_TOKEN · PORTAL_JWT_SECRET(위임 발급 검증) · PROCESS_CENTER_SERVICE_CLIENT_SECRET |
| ExploreGateway | PORTAL_CONSOLE_JWT_SECRET(= DS PORTAL_JWT_SECRET)·PORTAL_CONSOLE_JWT_AUDIENCE=explore-gateway · CONTROL_PLANE_ORIGIN·CONTROL_PLANE_API_KEY(directory:read 포털 키) · PORTAL_SERVICE_TOKENS_JSON |
| DirectoryService | PORTAL_CONSOLE_TOKEN_CONSUMERS_JSON(소비자·delegationAudiences·delegationScopes) · PORTAL_CONSOLE_TENANT_ID · PORTAL_CONSOLE_DEFAULT_CLEARANCE_LEVEL |
| ModelGateway | MODEL_GATEWAY_SERVICE_TOKEN(S)·MODEL_GATEWAY_UPSTREAM_URL·MODEL_GATEWAY_FALLBACK_URL · DATABASE_URL(전용 model_gateway DB) |
10.7 다음 세션 시작점
- RAGCenter 수집 API 협의 — HTTP 수집이 확정되면 PC POST 연결 +
RAG_SERVICE_ENABLED=true전환, 이어서 P3(로컬 축소) - DS D2 — 사용자 등급 속성으로 RAG 열람 범위를 사용자별로 세분화
- 노출·운영 —
/explore·/rag메뉴 연결(포털 결정) · 카탈로그 정책·토큰 회전 · ModelGateway 대시보드 - 잔여 정리 — PF
jest-dom테스트 해소, DS 위임 경로 A 필요 여부 판단
11. 명칭 정비 (2026-09-13 후속)
소비 포털은 …Center, 플랫폼 서비스는 기능 접미사로 이름을 통일했다. 기준 문서는 UiPlatform/docs/PLATFORM_NAMING.md다.
| 이전 | 새 이름 | 저장소·로컬 폴더 | 패키지명 | dev compose 서비스 / 컨테이너 | 포트 |
|---|---|---|---|---|---|
Portal Control Center (DirectoryService) | PortalConsole | PortalConsole | portal-console | portal-console / portal-console-dev | 3100 |
UI플랫폼 (UiCenter) | UiPlatform | UiPlatform | ui-platform | ui-platform / ui-platform-dev | 3200 |
FileStore | FileStore | FileStore | @hohyun94/file-store | file-store / file-store-dev | 3300 |
RAGCenter | RagService | RagService | (Python — npm 없음) | dev 스택 미포함 | — |
적용 범위: GitHub 저장소명 · 로컬 폴더명 · git remote URL · 패키지명 · docker-compose.dev.yml(서비스 키·컨테이너명·빌드 컨텍스트·서비스 간 호스트명) · README/서비스 경계 문서 헤더.
유지(호환) 식별자: DB 이름과 file_store_* 테이블, API 경로, 토큰 audience·포털 ID(ui-center·ui-center-theme·file-store·rag-center), 환경변수 접두(DIRECTORY_*·UI_CENTER_*·FILE_STORE_*·RAG_CENTER_* — 값/호스트명만 새 이름), 배포 서비스명, 코드 심볼(getUiCenterUrl·uiCenterReadRoute·.ui-center-login), RagService Python 패키지(ragcenter), PF 어댑터 패키지명. 근거·개편 계획은 명칭 문서 §3·§5.
검증: dev 스택 재기동 후 ProcessCenter :3000 200 · PortalConsole :3100/api/health 200(마이그레이션 자동 적용) · UiPlatform :3200 200(제어평면 등록 동기화 성공) · FileStore :3300/healthz 200 · ExploreGateway :3500/healthz 200(control-plane=http://portal-console:3000) · ModelGateway :3400 401(서비스 토큰 필요 — 기존과 동일).