본문 바로가기
/ 학습 / 안내서 / 보안·윤리
L3 심화 · 7분 읽기

온프레미스 LLM, 망분리 환경에서 안전하게 운영하기

안전·윤리팀 2026.07.03 갱신 폐쇄망·민감 데이터 환경에서 LLM 도입을 검토하는 담당자·연구자
#온프레미스#로컬LLM#망분리#Ollama

지금까지의 안내서는 "외부 LLM에 넣기 전에 비식별하라"를 전제했습니다. 하지만 어떤 데이터는 비식별을 해도 밖으로 내보내면 안 되고, 어떤 조직은 애초에 내부망이 인터넷과 분리돼 있어 클라우드 API를 부를 수조차 없습니다. 이럴 때 답은 데이터를 가공해 내보내는 게 아니라, 모델을 데이터가 있는 곳으로 가져오는 것입니다 — 온프레미스 LLM입니다.

이 안내서를 끝내면 온프레미스가 맞는 상황을 판단하고, 용도에 맞는 모델을 고르고, OpenAI 호환 API로 기존 코드를 거의 그대로 재사용하고, 약한 로컬 모델의 품질을 골든셋으로 검증하고, 폐쇄망에 안전하게 반입할 수 있습니다.

온프레미스가 맞는가 — 먼저 판단

온프레미스는 공짜가 아닙니다. 하드웨어·운영 부담을 지는 대신 데이터 통제를 얻는 거래입니다.

상황권장이유
인터넷 분리 내부망온프레미스만 가능클라우드 호출 자체가 불가
비식별해도 못 내보내는 데이터온프레미스데이터가 조직 밖으로 안 나감
공개 자료·비민감 업무클라우드더 강한 모델을 손쉽게
대량·고난도 추론 필요클라우드 또는 하이브리드로컬 모델은 최상위 성능에 못 미침
📌 핵심
하이브리드도 선택지입니다. 민감 데이터가 닿는 단계(전사·비식별·1차 분류)는 온프레미스로, 공개 자료 기반 작업은 클라우드로 나눕니다. 판단 기준은 언제나 "이 데이터가 조직 밖으로 나가도 되는가"입니다.

1. 모델 선택 — 크기·양자화·한국어

로컬 모델은 세 축으로 고릅니다.

레포 레이더의 로컬 LLM 도구(Ollama·llama.cpp·vLLM)로 모델을 받아 띄웁니다.

BASH
# Ollama — 가장 단순한 로컬 실행. 모델을 받아 OpenAI 호환 서버로 띄운다
ollama pull qwen2.5:7b          # 한국어 지원·경량 모델 예시(용도에 맞게 선택)
ollama run  qwen2.5:7b          # 대화형 확인
# 서버는 http://localhost:11434 에서 OpenAI 호환 /v1 엔드포인트를 연다

2. OpenAI 호환 API — 코드는 거의 그대로

온프레미스로 옮길 때 가장 큰 걱정이 "코드를 다 다시 짜야 하나"인데, 그렇지 않습니다. 로컬 서버 대부분이 OpenAI 호환 API를 제공하므로, 기존 코드에서 base_url만 로컬로 바꾸면 됩니다.

PYTHON
from openai import OpenAI

# 클라우드였다면: OpenAI() — 여기선 base_url만 로컬로. 데이터가 밖으로 안 나간다
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")  # 키는 형식상

resp = client.chat.completions.create(
    model="qwen2.5:7b",
    messages=[
        {"role": "system", "content": "너는 소방 민원 분류 보조다. 주어진 유형에서만 고른다."},
        {"role": "user",   "content": "화재 관련 민원인가요? ..."},
    ],
    temperature=0.1,   # 분류·검산 작업은 낮게 — 재현성 확보
)
print(resp.choices[0].message.content)

RAG·분류 파이프라인의 LLM 호출부를 이 한 줄로 바꾸면 온프레미스로 이전됩니다. 평가 도구도 마찬가지입니다 — RAG 평가의 promptfoo는 ollama:chat:모델명 또는 apiBaseUrl로 로컬 모델을 그대로 평가합니다.

3. 검증 — 로컬 모델은 클라우드보다 약하다

