# Linux x86_64용 다운로드
curl -L https://ollama.com/download/ollama-linux-amd64 -o ollama
# 또는 GitHub Releases에서 직접# https://github.com/ollama/ollama/releases
2
Gemma 4 모델 파일 준비 (인터넷 PC에서)
Ollama 모델은 로컬 캐시 디렉토리에 저장된다. 인터넷이 되는 PC에서 먼저 pull한 뒤 그 디렉토리째로 복사하면 된다.
bash
# 인터넷 PC에서 모델 pull
ollama pull gemma4:27b
# 모델이 저장된 위치 확인
ls ~/.ollama/models/
# blobs/ manifests/# 모델 디렉토리 압축 (반입용)
tar -czvf ollama_models.tar.gz ~/.ollama/models/
💡 Tip — 모델 크기 미리 확인
gemma4:27b (Q4_K_M 기본값 기준)는 약 17GB 내외다. USB가 부족하면
gemma4:12b (~8GB)나
gemma4:2b (~2GB)를 선택하자.
정확한 용량은 ollama show gemma4:27b --verbose로 확인 가능하다.
3
Python 패키지 wheel 준비 (인터넷 PC에서)
bash
# 필요한 패키지를 wheel 파일로 다운로드 (설치하지 않음)
pip download \
langchain \
langchain-ollama \
pandas \
openpyxl \
-d ./wheels/
# wheels/ 디렉토리를 반입용으로 압축
tar -czvf python_wheels.tar.gz ./wheels/
4
폐쇄망 서버에 설치
bash — 폐쇄망 서버
# 1. Ollama 바이너리 설치
chmod +x ollama
sudo mv ollama /usr/local/bin/ollama
# 2. 모델 파일 복원
tar -xzvf ollama_models.tar.gz -C ~/
# ~/.ollama/models/ 에 풀림# 3. Ollama 서버 시작 (백그라운드)
OLLAMA_HOST=0.0.0.0:11434 ollama serve &
# 모델이 인식되는지 확인
ollama list
# NAME ID SIZE MODIFIED
# gemma4:27b ... 17GB ...# 4. Python 패키지 오프라인 설치
tar -xzvf python_wheels.tar.gz
pip install --no-index --find-links=./wheels/ \
langchain langchain-ollama pandas openpyxl
🚨 주의사항 — Ollama 서비스 등록
장기 운영 환경이라면 systemd 서비스로 등록해두자.
서버 재부팅 후 Ollama가 자동으로 뜨지 않으면 Agent가 동작하지 않는다.
# Ollama API 헬스체크
curl http://localhost:11434/api/tags
# 간단한 추론 테스트
curl http://localhost:11434/api/generate \
-d '{"model":"gemma4:27b","prompt":"안녕하세요","stream":false}'
✓ 정상 응답
{
"model": "gemma4:27b",
"response": "안녕하세요! 무엇을 도와드릴까요?",
"done": true
}
05
Gemma 4 연동 방법
Python에서 Ollama 연결
Ollama는 OpenAI 호환 REST API를 제공하므로 langchain-ollama 또는 직접 requests로 연결할 수 있다.
python — langchain-ollama 사용 (권장)
fromlangchain_ollamaimport OllamaLLM
llm = OllamaLLM(
model="gemma4:27b",
base_url="http://localhost:11434", # 폐쇄망 내부 IP도 가능
temperature=0.1, # 문서 처리는 낮게
)
response = llm.invoke("다음 데이터에서 결측값이 있는 행을 찾아줘: ...")
print(response)
OpenAI 호환 방식 (기존 코드 재사용 시)
이미 OpenAI API를 쓰던 코드가 있다면 베이스 URL만 바꾸면 된다.
python — OpenAI 호환 방식
fromopenaiimport OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama", # 아무 값이나 OK (Ollama는 키 검증 안 함)
)
response = client.chat.completions.create(
model="gemma4:27b",
messages=[{"role": "user", "content": "엑셀 데이터를 분석해줘"}],
)
print(response.choices[0].message.content)
💡 Tip — 모델 파라미터 튜닝
문서 처리 작업은 창의성보다 정확성이 중요하다. temperature=0.0~0.1로 설정하면 LLM이 일관된 출력을 낸다.
num_ctx(컨텍스트 길이)는 기본 2048인데, 큰 엑셀 데이터를 처리하려면 8192 이상으로 올려주는 게 좋다.
=== 데이터 품질 분석 리포트 ===
[요약]
총 4건의 데이터 중 1건의 날짜 형식 오류, 1건의 결측값, 1건의 중복 행이 발견되었습니다.
데이터 정제 후 실제 유효 레코드는 3건으로 추정됩니다.
[형식 오류]
- 행 2, 컬럼 '입사일자': 2022-07월 → 날짜 형식 오류 (YYYY-MM 또는 YYYY-MM-DD 필요)
[결측값]
- 행 3, 컬럼 '입사일자'
[중복 행]
- 중복 행 인덱스: [1, 4]
08
장점 / 단점
폐쇄망 환경에서의 장점
항목
내용
보안
데이터가 외부로 한 바이트도 나가지 않음. 기밀 문서 처리에 적합
비용
API 과금 없음. 서버 전력비만 발생
가용성
외부 서비스 장애와 무관하게 24/7 운영 가능
커스터마이징
모델 fine-tuning, 시스템 프롬프트 완전 제어 가능
규정 준수
개인정보보호법, 망 분리 의무 등 내부 규정 충족
한계 및 주의사항
항목
내용
성능
GPT-4o, Claude 3.7 대비 추론 품질 낮음 (특히 복잡한 논리 처리)
속도
GPU 없을 경우 응답에 1~5분 소요 가능
한국어
27B 이하 모델은 한국어 명령 이해가 불안정할 수 있음
컨텍스트 한계
수천 행의 엑셀을 한 번에 처리하기 어려움. 청크 분할 필요
유지보수
모델 업데이트 시 반입 절차 재수행 필요
💡 Tip — 대용량 엑셀 처리 전략
엑셀이 수만 행이라면 LLM에 전체를 한 번에 넣는 건 불가능하다. pandas로 500~1000행씩 청크로 나눠서 처리하고 결과를 합산하는 방식을 쓰자.
chunk_size = 500
results = []
for i in range(0, len(df), chunk_size):
chunk = df.iloc[i:i+chunk_size]
result = agent.analyze_quality(chunk)
results.append(result)
# 결과 병합 로직 추가...
09
결론
어떤 조직에 적합한가?
🏦
금융 / 보험사
고객 데이터, 계약 문서를 외부 AI로 보낼 수 없는 규정이 있는 곳
🏛️
공공기관 / 정부
망 분리 의무화 환경에서 업무 자동화가 필요한 팀
🏭
제조업 MES 환경
공장 내부망에서 생산 데이터 분석 자동화
🛡️
방산 / 군 관련 SI
보안 등급 문서를 다루는 개발 환경
앞으로의 확장 가능성
현재 상태
엑셀 파일 처리 (데이터 품질 검사, 컬럼 정리)
1단계 확장
PDF, Word, 사내 DB 연동 (LangChain Tool 추가)
2단계 확장
RAG (내부 문서 벡터 DB 구축) → 사내 문서 기반 Q&A
3단계 확장
멀티 Agent (기획서 작성 / 검토 / 승인 Agent 분리)
4단계 확장
사내 포털 연동 (Confluence, 그룹웨어 API)
마치며
로컬 LLM의 성능은 빠르게 올라오고 있다. 지금 당장 GPT-4 수준은 아니지만,
단순 반복 작업, 데이터 품질 검사, 문서 요약 정도는 이미 실무에서 충분히 쓸 수 있는 수준이다.
한 번 구축해두면 API 비용 걱정 없이, 망 분리 위반 걱정 없이, 팀 전체가 쓸 수 있는 내부 AI 인프라가 된다.
이 글에 담긴 내용은 실제로 폐쇄망 환경에서 Ollama를 설치하고 엑셀 자동화 파이프라인을 구축하면서 겪은 과정을 정리한 것이다.
막히는 부분이 있으면 댓글로 남겨주시면 같이 해결해보겠다.