--- date: 2026-03-25 subject: 신규 스킬 통합 테스트 결과 writer: 24-claude (총괄) testers: 24-Cursor(session-logs), 24-Codex(summarize), 24-Gemini(RSS), 23-Cursor(gitea) --- # 신규 스킬 통합 테스트 결과 ## 테스트 요약 | 스킬 | 상태 | 응답 시간 | 비고 | |------|------|----------|------| | **session-logs** | **정상** | ~20ms | 한글 q 파라미터 URL 인코딩 필요 | | **blogwatcher (RSS)** | **정상** | 테스트 중 | feedparser 동작 확인 | | **summarize (text)** | **정상** | ~1.5s | LLM 호출 포함 | | **summarize (url)** | 수정 후 정상 | - | 컨테이너→호스트 IP 문제 해결 | | **whisper** | **설정 완료** | - | OPENAI_API_KEY compose override 문제 해결 | | **gitea** | **인증 대기** | ~6.6ms | GITEA_TOKEN 미설정 → 400 정상 에러 반환 | ## 발견된 이슈 및 해결 ### 이슈 1: 컨테이너→호스트 통신 (summarize, whisper, gitea) - **원인**: Docker 브리지 네트워크에서 `localhost:8001` = 컨테이너 자신 - **해결**: `.env`에 `LLM_GATEWAY_URL=http://192.168.0.106:8001/api/llm/generate` 설정 - **근본 원인**: compose `environment`의 `${VAR:-default}` 패턴이 env_file보다 우선 ### 이슈 2: OPENAI_API_KEY 빈 값 덮어쓰기 (whisper) - **원인**: compose `environment: OPENAI_API_KEY=${OPENAI_API_KEY}` → 호스트에 env 없으면 빈 값 - **해결**: compose environment에서 해당 줄 제거, secrets.env에서 직접 주입 ### 이슈 3: GITEA_TOKEN 미설정 - **상태**: 의도된 동작 (400 에러 정상 반환) - **해결**: secrets.env에 GITEA_TOKEN 추가 필요 ## 성능 | 스킬 | 응답 시간 | 병목 | |------|----------|------| | session-logs | 20ms | DB 쿼리 (빠름) | | summarize (text) | 1.5s | LLM 호출 | | gitea | 6.6ms | HTTP 프록시 (빠름) | ## SSOT 교훈 compose `environment`의 `${VAR:-default}` 패턴은 `env_file`보다 우선 적용되어 SSOT 원칙을 위반할 수 있음. → **원칙 추가 권장**: compose `environment`에 env_file과 겹치는 변수를 `${VAR:-default}` 형태로 두지 않는다. 이 원칙은 이미 `infrastructure-ssot-principle.md §7`에 있음: > 공용 env_file을 읽는 compose는 같은 키를 environment: KEY=${KEY}로 다시 선언해 로컬 .env placeholder가 runtime.env·secrets.env를 덮어쓰게 만들지 않는다.