온프레미스의 대가는 성능입니다. 중소형 로컬 모델은 최상위 클라우드 모델보다 약하고, 특히 환각·지시 이탈·한국어 미묘함에서 차이가 납니다. 그래서 "돌아간다"와 "믿고 쓸 만하다"는 다릅니다 — 반드시 검증합니다.

앞서 만든 골든셋과 회귀 평가를 그대로 씁니다. 클라우드 모델에서 재던 같은 골든셋을 로컬 모델로 돌려 점수 차이를 정량화합니다.

YAML
# promptfooconfig.yaml — 같은 골든셋으로 클라우드 vs 로컬 나란히 비교
providers:
  - id: openai:chat:qwen2.5:7b        # 로컬(Ollama)
    config: { apiBaseUrl: http://localhost:11434/v1, apiKey: ollama }
  - openai:gpt-4o-mini                # 클라우드 기준선(연결 가능할 때만)
defaultTest:
  assert:
    - type: llm-rubric
      value: 처분·과태료를 단정하지 않고 근거를 제시한다
# tests: 22편에서 만든 골든셋 그대로

점수 차가 업무 허용 범위 안이면 온프레미스로 갑니다. 범위를 벗어나면 더 큰 모델, 프롬프트 개선, 또는 하이브리드를 검토합니다 — "로컬이니까 이 정도는 감수"는 안 됩니다. 소방 업무의 품질 기준은 인프라가 아니라 현장이 정합니다.

4. 폐쇄망 반입 — 공급망도 점검한다

인터넷 분리망은 모델·라이브러리를 온라인으로 받을 수 없어, 외부에서 받아 반입합니다. 이 경로 자체가 보안 지점입니다.

TEXT
- [ ] 모델 가중치·라이브러리를 공식 출처에서만 받았습니다(체크섬 확인).
- [ ] 반입 파일을 검역망에서 악성코드 검사 후 내부망에 들였습니다.
- [ ] 모델 라이선스가 공공·업무 사용을 허용하는지 확인했습니다.
- [ ] 오프라인 설치가 되도록 의존성을 함께 반입했습니다(온라인 설치 시도 차단).
- [ ] 반입 버전·출처·체크섬을 기록으로 남겼습니다.
💡 팁
로컬 LLM 도구·모델도 소프트웨어 공급망의 일부입니다. "로컬이라 안전"이 아니라, 반입하는 것이 무엇인지 아는 것이 안전입니다.

운영 루틴 한 장

언제무엇을통과 기준
도입 검토 시온프레미스 vs 클라우드 판단"데이터가 밖으로 나가도 되는가" 기준
모델 선정 시골든셋으로 클라우드 대비 품질 측정업무 허용 범위 안
모델·버전 교체 시골든셋 회귀이전 대비 하락 없음
반입 시공급망 체크리스트출처·체크섬·검역 전부 통과
▸ 소방 활용 포인트
인터넷과 분리된 내부망이나 가장 민감한 데이터에도 데이터를 밖으로 내보내지 않고 AI를 활용할 수 있게 하고, base_url 한 줄 교체로 기존 파이프라인을 그대로 이전합니다. 단 로컬 모델의 품질은 반드시 검증하고, 온프레미스라도 "AI는 참고, 최종 판단은 사람"이라는 원칙은 그대로입니다.

사람 검토 체크리스트

TEXT
- [ ] "이 데이터가 조직 밖으로 나가도 되는가"로 온프레미스 여부를 판단했습니다.
- [ ] 용도·한국어·라이선스·하드웨어를 함께 보고 모델을 골랐습니다.
- [ ] 로컬 모델 품질을 클라우드 기준선과 같은 골든셋으로 비교했습니다.
- [ ] 품질이 업무 기준에 못 미치면 "로컬이니까"로 타협하지 않았습니다.
- [ ] 폐쇄망 반입 시 출처·체크섬·검역·라이선스를 점검했습니다.
⚠️ 흔한 실수
온프레미스는 데이터를 지키지만 성능을 보장하지 않습니다 — 약한 모델이 자신 있게 틀리는 위험은 클라우드보다 오히려 큽니다. 그리고 "내부망이라 안전"은 모델 품질과 무관합니다. 제출 전 1분 점검비식별의 원칙은 온프레미스에서도 그대로 유지하세요.