모델별 실행 레시피

최종 업데이트

n8n과 Ollama로 로컬 AI 업무 자동화 시작하기

폴더에 PDF를 넣으면 n8n이 텍스트를 추출하고 Ollama에 요약을 요청해 결과 파일로 저장할 수 있어요.

n8n은 여러 작업 노드를 연결해 파일 처리와 모델 요청을 자동화해요. n8n 셀프호스팅 AI 스타터 킷은 Docker Compose로 n8n과 관련 서비스를 시작하는 예제 구성이에요. Apple Silicon Mac에서는 Docker 컨테이너가 GPU1를 직접 쓰지 못하므로, Ollama를 Mac 앱으로 실행하고 Docker 안의 n8n이 호스트의 Ollama에 접속하는 구성을 사용해요. 호스트의 Ollama 포트를 네트워크에 열게 되므로 접근 범위를 제한해야 해요.

실행 조건과 핵심 내용
  • n8n은 트리거, 파일 노드, 모델 노드를 연결해 반복 작업을 자동화해요.
  • Apple Silicon Mac에서는 Ollama를 macOS 앱으로 실행하고 n8n은 Docker에서 실행하는 구성이 GPU 추론을 호스트에서 처리해요.
  • 컨테이너의 Ollama 연결 주소는 http://host.docker.internal:11434/이며 Mac의 Ollama가 해당 연결을 받도록 설정해야 해요.
  • PDF 요약은 추출된 텍스트가 모델에 들어가는지와 결과 저장 경로를 작은 샘플로 확인한 뒤 예약 실행으로 바꿔요.

n8n은 파일과 모델 요청을 한 흐름으로 연결해요

n8n은 일정, 파일, 웹 요청 같은 시작 조건을 정하고 여러 처리 단계를 선으로 연결하는 자동화 도구예요. 이번 예에서는 PDF가 든 공유 폴더에서 파일을 읽고, 텍스트를 뽑아 Ollama에 한국어 요약을 요청한 뒤 결과를 파일로 저장해요. 각 단계의 입출력을 화면에서 확인해 실패한 곳을 바로 짚을 수 있어요.

캔버스의 첫 노드는 Manual Trigger로 두고, PDF 한 개가 끝까지 처리되는지 수동 실행해요. 편집기 오른쪽 위의 Execute Workflow를 눌러 노드별 입력과 출력을 확인하고, 모델이 원문에서 중요한 내용을 보존하는지 읽어요. 같은 파일의 재실행·중복 처리 기준을 정한 뒤에만 Schedule Trigger를 추가해요.

화면에 패널이 열린 노트북과 작은 데스크톱 장치, 마이크·노트·스톱워치
파일 처리, 모델 요청, 결과 저장을 각각 확인 가능한 단계로 나눠요.

Docker 스타터 킷과 Mac의 Ollama를 준비해요

Docker Desktop과 Ollama 앱을 설치해요. Ollama 모델 라이브러리에서 원하는 모델의 정확한 ollama pull ... 명령을 골라 실행한 다음 ollama list로 설치된 이름을 확인해요. n8n 공식 스타터 킷 저장소는 Mac에서 Docker가 Apple GPU를 컨테이너에 전달하지 못한다고 안내해요. 따라서 이 Mac 구성에서는 n8n과 보조 서비스를 Docker Compose로 시작하고, 모델 추론2은 Mac에서 실행되는 Ollama가 맡게 해요.

새 폴더에서 스타터 킷을 내려받아 환경 파일을 만들고, 안내된 기본 비밀번호와 암호화 키를 본인 값으로 바꿔요. Ollama가 Mac에서 실행되는 경우 환경 파일의 OLLAMA_HOST를 host.docker.internal:11434로 설정해요. shared/inbox, shared/output, shared/processed 폴더를 준비한 뒤 프로젝트를 시작하면 브라우저의 http://localhost:5678/에서 n8n을 처음 설정할 수 있어요.

