■ 최종 갱신 2026-09-28 — 심사는 클라우드(seuk.suvisdev.cloud · Claude) 단독으로 진행 중이다. 코드는 09-18 8071fd9 이후 동결했고, 09-28 점검에서 컨테이너 5개와 헬스체크 모두 정상이었다. 다음 단계는 10-14~10-27 GPU 풀가동이다. → §7
● 2026-09-18 갱신 — 클라우드 전환 (현재 기준)
이 문서는 온프레미스 자체 서빙·Qwen 자체학습 기준으로 작성됐다. 프로젝트는 이후 심사·운영을 클라우드(AWS · seuk.suvisdev.cloud)에서 Anthropic Claude 기반으로 확정했다. 아래 온프레미스/자체학습/"Claude API 미의존" 서술은 당시 기록이며, 현재 심사 기준은 클라우드·Claude 다.
On-Premise Final Report

Arda 온프레미스 — 구축 · 운영 · 오류 · 폐쇄 종합보고

심사기간(09-20~10-17) 프리즈 배포를 3대 PC 온프레미스로 구축했다가, 2026-09-18 온프레미스를 폐쇄하고 AWS(Anthropic Claude) 배포로 전환하기로 결정. 무엇을 만들었고 · 어떤 오류를 어떻게 고쳤으며 · 왜 접었는지의 기록.

최종 결정 요약

결정온프레미스 폐쇄 · 심사는 AWS(EC2, Seuk-Team/Arda 배포)로 진행
시점2026-09-18
핵심 사유온프레미스 고유의 실패가 심사 직전에 계속 쌓임 — 로컬 sLLM(qwen3)의 다단계 도구호출 불안정, 브라우저→내부 MinIO 접근 불가. AWS 는 Claude(안정적 도구호출)+실 S3(브라우저 접근 가능)라 이 부류 오류가 원천적으로 없음
AWS 로 이관심사자용 데모 로그인(Login.tsx + 시연계정 잠금) → Seuk-Team/Arda 커밋 (AWS auto-CD 가 origin/main ff-merge 배포)
자산 보존코드는 해커톤 repo(Seuk-Hackathon/arda). 학습 어댑터·GPU 이미지·문서는 PC1/바탕화면

1.온프레미스에서 무엇을 만들었나 (구성)

1-1. 3대 PC 역할

PCIP역할
PC1192.168.0.235Postgres · api · Caddy · n8n · MinIO · cloudflared(터널) · Ollama (GPU RTX 3050)
PC2192.168.0.115lie-detection (답변-서류 일관성 대조 + 보조 신호 · STT · 표정 ViT) · RTX 3050
PC3192.168.0.122Ollama 예비(standby)

1-2. AI 스택 (당시 직접 학습 모델)

아래는 온프레 당시 구성이다. 심사·운영 서빙은 클라우드 Anthropic Claude(요약·평가·추천 3단 체인·도구 호출·FAQ)로 확정됐다. STT 는 업로드 답변·재전사·아르 음성 = OpenAI whisper-1 API, 실시간 면접 전사 = CPU 로컬 faster-whisper 로 갈려 돈다(09-17 운영 실측, ADR-0038 「같은 변수, 두 해석」 — §7-1). Qwen3 어댑터 3종은 직접 학습(Colab QLoRA)한 완결 R&D 자산으로 보존한다.

1-3. 데이터 · 파일

2.발생한 오류와 수정 내역 (증상 → 원인 → 수정)

2-1. Watchdog .ps1 파서 오류

증상register-watchdog.ps1/wsl-watchdog.ps1 가 PowerShell 5.1 에서 파싱 실패 원인한글 주석 + 따옴표 손실(Start-Process -ArgumentList "-c","sleep infinity" 의 따옴표 벗겨짐)
수정 — ASCII 전용 재작성 + 인자를 '"sleep infinity"' 로 따옴표 보존. keepalive 정상(result=0). 교훈: .ps1 은 영문 전용 + 전달 전 ParseFile/dry-run.

2-2. STT 답변이 "자기 멋대로" 저장됨 가장 오래 헤맴

