HTTP Request 노드 심화 — 모든 API를 연결하는 만능 도구
n8n에 전용 노드가 없는 서비스도 HTTP Request 노드만 있으면 연결할 수 있다. REST API를 지원하는 모든 서비스가 대상이다. 이 노드 하나가 n8n의 연결 가능성을 무한대로 확장한다.
HTTP Request 노드 기본
핵심 설정
| 설정 | 설명 |
|---|---|
| Method | GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS |
| URL | 요청할 API 엔드포인트 |
| Authentication | 인증 방식 (None, API Key, OAuth2 등) |
| Send Headers | 커스텀 HTTP 헤더 추가 |
| Send Query Parameters | URL 쿼리 파라미터 추가 |
| Send Body | 요청 본문 추가 (POST/PUT 등) |
HTTP 메서드별 실전 예제
GET — 데이터 조회
가장 기본적인 API 호출이다. 데이터를 가져올 때 사용한다.
Method: GET
URL: https://jsonplaceholder.typicode.com/posts/1
응답:
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident...",
"body": "quia et suscipit..."
}
POST — 데이터 생성
새로운 데이터를 보낼 때 사용한다. Body에 JSON 데이터를 포함한다.
Method: POST
URL: https://jsonplaceholder.typicode.com/posts
Send Body: ON
Body Content Type: JSON
Body:
{
"title": "새 글 제목",
"body": "글 내용입니다",
"userId": 1
}
PUT — 데이터 전체 수정
기존 리소스를 완전히 교체할 때 사용한다.
Method: PUT
URL: https://jsonplaceholder.typicode.com/posts/1
Send Body: ON
Body: { "title": "수정된 제목", "body": "수정된 내용", "userId": 1 }
PATCH — 데이터 부분 수정
기존 리소스의 일부 필드만 수정할 때 사용한다.
Method: PATCH
URL: https://jsonplaceholder.typicode.com/posts/1
Send Body: ON
Body: { "title": "제목만 수정" }
DELETE — 데이터 삭제
Method: DELETE
URL: https://jsonplaceholder.typicode.com/posts/1
메서드 선택 가이드
| 하고 싶은 것 | 메서드 | Body |
|---|---|---|
| 데이터 조회 | GET | ❌ |
| 데이터 생성 | POST | ✅ |
| 데이터 전체 수정 | PUT | ✅ |
| 데이터 일부 수정 | PATCH | ✅ |
| 데이터 삭제 | DELETE | 보통 ❌ |
인증 방식 완벽 가이드
대부분의 API는 인증이 필요하다. n8n은 다양한 인증 방식을 지원한다.
1. API Key
가장 간단한 인증. API 키를 헤더나 쿼리에 포함한다.
Credential 생성: 1. 좌측 메뉴 → Credentials → Add Credential 2. "Header Auth" 또는 "Query Auth" 선택 3. 이름, 키 이름, 키 값 입력
헤더 방식:
Header Name: Authorization
Header Value: Bearer sk-xxxxxxxxxxxx
쿼리 방식:
Query Parameter: api_key=xxxxxxxxxxxx
2. Bearer Token
OAuth나 JWT 토큰으로 인증하는 방식. 많은 API가 이 방식을 사용한다.
Authentication: Predefined Credential Type
Credential Type: Header Auth
Name: Authorization
Value: Bearer your-token-here
3. OAuth2
Google, GitHub, Slack 등 대부분의 메이저 서비스가 사용하는 표준 인증 방식.
OAuth2 흐름:
1. 사용자가 n8n에서 "연결" 클릭
2. 서비스 로그인 페이지로 이동 (Google, GitHub 등)
3. 사용자가 권한 승인
4. n8n이 Access Token을 받아 저장
5. 이후 API 호출 시 자동으로 Token 첨부
6. Token 만료 시 자동 갱신 (Refresh Token)
n8n은 주요 서비스의 OAuth2를 Predefined Credential로 제공하므로, Client ID와 Secret만 입력하면 된다.
4. Basic Auth
아이디와 비밀번호로 인증하는 전통적 방식.
Authentication: Generic Credential Type
Generic Auth Type: Basic Auth
Username: myuser
Password: mypassword
인증 방식 결정 가이드
| API 문서에 쓰여있는 것 | n8n에서 선택할 것 |
|---|---|
| "API Key in header" | Header Auth |
| "API Key in query parameter" | Query Auth |
| "Bearer Token" | Header Auth → Authorization: Bearer xxx |
| "OAuth 2.0" | Predefined Credential 또는 Generic OAuth2 |
| "Basic Authentication" | Basic Auth |
요청 본문 (Body) 형식
POST/PUT 요청에서 Body를 보내는 형식은 여러 가지다.
JSON (가장 흔함)
Body Content Type: JSON
Body:
{
"name": "{{ $json.name }}",
"email": "{{ $json.email }}",
"tags": ["auto", "n8n"]
}
Form Data
파일 업로드나 전통적 폼 데이터 전송 시 사용.
Body Content Type: Form-Data (Multipart)
Body Parameters:
- name: "file"
value: (Binary Data)
- name: "description"
value: "업로드된 파일"
Form URL Encoded
간단한 키-값 쌍 전송.
Body Content Type: Form Urlencoded
Body Parameters:
- name: "grant_type"
value: "client_credentials"
- name: "client_id"
value: "xxx"
Raw
XML, Plain Text 등 비정형 데이터.
Body Content Type: Raw
Content Type: text/xml
Body: "<request><data>value</data></request>"
쿼리 파라미터와 헤더
Query Parameters
URL에 ?key=value&key2=value2 형태로 전달되는 파라미터. GET 요청의 필터링, 정렬, 페이지네이션에 주로 사용.
URL: https://api.example.com/users
Query Parameters:
- page: 1
- limit: 50
- sort: created_at
- order: desc
실제 요청 URL: https://api.example.com/users?page=1&limit=50&sort=created_at&order=desc
Custom Headers
API가 요구하는 특수 헤더를 추가.
Headers:
- Content-Type: application/json
- Accept: application/json
- X-Custom-Header: my-value
페이지네이션 처리
API가 한 번에 모든 데이터를 주지 않고 페이지 단위로 나눠줄 때.
n8n 기본 페이지네이션 설정
HTTP Request 노드의 Options → Pagination 설정을 활용한다.
| 페이지네이션 타입 | 설명 | 사용 예시 |
|---|---|---|
| Offset-Based | ?page=1&limit=50 | 대부분의 REST API |
| Cursor-Based | ?cursor=xxx 다음 페이지 커서 | Slack, Notion API |
| Response Contains Next URL | 응답에 다음 URL 포함 | GitHub, Stripe API |
Offset-Based 예시
Options → Pagination:
Pagination Mode: Offset
Limit Parameter: limit
Limit Value: 100
Offset Parameter: page
Max Pages: 10
이렇게 설정하면 n8n이 자동으로 ?page=0&limit=100, ?page=1&limit=100, ... 순서로 최대 10페이지까지 호출하고 모든 결과를 합쳐준다.
Next URL 방식 예시
GitHub API처럼 응답 헤더에 다음 페이지 URL이 있는 경우:
Options → Pagination:
Pagination Mode: Response Contains Next URL
Next URL Expression: {{ $response.headers.link.match(/<([^>]+)>; rel="next"/)?.[1] }}
Max Pages: 10
바이너리 데이터 (파일) 처리
파일 다운로드
HTTP Request로 파일을 다운로드받으려면:
Method: GET
URL: https://example.com/files/report.pdf
Options → Response → Response Format: File
다운로드된 파일은 바이너리 데이터로 다음 노드에 전달된다. 이후 Google Drive, Email 첨부 등으로 활용할 수 있다.
파일 업로드
Method: POST
URL: https://api.example.com/upload
Body Content Type: Form-Data (Multipart)
Body Parameters:
- Parameter Type: Binary Data
Name: file
Input Data Field Name: data (이전 노드의 binary 필드명)
에러 핸들링
API 호출이 항상 성공하는 것은 아니다. 에러 상황을 대비하자.
HTTP 상태 코드
| 코드 | 의미 | 대응 |
|---|---|---|
| 200 | 성공 | 정상 처리 |
| 201 | 생성 성공 | 정상 처리 |
| 400 | 잘못된 요청 | 요청 데이터 확인 |
| 401 | 인증 실패 | API 키/토큰 확인 |
| 403 | 권한 없음 | API 권한 설정 확인 |
| 404 | 리소스 없음 | URL 또는 ID 확인 |
| 429 | 속도 제한 초과 | 재시도 또는 딜레이 추가 |
| 500 | 서버 오류 | 잠시 후 재시도 |
에러 시 계속 실행
기본적으로 HTTP 에러가 발생하면 워크플로우가 중단된다.
에러가 발생해도 계속 진행하려면:
Options → On Error: Continue on Fail
이렇게 설정하면 에러 정보가 $json.error 필드에 담겨 다음 노드로 전달된다. IF 노드로 에러 여부를 체크하여 분기할 수 있다.
자동 재시도
일시적인 네트워크 오류나 429(속도 제한)에 대응하려면 재시도를 설정하자.
Settings 탭:
Retry on Fail: ON
Max Tries: 3
Wait Between Tries: 1000ms (1초)
Backoff: Exponential (1초 → 2초 → 4초)
실전 예제: 환율 조회 → 계산 → 저장
간단하지만 실용적인 워크플로우를 만들어보자.
[Schedule: 매일 9시] → [HTTP: 환율 API] → [Edit Fields: 원화 환산] → [Google Sheets: 기록]
HTTP Request 설정
Method: GET
URL: https://open.er-api.com/v6/latest/USD
Edit Fields 설정
USD_KRW: {{ $json.rates.KRW }}
EUR_KRW: {{ Math.round($json.rates.KRW / $json.rates.EUR) }}
JPY_KRW: {{ Math.round($json.rates.KRW / $json.rates.JPY * 100) / 100 }}
날짜: {{ $now.toFormat('yyyy-MM-dd') }}
성능 팁
타임아웃 설정
느린 API를 호출할 때 기본 타임아웃(300초)이 너무 길거나 짧을 수 있다.
Options → Timeout: 10000 (10초)
병렬 호출
여러 API를 동시에 호출하려면 분기 후 Merge:
┌─▶ [API A] ──┐
[Trigger] ──▶ [API B] ──▶ [Merge]
└─▶ [API C] ──┘
응답 형식 지정
Options → Response Format:
- JSON (기본값) — API 응답을 JSON으로 파싱
- Text — 원본 텍스트 그대로
- File — 바이너리 파일로 저장
- Autodetect — Content-Type에 따라 자동 결정
📝 정리
- [x] HTTP Request: REST API가 있는 모든 서비스를 연결하는 만능 노드
- [x] 메서드: GET(조회), POST(생성), PUT(수정), DELETE(삭제)
- [x] 인증: API Key, Bearer Token, OAuth2, Basic Auth
- [x] Body 형식: JSON, Form Data, URL Encoded, Raw
- [x] 페이지네이션: Offset, Cursor, Next URL 방식 자동 처리
- [x] 에러 대응: Continue on Fail, 재시도, Backoff 설정
다음 편 예고
8편: Code 노드 — JavaScript/Python으로 자유자재 데이터 변환
표준 노드만으로는 한계가 있다. Code 노드를 쓰면 n8n 안에서 JavaScript와 Python 코드를 직접 실행할 수 있다. 복잡한 데이터 변환, 커스텀 로직, 외부 라이브러리 활용까지.