n8n 스타터 킷 폴더 만들기
git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git n8n-ai-local
cd n8n-ai-local
cp .env.example .env
mkdir -p shared/inbox shared/output shared/processed
새 폴더 안에서만 실행하고 .env의 예시 비밀값을 바꿔요.
Mac에서 스타터 킷 실행
docker compose up
Apple GPU는 Docker 컨테이너에 전달되지 않으므로 Ollama는 Mac 앱으로 별도 실행해요.
로컬 Ollama를 위한 환경 변수 예
OLLAMA_HOST=host.docker.internal:11434
이 값은 `.env`에 넣어요. n8n 자격 증명의 Base URL은 `http://host.docker.internal:11434/`예요.

Ollama 앱은 기본적으로 127.0.0.1:11434에서만 연결을 받아요. Docker에서 Mac의 Ollama에 접속하려면 Mac 쪽 수신 설정도 필요해요. macOS 앱으로 실행한다면 공식 FAQ에 나온 launchctl setenv OLLAMA_HOST 0.0.0.0:11434를 설정하고 앱을 재시작해요.

이 설정은 모든 네트워크 인터페이스에서 연결을 받아요. Mac 방화벽에서 11434번 포트 접근을 신뢰할 수 있는 로컬 연결로 제한하고, 라우터 포트 전달이나 인터넷 공개는 하지 마세요. Ollama API3에는 기본 인증이 없어요.

macOS 앱에서 Ollama 연결을 받도록 설정
launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
모든 네트워크 인터페이스에서 수신하므로 방화벽으로 접근을 제한하고 외부 공개는 하지 않아요.
색 블록이 든 열린 데스크톱에서 태블릿과 화면 모양의 패널로 선이 이어지는 그림
Mac의 Ollama와 Docker의 n8n은 서로 다른 주소 공간에서 실행돼요.

PDF 요약 흐름은 수동 실행으로 한 단계씩 만들어요

