#576(결정 1.37 배선)이 머지돼서 새 추출만 계약 값을 씁니다. 알파에 이미 쌓인 사전적재
2종의 스냅샷은 아직 파일명 규칙 값입니다. 그 두 상품을 한 번 재추출하면 규칙이 하나로
남습니다.
무엇이 갈려 있나
계약 샘플 / 지금 서버가 넘기는 값 doc-els-kiwoom-4181
doc-var-samsung-b2601
#576 이전 추출이 남긴 값 doc-els-kiwoom-4181-simple-prospectus
(파서가 파일명에서 만든 것) doc-var-samsung-b2601-product-summary
extracted_risk_items.document_id 한 열에 두 규칙이 서 있습니다. 결정 1.37 이 막으려던
상태이고, 그 상태에서는 "이 항목이 어느 파스에서 왔나" 에 답할 수 없습니다.
할 일 — POST 두 번
POST /api/products/doc-els-kiwoom-4181/extract
POST /api/products/doc-var-samsung-b2601/extract
마이그레이션은 없습니다. ProductRiskItems.extract 가 deleteByProductId 후 전량
재삽입이라(:117-122) 그 두 상품의 스냅샷이 새 규칙으로 교체됩니다. 항목 수는 그대로여야
합니다(ELS 13 · 변액 10).
❗필요한 것은 둘뿐입니다 — SSH 도 ADMIN 계정도 아닙니다
① https://sphinxfin.duckdns.org 로 나가는 네트워크
② 엣지 basic-auth 자격 (SSM: /sphinx/prod/api-user · api-password)
개방 모드의 nginx 가 경로별로 계정을 주입하고 추출 경로가 거기 들어 있습니다.
web/docker-entrypoint.d/15-demo-mode.sh:108
~^/api/products/(documents|[^/]+/extract)$ "Basic $(b64 "$admin")"
rbac_policy.yaml:189 product:manage → roles: [ADMIN]
그래서 바깥 문만 통과하면 됩니다. 명령은 docs/deployment.md §8 관례대로 stdin(-K -)으로
넘깁니다 — -u 는 argv 라 ps 에 보입니다.
SSM_PREFIX="${SSM_PREFIX:-/sphinx/prod}"
U=$(aws ssm get-parameter --name "$SSM_PREFIX/api-user" \
--with-decryption --query Parameter.Value --output text)
P=$(aws ssm get-parameter --name "$SSM_PREFIX/api-password" \
--with-decryption --query Parameter.Value --output text)
for p in doc-els-kiwoom-4181 doc-var-samsung-b2601; do
printf 'user = "%s:%s"\n' "$U" "$P" |
curl -sS -K - -X POST -o /dev/null -w "$p %{http_code}\n" \
"https://sphinxfin.duckdns.org/api/products/$p/extract"
done
둘 다 200 이면 끝입니다. 확인은 항목 수로 합니다.
for p in doc-els-kiwoom-4181 doc-var-samsung-b2601; do
printf 'user = "%s:%s"\n' "$U" "$P" |
curl -sS -K - -o /dev/null -w "$p %{http_code}\n" \
"https://sphinxfin.duckdns.org/api/products/$p/risk-items"
done
# ELS 13 · 변액 10 이 그대로여야 한다
❗502 가 나면 재추출이 안 된 것입니다
추출은 ai-service 를 지나므로 LLM 키가 살아 있어야 합니다(결정 7.56 이 같은 자리를 다룹니다).
502 면 기존 스냅샷이 그대로 남습니다 — 실패한 추출이 멀쩡한 스냅샷을 지우지 않는 것이
설계입니다(extract javadoc). 그러니 이 명령은 여러 번 돌려도 안전합니다.
왜 「끝났는지」를 지금은 확인할 수 없나
document_id 를 응답으로 내보내는 경로가 없어서 밖에서는 갈렸는지 알 수 없습니다.
#578 의 ②(폴백이 쓰였는지 신호)가 들어오면 그 확인 자리가 생깁니다 — 그때까지는
"POST 가 200 이었다" 가 유일한 근거입니다. 그래서 위 명령을 돌린 결과를 이 이슈에
붙여 주시면 그것이 기록이 됩니다.
나는 왜 못 돌리나
샌드박스에서 알파로 나가지 않고 aws 자격도 없습니다(aws sts get-caller-identity →
NoCredentials). 자격을 세션으로 가져오는 쪽은 안 합니다 — 비밀정보를 옮기지 않는 것이
그 규칙의 요점입니다. 코드 쪽 배선(#576)은 끝났고 남은 것이 이 한 번의 실행입니다.
관련: #576(배선) · 결정 1.37 · 미결 10.87 · #578(폴백 신호) · #528
#576(결정 1.37 배선)이 머지돼서 새 추출만 계약 값을 씁니다. 알파에 이미 쌓인 사전적재2종의 스냅샷은 아직 파일명 규칙 값입니다. 그 두 상품을 한 번 재추출하면 규칙이 하나로
남습니다.
무엇이 갈려 있나
extracted_risk_items.document_id한 열에 두 규칙이 서 있습니다. 결정 1.37 이 막으려던상태이고, 그 상태에서는 "이 항목이 어느 파스에서 왔나" 에 답할 수 없습니다.
할 일 — POST 두 번
마이그레이션은 없습니다.
ProductRiskItems.extract가deleteByProductId후 전량재삽입이라(
:117-122) 그 두 상품의 스냅샷이 새 규칙으로 교체됩니다. 항목 수는 그대로여야합니다(ELS 13 · 변액 10).
❗필요한 것은 둘뿐입니다 — SSH 도 ADMIN 계정도 아닙니다
개방 모드의 nginx 가 경로별로 계정을 주입하고 추출 경로가 거기 들어 있습니다.
그래서 바깥 문만 통과하면 됩니다. 명령은
docs/deployment.md§8 관례대로 stdin(-K -)으로넘깁니다 —
-u는 argv 라ps에 보입니다.둘 다 200 이면 끝입니다. 확인은 항목 수로 합니다.
❗502 가 나면 재추출이 안 된 것입니다
추출은 ai-service 를 지나므로 LLM 키가 살아 있어야 합니다(결정 7.56 이 같은 자리를 다룹니다).
502 면 기존 스냅샷이 그대로 남습니다 — 실패한 추출이 멀쩡한 스냅샷을 지우지 않는 것이
설계입니다(
extractjavadoc). 그러니 이 명령은 여러 번 돌려도 안전합니다.왜 「끝났는지」를 지금은 확인할 수 없나
document_id를 응답으로 내보내는 경로가 없어서 밖에서는 갈렸는지 알 수 없습니다.#578의 ②(폴백이 쓰였는지 신호)가 들어오면 그 확인 자리가 생깁니다 — 그때까지는"POST 가 200 이었다" 가 유일한 근거입니다. 그래서 위 명령을 돌린 결과를 이 이슈에
붙여 주시면 그것이 기록이 됩니다.
나는 왜 못 돌리나
샌드박스에서 알파로 나가지 않고
aws자격도 없습니다(aws sts get-caller-identity→NoCredentials). 자격을 세션으로 가져오는 쪽은 안 합니다 — 비밀정보를 옮기지 않는 것이그 규칙의 요점입니다. 코드 쪽 배선(
#576)은 끝났고 남은 것이 이 한 번의 실행입니다.관련:
#576(배선) · 결정 1.37 · 미결 10.87 ·#578(폴백 신호) ·#528