증상면접 답변 전사가 첫 답변 빼고 엉뚱하게 저장. AWS 에선 멀쩡 오진STT 엔진(CPU whisper) 문제로 의심 → GPU 시도(이미지에 CUDA 없어 실패), OpenAI 키 필요한지 검토 진짜 원인엔진이 아니라 컨테이너 재기동 타이밍. STT 설정을 바꾸며 PC2 lie-detection 을 면접 진행 중에 4번 재기동. 답변 음성은 파일이 아니라 컨테이너 메모리에만 있어(PROTOCOL.md) 재기동 시 그때까지 발화가 사라지고, 재접속 뒤 조각만 전사 → "첫 답변만 멀쩡"
검증 — 한국어 TTS 답변 4종을 실제 프로토콜로 흘려 넣는 재현 클라이언트 작성. PC2 직결·터널경유 12/12 정확 전사(답변당 7.5초). 즉 온프레 STT 엔진 자체는 정상(엔진 문제 아님).
수정 — 면접 중 lie-detection 재기동 금지 규칙화 · 내가 넣은 STT_TIMEOUT_SEC=60 제거(기본 180 복원)

2-3. 서류 요약 점수가 전원 64~65점으로 수렴 변별력 상실

증상온프레미스 요약 재생성 시 모든 지원자 64~65점. AWS(Haiku)에선 정상 원인chain_evaluate.v2 프롬프트의 출력 예시 숫자 70/40/60 을 소형 모델(qwen3)이 그대로 베낌. Claude 는 안 베껴서 AWS 에선 안 드러남
수정 — chain_evaluate.v3: 예시 숫자 제거, 채점 구간표+절차 명시, 요건 비면 공고 제목 사용. 실측: 문해린 85·한지우 85·오하람 40·한도윤(디자이너) 15 ↔ Haiku 78·86·44 와 같은 방향 (커밋 6daaf32). ※ v9 채팅 어댑터는 요약에 부적합(<tool_call> 냄) → 전용 arda-summary 유지

2-4. 요약 JSON 파싱 실패로 점수 NULL

증상56명 재생성 중 2명 서류점수 NULL(step2 파싱 실패) 원인소형 모델이 문자열 안에 이스케이프 안 된 따옴표를 써서 JSON 깨짐. Ollama format 스키마도 못 막음
수정 — 파서에 문자열 내부 따옴표 복구 폴백(_repair_inner_quotes) 추가. 정상 JSON 은 그대로 (커밋 615357d). 이후 56/56 파싱 성공

2-5. 이력서 미리보기: 브라우저가 MinIO 에 못 닿음

증상이력서 클릭 시 안 열림 원인presign 다운로드 URL 이 minio:9000(컨테이너 내부 호스트) → 브라우저에서 이름이 안 풀림
수정 — 파일 본문을 Postgres file_blobs 에 넣고 1회용 티켓 API URL 로 스트리밍(inline 미리보기). PUBLIC_API_BASE_URL 로 절대 URL 스킴 고정(mixed-content 해결)

2-6. 이력서 업로드: 브라우저가 MinIO 에 못 올림 폐쇄 직전 발견

증상아르 채팅 이력서 드롭 / 공개 지원폼에서 "올리지 못했습니다" 원인업로드도 presign 으로 브라우저가 minio:9000 에 직접 PUT → 온프레에선 못 닿음. 공개 지원폼도 같은 코드라 온프레에선 아무도 브라우저로 이력서 못 올림
수정 — 업로드도 api 경유(커밋 0413840). presign-upload 가 온프레면 api PUT URL(/files/blob-put, 1회용 티켓)을 주고 서버가 MinIO 에 저장. 다운로드도 blob 없으면 MinIO 서버측 스트리밍. AWS(실 S3)는 기존 그대로. 터널 실측: PUT 200, MinIO 저장·티켓 1회용 확인

2-7. STT/ViT GPU 이전 부하 대비 · 옵션 완료

