완성 모습과 준비물
버튼을 누르면 가상 도서관 6개 기록을 읽고, 해솔시 3곳·200석을 한 개 결과로 만드는 자동화입니다. 외부 메일 전송과 예약 실행을 넣기 전에 입력 → 처리 → 결과가 맞는지 확인합니다.
실습 키트의 n8n-library-summary.json을 사용합니다. 워크플로 파일만 다운로드할 수도 있습니다. 준비물은 접속 가능한 본인의 n8n 작업 공간입니다. n8n Cloud 또는 기관에서 운영하는 환경을 사용할 수 있으며, 요금·권한은 해당 환경에서 확인합니다.
워크플로 JSON 구조와 내부 집계 코드를 점검한 예제입니다. 학습자의 n8n 화면에서 가져오기·실행하는 과정은 직접 확인해야 합니다. 이 교재에서 n8n 계정 생성이나 실제 예약 작업을 대신 실행하지는 않습니다.
1단계 · 흐름을 읽기
| 노드 | 역할 | 예상 출력 |
|---|---|---|
| 직접 실행 | 사람이 테스트 시작 | 다음 노드 실행 |
| 연습 데이터 | 가상 도서관 자료 생성 | 6 items |
| 해솔시 집계 | 지역 필터와 좌석 합계 | 1 item: count 3, seats 200 |
노드는 작업 한 개, 연결선은 다음 작업으로 넘기는 순서입니다. n8n에서 item은 하나의 데이터 묶음입니다. 마지막 출력이 1 item이어도 도서관이 한 곳이라는 뜻은 아닙니다. 결과 객체의 count가 도서관 수입니다.
이 예제는 모두 결정된 규칙으로 계산하며 AI 모델을 호출하지 않습니다. 숫자를 더하는 일은 코드로 처리하고, 필요하면 확인된 결과의 문장화에 AI를 추가하는 편이 검증하기 쉽습니다.
2단계 · 워크플로 가져오기
- n8n에서 새 워크플로를 엽니다.
- 워크플로 메뉴의 Import from File을 선택합니다. 버전에 따라 메뉴 위치와 표시 언어가 다를 수 있습니다.
n8n-library-summary.json을 선택합니다.- 세 노드가 왼쪽에서 오른쪽으로 연결됐는지 확인합니다.
- “나의 도서관 집계 연습”처럼 이름을 바꾸고 저장합니다.
이 파일에는 인증정보·Webhook·메일 발송 노드가 없습니다. 가져오기 후 자동으로 예약 실행되는 구성도 아닙니다. 알 수 없는 노드 오류가 나면 n8n의 Code 노드를 지원하는 버전인지 확인하세요.
3단계 · 처음 실행하고 숫자 확인하기
Execute Workflow 또는 화면의 실행 버튼을 누릅니다. 실행이 끝나면 “연습 데이터” 노드를 선택하고 Output의 Table 또는 JSON 탭을 봅니다. 6개 항목에 name·city·seats·date가 있어야 합니다.
“해솔시 집계” 노드의 출력은 다음 핵심 값을 가집니다.
{
"sample": true,
"city": "해솔시",
"count": 3,
"seats": 200,
"summary": "교육용 가상 데이터 · 검토 후 보고서에 반영"
}
성공 확인: count 3, seats 200입니다. 노드에 초록 표시가 뜨는 것만으로 숫자가 맞다는 뜻은 아니므로 원본 CSV와 대조합니다. 같은 흐름을 다시 실행해도 같은 결과가 나오는지 확인하세요.
4단계 · 집계 코드를 한 줄씩 읽기
“해솔시 집계” Code 노드는 JavaScript의 Run Once for All Items 모드입니다. 모든 입력을 한 번에 받아 합계를 계산합니다.
const rows = $input.all()
.map(item => item.json)
.filter(row => row.city === '해솔시');
return [{ json: {
sample: true,
city: '해솔시',
count: rows.length,
seats: rows.reduce((sum, row) =>
sum + (Number.isFinite(row.seats) ? row.seats : 0), 0)
} }];
$input.all()은 입력 전체, map은 각 항목의 내용 추출, filter는 지역 선택, reduce는 합산입니다. 문자열 "120"은 숫자 120과 다르므로 이 예제에서는 숫자인 좌석만 합산합니다. 실제 자료를 연결할 때는 앞 단계에서 형식을 검증해야 합니다.
사본 워크플로에서 필터와 출력 city의 해솔시를 모두 들꽃군으로 바꾸고 실행하세요. 결과는 2곳·110석입니다. 필터만 바꾸고 표기 지역을 그대로 두면 내용과 제목이 어긋납니다.
5단계 · 실제 조회를 붙이는 설계
다음 단계는 “연습 데이터”를 HTTP Request 노드로 바꾸는 것입니다. 곧바로 운영 API를 붙이기 전에 아래 공개 가상 JSON으로 응답 구조를 연습할 수 있습니다.
https://aiedu.gdiaxhub.com/tech-demo/data/libraries.json
새 워크플로 사본에서 직접 실행 → HTTP Request → Code로 연결합니다. HTTP Request는 GET, URL은 위 주소, 응답 형식은 JSON으로 설정합니다. 출력이 하나의 객체이고 그 안의 items가 도서관 배열인지 먼저 확인하세요. 노드 설정에 따라 응답 본문이 감싸져 나오면 실제 출력 구조에 맞춰야 합니다.
응답 본문이 그대로 출력되는 설정이라면 Code 앞부분은 다음과 같이 바뀝니다.
const body = $input.first().json;
if (!Array.isArray(body.items)) {
throw new Error('items 배열이 없습니다. HTTP 응답을 확인하세요.');
}
const rows = body.items.filter(row => row.city === '해솔시');
return [{ json: {
sample: body.sample,
city: '해솔시',
count: rows.length,
seats: rows.reduce((sum, row) =>
sum + (Number.isFinite(row.seats) ? row.seats : 0), 0)
} }];
n8n Cloud에서 127.0.0.1:8765를 호출하면 학습자의 PC로 연결되지 않습니다. 외부에서 접속 가능한 주소가 필요합니다. 실제 공공 API 연결 시에는 인증정보를 Credentials로 관리하고, 조회 한도·페이지 수·오류 응답을 검사하는 단계를 추가합니다.
6단계 · 예약과 발송은 검증 뒤에 붙이기
수동 실행을 통과한 사본에서 Schedule Trigger를 추가합니다. 워크플로의 시간대를 Asia/Seoul로 확인하고, 처음에는 하루 한 번처럼 실행 빈도를 낮게 잡습니다. 예약 실행은 버전에 맞는 게시·활성화 절차를 완료해야 동작합니다. 저장만으로 실행된다고 가정하지 마세요.
예약 전에 결정할 항목은 다음과 같습니다.
- 실패하면 어디에서 확인할 것인가? 실행 이력과 Error Workflow를 연결할 담당자를 정합니다.
- 같은 날짜에 두 번 돌면 어떻게 할 것인가? 날짜·자료 버전 같은 식별자로 중복 결과를 구별합니다.
- 자료가 비어 있으면 0으로 보고할 것인가? 수집 실패와 정상 0건을 구분하고 실패 시 보고를 멈춥니다.
- 누구에게 전송할 것인가? 처음에는 결과 생성까지만 확인하고 검토한 뒤 발송을 붙입니다.
이 키트는 스케줄러·중복 방지 저장소·메일 발송을 구현한 운영 시스템이 아닙니다. 이 항목들을 직접 추가하고 검증한 뒤 반복 실행으로 전환하세요.
오류 해결과 되돌리기
| 증상 | 확인 |
|---|---|
| 가져오기 오류 | ZIP 전체가 아니라 .json 파일을 선택했는지, 파일이 잘리지 않았는지 |
| 1 item만 보임 | 요약 결과 하나인지 확인. 내부 count 값을 봄 |
| 0곳으로 집계 | 지역명 철자와 입력 데이터의 city 값 비교 |
| 좌석 합계 0 | seats 값이 숫자인지 문자열인지 확인 |
| 이전 실행 값이 계속 보임 | 고정 데이터(pin data) 여부와 새 실행 결과 확인 |
| HTTP 오류 | URL·응답 상태·JSON 구조·인증정보 확인 |
처음으로 돌아가려면 원본 JSON을 새 워크플로로 다시 가져옵니다. 직접 추가한 예약 작업이 있다면 기존 워크플로의 예약 활성화를 먼저 해제합니다. 복사본을 만들어도 기존 예약이 자동으로 꺼지지 않습니다.
완료 기준과 더 배우기
공식 문서
공식 문서 확인일: 2026-09-20. n8n 계정 화면에서의 가져오기와 예약 실행은 사용 환경에서 별도 확인합니다.