HTTP Request 노드 심화 — 모든 API를 연결하는 만능 도구

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 코드를 직접 실행할 수 있다. 복잡한 데이터 변환, 커스텀 로직, 외부 라이브러리 활용까지.