LLM 엔지니어링11장 · 폐쇄망 문서 파이프라인과 폐쇄형 RAG3 / 23← 이전목차다음 →MetaContents

11장. 폐쇄망 문서 파이프라인과 폐쇄형 RAG

폐쇄망이란

섬에 사는 사람은 필요한 것이 생겨도 바로 사러 나갈 수 없습니다. 배가 들어올 때 미리 주문한 것만 받습니다. 대신 섬 밖의 사람이 함부로 들어오지도 못합니다. 은행, 공공기관, 병원, 공장처럼 다루는 정보가 민감한 곳은 업무망을 인터넷과 끊어 둡니다. 이것이 폐쇄망입니다.

필요할 때 바로 받는 인터넷망과, 바깥과 끊겨 미리 들여온 것만 쓰는 폐쇄망을 견준 두 카드

왼쪽 인터넷망에서는 pip install, 모델 내려받기, 외부 API 호출이 필요할 때 바로 됩니다. 오른쪽 폐쇄망에서는 바깥과 끊겨 있어 미리 들여온 것만 씁니다. 여기서 섬이 폐쇄망, 배로 실어 온 물건이 반입한 패키지와 모델입니다. 다만 섬과 달리 폐쇄망은 일부러 끊은 것이라, 들여오는 길에도 검사와 승인이 따릅니다.

인터넷망과 무엇이 다른가

하던 일인터넷망폐쇄망
패키지 설치pip install 이름미리 받아 온 휠 폴더에서 설치
모델 불러오기처음 부를 때 허브에서 내려받는다들여온 모델 폴더(캐시)에서만 읽는다
LLM 부르기외부 API 도 쓸 수 있다사내 서버의 로컬 모델(Ollama 등)만
문서웹에서 찾아 붙일 수 있다사내 파일 서버와 게시판의 문서
고장 났을 때검색해서 바로 고친다오류 문구와 설명서를 미리 챙겨 둔다

오프라인 설정 확인하기

라이브러리들이 인터넷을 찾지 않게 하는 설정은 대부분 환경 변수입니다. 지금 켜져 있는지 봅니다.

Python
import os

# 폐쇄망에서 켜 두는 환경 변수들. 없으면 "(없음)" 으로 보인다
for name in ["HF_HUB_OFFLINE", "TRANSFORMERS_OFFLINE", "ANONYMIZED_TELEMETRY", "PIP_NO_INDEX"]:
    print(name, "=", os.environ.get(name, "(없음)"))

HF_HUB_OFFLINE=1 은 Hugging Face 라이브러리가 허브에 묻지 않고 캐시만 쓰게 합니다. ANONYMIZED_TELEMETRY=False 는 Chroma 가 사용 통계를 보내지 않게 합니다. PIP_NO_INDEX=1 은 pip 가 인터넷의 패키지 저장소를 찾지 않게 합니다.

코드에 나오는 함수

코드쉬운 뜻
osoperating system(운영체제)의 줄임이다. 운영체제의 기능을 쓰는 표준 라이브러리다
os.environenvironment(환경)의 줄임이다. 환경 변수를 사전처럼 담고 있다
os.environ.get(name, "(없음)")그 이름의 환경 변수 값을 꺼낸다. 없으면 오류 대신 둘째 값 "(없음)" 을 준다
HF_HUB_OFFLINEHF 는 Hugging Face 의 머리글자다. 허브(hub)에 접속하지 말라는 설정이다
TRANSFORMERS_OFFLINEtransformers 라이브러리에게 오프라인으로 돌라는 설정이다
PIP_NO_INDEXpip 에게 패키지 목록(index)을 찾지 말라는 설정이다

이 코드가 뜻하는 것

냉장고 문에 붙여 둔 가족 메모로 읽어 봅니다. "오늘은 배달 시키지 말 것" 같은 메모가 붙어 있으면, 집에 들어온 사람은 누구나 그 메모를 보고 따릅니다. 메모가 없으면 평소대로 합니다. 여기서 냉장고 문이 운영체제의 환경, 메모가 환경 변수, 집에 들어온 사람이 파이썬 프로그램과 라이브러리입니다.

줄하는 일쉽게 말하면
for name in [...]폐쇄망에서 켜 둘 설정 이름 넷을 차례로 본다확인할 메모 네 장
os.environ.get(name, "(없음)")그 설정의 값을 꺼낸다냉장고 문에 그 메모가 붙어 있나
print(name, "=", ...)이름과 값을 찍는다"배달 금지 메모: 없음"

교안을 만든 PC 에서 이 블록만 따로 돌리면 넷 모두 (없음) 이었습니다. 아무것도 켜지 않은 보통의 인터넷 PC 라는 뜻입니다. 비유와 다른 점은, 환경 변수는 그 프로그램과 그 프로그램이 띄운 하위 프로그램에만 보인다는 것입니다. 파이썬 안에서 바꾼 값은 다른 창의 프로그램에 전해지지 않습니다.

작게 줄여서 눈으로 보기

파이썬 안에서 환경 변수를 켰다가 지워 봅니다. 이 프로그램 안에서만 바뀌고, 끝나면 사라집니다.

Python
import os

print("켜기 전:", os.environ.get("HF_HUB_OFFLINE", "(없음)"))
os.environ["HF_HUB_OFFLINE"] = "1"          # 이 프로그램 안에서만 켠다
print("켠 뒤:", os.environ.get("HF_HUB_OFFLINE", "(없음)"))
del os.environ["HF_HUB_OFFLINE"]            # 예시가 끝나면 지운다
print("지운 뒤:", os.environ.get("HF_HUB_OFFLINE", "(없음)"))
출력
켜기 전: (없음)
켠 뒤: 1
지운 뒤: (없음)
결과읽는 법
켜기 전: (없음)처음에는 설정이 없다
켠 뒤: 1os.environ[...] = "1" 로 값을 넣었다. 환경 변수의 값은 늘 글자라서 "1" 로 적는다
지운 뒤: (없음)del 로 지우자 다시 없는 상태가 되었다

실습 1의 guard() 도 이렇게 파이썬 안에서 설정을 켭니다. 라이브러리가 불러올 때 설정을 읽어 두는 경우가 있으므로, 켜는 줄은 import 보다 앞에 둡니다.

주의할 점

  • 폐쇄망은 회사마다 규칙이 다릅니다. 무엇을 어떤 절차로 들여올 수 있는지는 보안 담당 부서의 지침이 먼저입니다. 이 장의 방법은 일반적인 예입니다.
  • 이 장의 실습은 인터넷이 되는 PC 에서, 파이썬 안에서 바깥 연결을 막는 방식으로 폐쇄망을 흉내 냅니다. 실제 폐쇄망에서 돌려 본 것이 아닙니다.
← 이전 절11장 · 용어 짚고 가기다음 절 →11장 · 모델과 패키지 들여오기