feat(backend): 사내 LLM(FabriX) 게이트웨이 /api/ito + OpenCode FabriX 설정 렌더

- apps/gateway: OpenCode→FabriX 통과 중계. 헤더 3종 인증, x-llm-model-id 로 모델 선택, 401 시 Bearer/날것×클라이언트 헤더 재시도, 모델 허용 목록. ABAP_OPENCODE apps_ito 통째 복사 대신 200줄로
- opencode/opencode.fabrix.json.tmpl + render_opencode.py — .env AAF_* 로 렌더
- .env.example AAF 블록(기본 605 Gemma4, TOKEN_PREFIX=bearer). 파서가 줄 끝 # 주석을 값으로 읽던 것 수정
- tests/test_gateway.py 9개(MockTransport)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
lee-hyeon-cheol
2026-09-17 16:34:53 +09:00
co-authored by Claude Fable 5.1
parent 47d31dbe06
commit 435952f25c
14 changed files with 620 additions and 1 deletions
@@ -0,0 +1,15 @@
# 2026-09-17 사내 LLM(FabriX) 관련 호출은 이 PC 에서 하지 않는다
## 원문
> 이 피씨에서 호출해보지마 위험해
## 왜 틀렸나
FabriX 게이트웨이(`/api/ito`)를 붙인 뒤 "실제로 뜨는지" 확인하려고 개발 PC 에서 Django 를 재기동해 호출해 보려 했음. 사내 LLM 은 고객사 망·계정에 묶인 거라 개발 PC 에서 건드리면 안 됨. 검증은 단위 테스트(MockTransport)까지만.
## 앞으로
- FabriX·`/api/ito`·AAF_* 설정이 관련된 건 **이 PC 에서 서버 띄워 호출하지 않음.** 테스트는 `tests/test_gateway.py` 처럼 상류를 mock 으로만.
- ABAP_OPENCODE 의 `.env` 에 있는 사내 키 값은 읽지도, 복사하지도 않음. 필요하면 키 이름만 봄.
- 고객사 환경 확인은 사용자가 직접 함. 나는 절차(README)와 확인 명령만 적어둠.
+1 -1
View File
@@ -37,7 +37,7 @@ Django 가 OpenCode 서버(CodeAssist 전용 workspace)를 호출하고, OpenCod
| OpenCode HTTP 클라 + `/event` SSE 파서(60초 무활동 재연결) | `common/opencode_service.py` | 그대로. base URL 만 env |
| 세션 owner 매핑 아이디어 | `apps/ownership/` | 미러 테이블(5.3)로 흡수, 파일 소유권·워처는 안 가져옴 |
| Dockerfile(be·opencode), compose, bare `run.sh` | `deploy/` | 서비스 3개(be·opencode-ca·mcp)로 줄임 |
| FabriX 게이트웨이 `apps_ito/aaf` (OpenAI 호환 중계, 401 재시도) | `apps_ito/` | **1차 안 가져옴.** 개발은 OpenRouter 직결. 고객사 갈 때 통째 복사(설계상 한 줄 include 로 붙게 돼 있음) |
| FabriX 게이트웨이 `apps_ito/aaf` (OpenAI 호환 중계, 401 재시도) | `apps/gateway/` | **2026-09-17 작게 다시 씀(통째 복사 안 함).** 그쪽은 11k 줄·DB 테이블·langgraph 등 의존성 15개인데 필요한 건 passthrough 300줄. 같은 규칙(헤더 3종·x-llm-model-id·401 형식 재시도·모델 허용 목록)만 `fabrix.py`+`views.py` 200줄로. 사용자별 키(IP 마스터)는 안 옮김 — 서비스 키 하나 |
| `sap-icf` MCP 서버 | `web/MCP/code` | 복사 안 하고 **같은 VM 이면 기존 :3200 공유**, 아니면 그때 복사 |
안 가져오는 것: `apps/files`(산출물), `apps/usage`, `be-watcher`, ABAP 스킬 4종, `AGENTS.md`(FS 브레인스토밍 규칙 — CodeAssist 랑 정반대).