운영에 AI가 배포되어 있지 않고 back이 부를 주소도 없다. #102를 정리해 다시 끊는다 — 그 이슈는 PINLOG_AI_INTERNAL_SECRET과 묶여 있었는데 그쪽은 #105로 해소됐고, 남은 것은 주소 하나다.
시연 범위가 전체 통합으로 확정돼(#102) 선택 사항이 아니다.
지금 상태 — 확인한 것
| 확인 대상 |
상태 |
infra/apps/prod/ |
back 하나뿐. ai 없음 |
infra/apps/dev/ai/values.yaml |
enabled: false — "승인되지 않은 계약이 남아 있어 workload는 의도적으로 차단한다" |
back/src/main/resources/application.yml:114 |
base-url: ${PINLOG_AI_BASE_URL:http://localhost:8000} |
infra/apps/prod/back/values.yaml env: |
PINLOG_AI_BASE_URL 없음 |
즉 운영 파드는 AI 호출을 전부 자기 자신의 8000 포트로 보낸다. 거기에는 아무것도 없다.
왜 지금 중요한가 — 검색은 오류 화면이 뜬다
임베딩 경로와 검색 경로의 실패 방식이 다르다.
| 소비자 |
주소가 틀렸을 때 |
사용자에게 |
AiProcessClient (임베딩 접수) |
삼킨다. PENDING → 5분 주기 3회 재시도 → FAILED |
안 보인다. Context는 정상 생성 |
AiSearchClient (자연어 검색) |
AiSearchException.unavailable()을 던진다 |
오류 응답 |
// AiSearchClient.java:108
* @throws AiSearchException 호출이 실패했을 때. <b>빈 목록으로 대신하지 않는다</b>
빈 결과로 삼키지 않는 것은 설계된 계약이다(공용 계약 05 §7.1 런타임 대조). 설정이 어긋난 채 배포된 사실이 "검색 결과 없음"으로 보이는 쪽을 막으려고 일부러 그렇게 했다. 따라서 시연에서 자연어 검색을 보여주면 그 자리에서 터진다.
임베딩 쪽은 #104(재스캔 Scheduler·FAILED Finalizer, 4a9ab36) 이후 배포 약 15분이면 context_ai_state에 FAILED가 쌓이기 시작한다. 그게 주소 오류의 가장 빠른 신호다.
해야 할 일
back 저장소 변경은 필요 없다. application.yml:114의 placeholder가 이미 있어 주입만 하면 그대로 읽힌다.
함께 딸린 것 (차단은 아님)
back/docs/development/configuration.md의 인프라 요청 표가 낡았다. 문서 전용이라 아무 때나, 티켓 없이 고칠 수 있다.
- L80 "인프라 계약에 아직 반영되지 않았으므로 배포 전에 요청해야 합니다" — 07-30에 6종 전부
back-owner-secrets로 봉인·주입돼 사실이 아니다
- 표에
PINLOG_AI_INTERNAL_SECRET이 빠져 있다(운영 필수 — 없으면 운영 프로파일 기동 실패, AiProcessClient.java:65)
PINLOG_AI_EMBEDDING_PROFILE은 요청 대상이 아니다. application.yml:122에 리터럴 기본값이 있다(BD-39)
아직 답을 못 받은 질문 — runtime Secret 키 집합
AI 파트가 ai#39에 남겼다가 그 PR 병합과 함께 묻혔고, #102로 옮겨 적었으나 여전히 미응답이다. #102를 닫으면서 또 묻히지 않도록 여기로 옮긴다.
등록 완료 ai 저장소 pinlog-secrets-dev
GMS_API_KEY · GMS_BASE_URL · INTERNAL_SHARED_SECRET (3키)
그런데 세 곳이 여전히 exact 8-key schema를 규정한다.
| 위치 |
내용 |
S15P11A705-118 본문 |
"ai-runtime-secrets는 다음 exact 8-key schema만 허용한다" |
infra/docs/ai-dev-prerequisites.md 3절 |
같은 문구 |
infra/tools/validate_ai_dev_prerequisites.py:17 |
REQUIRED_RUNTIME_KEYS 8개. missing뿐 아니라 unexpected도 오류 |
지금 상태로 검증기를 돌리면 DATABASE_URL·PINLOG_EMBEDDING_MODEL·DIMENSION·DISTANCE·PROFILE 다섯이 missing으로 걸린다. EMBEDDING 넷은 S15P11A705-96·ai#36에서 app/core/config.py 기본값으로 옮겨 주입 대상에서 빠졌다(공용 계약 05 §7.1 개정).
세 곳을 3키 기준으로 갱신할 예정인지만 알려주면 된다. 8키 유지 결정이면 AI 파트가 나머지를 등록하겠다고 했다. apps/dev/ai가 enabled: false인 상태라 이 판정이 dev AI 기동의 선행이고, 전체 통합 확정으로 dev 기동이 prod 배포의 선행이 됐다.
참고
운영에 AI가 배포되어 있지 않고 back이 부를 주소도 없다. #102를 정리해 다시 끊는다 — 그 이슈는
PINLOG_AI_INTERNAL_SECRET과 묶여 있었는데 그쪽은 #105로 해소됐고, 남은 것은 주소 하나다.시연 범위가 전체 통합으로 확정돼(#102) 선택 사항이 아니다.
지금 상태 — 확인한 것
infra/apps/prod/back하나뿐.ai없음infra/apps/dev/ai/values.yamlenabled: false— "승인되지 않은 계약이 남아 있어 workload는 의도적으로 차단한다"back/src/main/resources/application.yml:114base-url: ${PINLOG_AI_BASE_URL:http://localhost:8000}infra/apps/prod/back/values.yamlenv:PINLOG_AI_BASE_URL없음즉 운영 파드는 AI 호출을 전부 자기 자신의 8000 포트로 보낸다. 거기에는 아무것도 없다.
왜 지금 중요한가 — 검색은 오류 화면이 뜬다
임베딩 경로와 검색 경로의 실패 방식이 다르다.
AiProcessClient(임베딩 접수)PENDING→ 5분 주기 3회 재시도 →FAILEDAiSearchClient(자연어 검색)AiSearchException.unavailable()을 던진다빈 결과로 삼키지 않는 것은 설계된 계약이다(공용 계약 05 §7.1 런타임 대조). 설정이 어긋난 채 배포된 사실이 "검색 결과 없음"으로 보이는 쪽을 막으려고 일부러 그렇게 했다. 따라서 시연에서 자연어 검색을 보여주면 그 자리에서 터진다.
임베딩 쪽은 #104(재스캔 Scheduler·FAILED Finalizer,
4a9ab36) 이후 배포 약 15분이면context_ai_state에FAILED가 쌓이기 시작한다. 그게 주소 오류의 가장 빠른 신호다.해야 할 일
S15P11A705-61 [AI] AI 서버 배포 인프라 요청갱신 — AI 파트. 본문 두 곳이 현행 계약과 어긋나 있다(SealedSecret 경로-154표준화, Embedding Profile ConfigMap 단일 주입은 BD-39로 폐기)apps/prod/ai등록 — 인프라. 내부 전용 ClusterIP · 포트 8000, 외부 진입점 없음. FQDN은 인프라가 확정한다apps/prod/back/values.yaml의env:에PINLOG_AI_BASE_URL추가 — 인프라context_ai_state에FAILED가 더 쌓이지 않는지 확인back저장소 변경은 필요 없다.application.yml:114의 placeholder가 이미 있어 주입만 하면 그대로 읽힌다.함께 딸린 것 (차단은 아님)
back/docs/development/configuration.md의 인프라 요청 표가 낡았다. 문서 전용이라 아무 때나, 티켓 없이 고칠 수 있다.back-owner-secrets로 봉인·주입돼 사실이 아니다PINLOG_AI_INTERNAL_SECRET이 빠져 있다(운영 필수 — 없으면 운영 프로파일 기동 실패,AiProcessClient.java:65)PINLOG_AI_EMBEDDING_PROFILE은 요청 대상이 아니다.application.yml:122에 리터럴 기본값이 있다(BD-39)아직 답을 못 받은 질문 — runtime Secret 키 집합
AI 파트가
ai#39에 남겼다가 그 PR 병합과 함께 묻혔고, #102로 옮겨 적었으나 여전히 미응답이다. #102를 닫으면서 또 묻히지 않도록 여기로 옮긴다.그런데 세 곳이 여전히 exact 8-key schema를 규정한다.
S15P11A705-118본문ai-runtime-secrets는 다음 exact 8-key schema만 허용한다"infra/docs/ai-dev-prerequisites.md3절infra/tools/validate_ai_dev_prerequisites.py:17REQUIRED_RUNTIME_KEYS8개.missing뿐 아니라unexpected도 오류지금 상태로 검증기를 돌리면
DATABASE_URL·PINLOG_EMBEDDING_MODEL·DIMENSION·DISTANCE·PROFILE다섯이 missing으로 걸린다. EMBEDDING 넷은S15P11A705-96·ai#36에서app/core/config.py기본값으로 옮겨 주입 대상에서 빠졌다(공용 계약 05 §7.1 개정).세 곳을 3키 기준으로 갱신할 예정인지만 알려주면 된다. 8키 유지 결정이면 AI 파트가 나머지를 등록하겠다고 했다.
apps/dev/ai가enabled: false인 상태라 이 판정이 dev AI 기동의 선행이고, 전체 통합 확정으로 dev 기동이 prod 배포의 선행이 됐다.참고
SPRING_PROFILES_ACTIVE=prod. 별건이며 이 이슈를 기다리지 않는다. 그쪽 차단 요소(JWT_PRIVATE_KEY·PINLOG_AI_INTERNAL_SECRET)는 #105로 전부 풀렸고,PINLOG_AI_BASE_URL은 기동을 막지 않는다