첫 노드는 Manual Trigger로 만들어요. PDF를 호스트의 n8n-ai-local/shared/inbox/brief.pdf에 두고 Read/Write Files from Disk를 연결해요. Operation은 Read File(s) From Disk, File(s) Selector는 /data/shared/inbox/*.pdf, Put Output File in Field는 data예요. Compose가 호스트의 shared를 컨테이너의 /data/shared에 연결하므로 파일 선택기에는 컨테이너 경로를 넣어요.

Extract From File의 Operation은 Extract From PDF, Input Binary Field는 data예요. 추출 본문은 text 필드로 나와요. Basic LLM Chain에 Ollama Chat Model을 연결하고 자격 증명의 Base URL을 http://host.docker.internal:11434/로 설정해요. ollama list에 나온 정확한 모델 이름을 선택한 뒤 체인의 Prompt4 칸에 다음 문장을 넣어요.

체인의 Prompt에 넣을 요약 요청
문서의 핵심을 5개 항목 이내로 요약하세요. 날짜·금액·고유명사는 원문대로 유지하세요.

{{ $json.text }}

체인의 출력은 text 필드예요. Convert to File에서 Operation은 Convert to Text File, Text Input Field는 text, File Name은 {{ $('Read/Write Files from Disk').item.binary.data.fileName.replace(/\.pdf$/i, '.summary.txt') }}로 지정해요.

마지막 Read/Write Files from Disk는 Write File to Disk로 설정해요. File Path and Name은 /data/shared/output/{{ $('Read/Write Files from Disk').item.binary.data.fileName.replace(/\.pdf$/i, '.summary.txt') }}, Input Binary Field는 data예요.

첫 실행 파일은 호스트의 n8n-ai-local/shared/output/brief.summary.txt에 생겨요. 스캔 PDF에서 추출 text가 비면 OCR5 단계가 필요해요.

노드를 모두 연결했으면 편집기에서 Execute Workflow를 눌러요. 파일 읽기부터 저장까지 각 노드를 열어 입력·출력을 확인하고, 호스트의 shared/output/brief.summary.txt가 원문을 제대로 요약했는지 읽어요.

체크 표시와 문서 아이콘이 보이는 모니터 앞에 앉은 사람과 서류 더미
먼저 추출 텍스트와 요약을 확인하고 그다음 정기 실행을 켜요.

요약이 맞는지 확인한 뒤 일정 트리거를 추가해요

일정 실행을 켜기 전, 파일 읽기와 PDF 추출 사이에 Remove Duplicates를 넣어요. Operation은 Remove Items Processed in Previous Executions, Keep Items Where는 Value Is New, Value to Dedupe On에는 {{ $binary.data.fileName }}을 입력해요. Scope는 Node로 둬요. 같은 파일 이름은 다음 실행에서 걸러져 모델에 다시 보내지 않아요.

이 실습은 파일 이름을 문서 ID로 써요. 수정한 문서는 brief-v2.pdf처럼 새 이름으로 넣고, 요약이 실패한 파일도 새 이름으로 다시 넣어 재처리해요. 이전 요약은 다른 이름으로 보관하면 남겨둘 수 있어요. 서로 다른 파일은 이름이 겹치지 않게 관리하세요.

같은 파일로 두 번 실행해 두 번째에는 중복 제거 노드 다음으로 항목이 넘어가지 않는지 확인해요. 그다음 Schedule Trigger를 추가해 낮은 빈도로 설정하고 워크플로를 활성화해요. 첫 일정 실행 뒤에는 실행 기록과 출력 폴더를 확인하세요.

모델이 응답하지 않거나 파일이 비어 있으면 경로부터 나눠 봐요

Ollama 모델 노드가 연결 오류를 내면 Mac의 Ollama 앱이 실행 중인지, ollama list에 지정한 모델이 있는지 확인해요. 이어서 Credentials에는 http://host.docker.internal:11434/, .env에는 host.docker.internal:11434가 각각 들어 있는지 봐요. 모델 이름은 목록에 나온 정확한 값을 선택해요.

파일 노드가 경로를 찾지 못하면 Mac의 경로가 아니라 컨테이너 안의 /data/shared/... 경로인지 확인해요. Extract From File 결과가 비면 PDF에 선택 가능한 텍스트가 있는지 확인해요. 실행 기록에서 파일 읽기, 텍스트 추출, 모델 요청, 파일 저장 중 어느 단계가 실패했는지 찾으면 전체 흐름을 처음부터 바꾸지 않고 해당 연결만 고칠 수 있어요.

용어 각주

  1. GPU — 많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.

    본문으로 돌아가기
  2. 모델 추론 — 학습된 모델을 사용해 입력에 대한 출력을 계산하는 과정입니다. 이 사이트에서 로컬 추론은 사용자의 기기에서 모델을 실행하는 경우를 뜻합니다.

    본문으로 돌아가기
  3. API — 프로그램의 기능을 다른 코드에서 호출하기 위한 약속된 인터페이스입니다.

    본문으로 돌아가기
  4. 프롬프트 — 모델에 보내는 입력문입니다. 생성 모델에서는 만들 결과를 설명하는 문장이 되어 출력의 구성과 내용을 크게 좌우합니다.

    본문으로 돌아가기
  5. OCR — 이미지나 스캔 문서에서 글자를 인식해 텍스트로 바꾸는 처리입니다. 표 배치나 읽기 순서는 원본 이미지를 함께 봐야 판단할 수 있습니다.

    본문으로 돌아가기

자주 묻는 질문

이 글에서 가장 먼저 확인할 것은 무엇인가요?
n8n은 여러 작업 노드를 연결해 파일 처리와 모델 요청을 자동화해요. n8n 셀프호스팅 AI 스타터 킷은 Docker Compose로 n8n과 관련 서비스를 시작하는 예제 구성이에요. Apple Silicon Mac에서는 Docker 컨테이너가 GPU를 직접 쓰지 못하므로, Ollama를 Mac 앱으로 실행하고 Docker 안의 n8n이 호스트의 Ollama에 접속하는 구성을 사용해요. 호스트의 Ollama 포트를 네트워크에 열게 되므로 접근 범위를 제한해야 해요.
선택하지 않는 편이 좋은 경우는 언제인가요?
이 설정은 모든 네트워크 인터페이스에서 연결을 받아요. Mac 방화벽에서 11434번 포트 접근을 신뢰할 수 있는 로컬 연결로 제한하고, 라우터 포트 전달이나 인터넷 공개는 하지 마세요. Ollama API에는 기본 인증이 없어요.