동기"여러 명 동시 접속 시 터지나" — 8명 동시 부하테스트: 서버는 안 죽지만 STT 대기줄 15→42초 증가(CPU, Semaphore(1) 직렬화). 터짐이 아니라 느려짐 결과lie-detection GPU 변형 이미지(python:3.13-slim + torch cu124 + LD_LIBRARY_PATH) 빌드 + compose GPU 할당. 실측: 전사 7.5초→~1초, 8명 동시에도 대기줄 0, 정확도 동일. (커밋 안 함 — PC2 로컬 파일, 롤백 즉시)

2-8. 아르 채팅 이력서 접수(create_application) 폐쇄의 결정타

증상업로드는 성공했으나 접수에서 반복 실패 — "공고를 찾을 수 없습니다"(없는 posting_id) · "서버에 연결하지 못했습니다" 원인로컬 sLLM(qwen3 v9)이 다단계 도구 흐름을 못 지킴. list_postings 로 실제 공고 id 를 확인하지 않고 create_application 을 한 번에 호출하며 posting_id 추측(rounds=1). 안내를 줘도 추측 반복 판단프롬프트/데이터로 매번 땜질해야 하는 로컬 모델 한계. AWS 는 Claude 라 도구 체인을 안정 수행 → 이 부류 오류 없음 → 온프레 폐쇄 결정

3.폐쇄 사유 (정리)

  1. 로컬 sLLM 도구호출 불안정 — create_application 이 list_postings 건너뛰고 posting_id 추측. 채팅 접수·복잡 도구 흐름을 심사에서 신뢰 불가 (2-8)
  2. 브라우저↔내부 MinIO 불가 — 업로드/다운로드를 api 프록시로 우회(고쳤지만 온프레 고유 복잡도). AWS 는 실 S3 라 애초에 문제 없음 (2-5, 2-6)
  3. 온프레 고유 실패가 프리즈(09-20) 직전 누적 — 예시숫자 베끼기·JSON 따옴표·재기동 타이밍 등 전부 "AWS 에선 안 나던" 것들. 심사 안정성 최우선
  4. 결론 — 심사는 검증된 AWS 스택(Claude + 실 S3 + 관리형 인프라)에서 진행. 온프레는 발표 자료·학습 성과로 보존

4.AWS 전환 시 반영할 것 반영 완료

09-18 당시 계획. 09-28 확인: 동결 직전에 Seuk-Team/Arda 에 전부 머지·배포됐다 — 데모 로그인 #333(담당자·지원자 버튼, ?demo= 자동로그인), 시연계정 잠금 #335·#343, 데모 지원자 로그인마다 초기화 #338·#342. 상세는 §7.

4-1. 심사자용 데모 로그인

4-2. AWS 가 이미 가진 것 (확인)

5.보존 자산 (바탕화면 · PC1)

6.온프레미스에서 실제로 검증된 것 (성과)

프리즈 배포 자체는 동작했다 — 폐쇄는 "안 됨"이 아니라 "심사 안정성 대비 유지비용" 판단이다.

7.09-18 이후 경과 — 최종 결과 (2026-09-28 기준)

7-1. 심사 환경 (클라우드 단독)

항목내용
심사 URLhttps://seuk.suvisdev.cloud · API https://api.seuk.suvisdev.cloud
LLMClaude (anthropic 백엔드). 자체 학습 Qwen 어댑터는 시연 경로에서 빠짐 — 연구·비교 자료로만 남음
STT업로드 답변·재전사·아르 음성 = whisper-1 API · 실시간 면접 전사 = CPU 로컬 faster-whisper (09-17 운영 실측 STT_BACKEND 빈 값 — ADR-0038 「같은 변수, 두 해석」. 09-18 이후 값은 미확인)
서버AWS t3.large (ap-northeast-2c, EBS 50GB) ≈ $2.8/일
컨테이너5개 — api · db(postgres/pgvector) · caddy · n8n · lie-detection
배포main merge → 2분 후 자동 반영 (systemd timer). 동결 이후 배포 없음

7-2. 코드 동결

7-3. 09-28 상태 점검

7-4. 심사 기간 실사용 (09-18 저녁 ~ 09-28, 개인정보 빼고 요약)

7-5. 심사위원 데모 계정 (비밀번호는 문서에 남기지 않음)

7-6. 다음 단계 (확정, 미실행)