G: 안녕하세요, n8n 워크플로우 자동화의 세계에 오신 것을 환영합니다! 🚀 n8n은 코드를 거의 사용하지 않고도 다양한 시스템을 연결하고 복잡한 워크플로우를 자동화할 수 있게 해주는 강력한 도구입니다. 그 중에서도 HTTP Node는 n8n이 외부 API와 소통하는 핵심적인 통로 역할을 합니다. 웹의 거의 모든 서비스가 API를 통해 데이터를 주고받는다는 점을 감안할 때, HTTP Node를 자유자재로 다루는 것은 n8n 마스터의 필수 관문이라고 할 수 있죠!
이 글에서는 n8n HTTP Node를 사용하여 다양한 API 인증 방식을 처리하고, 복잡한 데이터를 효과적으로 주고받는 실전 예제를 통해 여러분이 HTTP Node의 진정한 마스터가 될 수 있도록 돕겠습니다.
💡 HTTP Node의 핵심 기능 이해하기
HTTP Node는 이름 그대로 HTTP(S) 요청을 보내고 응답을 처리하는 노드입니다. 여러분이 웹 브라우저에서 특정 웹사이트에 접속하는 것처럼, HTTP Node는 프로그램적으로 특정 URL에 요청을 보내고 그 결과를 받습니다.
기본적으로 HTTP Node는 다음과 같은 설정을 가집니다:
- Method (메서드): 어떤 종류의 요청을 보낼지 결정합니다. 🌐
GET
: 데이터를 조회할 때 사용합니다. (예: 블로그 글 목록 가져오기)POST
: 새로운 데이터를 생성할 때 사용합니다. (예: 새 게시물 작성, 슬랙 메시지 전송)PUT
: 기존 데이터를 완전히 교체하거나 업데이트할 때 사용합니다. (예: 사용자 정보 전체 수정)PATCH
: 기존 데이터의 일부를 업데이트할 때 사용합니다. (예: 사용자 비밀번호만 변경)DELETE
: 데이터를 삭제할 때 사용합니다. (예: 게시물 삭제)- 그 외
HEAD
,OPTIONS
등도 있습니다.
- URL: 요청을 보낼 API 엔드포인트 주소입니다. (예:
https://api.example.com/data
) - Authentication (인증): API에 접근하기 위한 인증 방식을 설정합니다. 이 부분이 오늘 다룰 핵심입니다! 🔑
- Headers (헤더): 요청에 대한 추가 정보를 담습니다. (예:
Content-Type
,Authorization
) - Query Parameters (쿼리 파라미터): URL 뒤에
?
로 시작하여key=value
형태로 붙는 값들입니다. 주로 GET 요청 시 필터링이나 정렬에 사용됩니다. (예:?page=1&limit=10
) - Body (본문):
POST
,PUT
,PATCH
요청 시 서버로 보낼 실제 데이터를 담습니다. 주로 JSON, Form Data 등의 형식으로 보냅니다.
🛡️ 다양한 API 인증 방식 마스터하기
대부분의 유용한 API는 아무나 접근할 수 없도록 보안 장치를 마련해 둡니다. n8n HTTP Node는 이러한 다양한 인증 방식을 손쉽게 설정할 수 있도록 지원합니다.
1. 인증 없음 (None)
- 설명: 가장 간단한 방식입니다. 특별한 인증 정보 없이도 누구나 접근할 수 있는 공개 API에 사용됩니다. 주로 매우 간단한 정보 제공이나 테스트 API에서 볼 수 있습니다.
- n8n 설정: ‘Authentication’ 드롭다운에서 ‘None’을 선택하면 됩니다.
- 예시: 특정 국가의 공휴일 정보를 제공하는 공개 API (물론 실제로는 거의 모든 API가 Rate Limiting 등을 가집니다.)
URL: https://date.nager.at/api/v3/PublicHolidays/2023/US Method: GET Authentication: None
🤷♀️ 이보다 쉬울 순 없죠!
2. 기본 인증 (Basic Auth)
- 설명: 사용자 이름(Username)과 비밀번호(Password)를 Base64로 인코딩하여 요청 헤더에
Authorization: Basic [인코딩된 문자열]
형태로 보내는 방식입니다. 비교적 간단하지만, 보안에 취약할 수 있어 민감한 정보에는 잘 사용되지 않습니다. - n8n 설정: ‘Authentication’ 드롭다운에서 ‘Basic Auth’를 선택하고, ‘Username’과 ‘Password’ 필드에 값을 입력합니다.
- 예시: 사내 개발용 API 또는 레거시 시스템 연동
URL: https://api.mycompany.com/v1/data Method: GET Authentication: Basic Auth Username: myuser Password: mypassword123
🔒 간단하지만 조심해야 할 인증 방식입니다.
3. Bearer 토큰 (OAuth 2.0 Token)
- 설명: 가장 널리 사용되는 인증 방식 중 하나입니다. 클라이언트가 먼저 인증 서버로부터 접근 토큰(Access Token)을 발급받고, 이 토큰을
Authorization: Bearer [토큰값]
형태로 요청 헤더에 담아 API 서버에 전송합니다. 토큰은 유효 기간이 있어 주기적으로 갱신해야 하는 경우가 많습니다. - n8n 설정: ‘Authentication’ 드롭다운에서 ‘Header Auth’를 선택하고, ‘Name’에
Authorization
, ‘Value’에Bearer [여기에 발급받은 토큰]
형식으로 입력합니다. n8n의 여러 서비스 노드(Slack, Google Drive 등)는 이 과정을 내부적으로 처리해주지만, HTTP Node에서는 직접 설정해야 합니다. - 예시: Slack API (Webhook이 아닌 경우), Notion API, 대부분의 최신 웹 서비스 API
URL: https://api.notion.com/v1/databases/[database_id]/query Method: POST Authentication: Header Auth Name: Authorization Value: Bearer secret_YOUR_NOTION_INTEGRATION_TOKEN // 추가 헤더 (Notion API의 경우): Name: Notion-Version Value: 2022-06-28 Name: Content-Type Value: application/json
🔑 이 토큰은 외부로 노출되지 않도록 주의해야 합니다! 보통
Credential
노드에 저장해서 사용합니다.
4. API 키 (API Key)
- 설명: 서비스 제공자가 발급하는 고유한 문자열 키입니다. 주로 요청 헤더(
X-API-Key: [API_KEY]
)나 쿼리 파라미터(?api_key=[API_KEY]
) 형태로 전송됩니다. Bearer 토큰보다 간단하게 사용되지만, 보안 수준은 Bearer 토큰보다 낮을 수 있습니다. - n8n 설정:
- 헤더에 추가: ‘Authentication’ 드롭다운에서 ‘Header Auth’를 선택하고, ‘Name’에 API 제공자가 요구하는 헤더 이름(예:
x-api-key
,API-KEY
)을, ‘Value’에 발급받은 API 키를 입력합니다. - 쿼리 파라미터에 추가: ‘Query Parameters’ 섹션에서 ‘Name’에 API 제공자가 요구하는 파라미터 이름(예:
api_key
,appid
)을, ‘Value’에 발급받은 API 키를 입력합니다.
- 헤더에 추가: ‘Authentication’ 드롭다운에서 ‘Header Auth’를 선택하고, ‘Name’에 API 제공자가 요구하는 헤더 이름(예:
- 예시: OpenWeatherMap API
// 쿼리 파라미터 방식 URL: https://api.openweathermap.org/data/2.5/weather Method: GET Authentication: None // 또는 필요한 경우 다른 인증 방식과 함께 사용 Query Parameters: Name: q Value: Seoul Name: appid // OpenWeatherMap은 'appid'를 사용 Value: YOUR_OPENWEATHERMAP_API_KEY
// 헤더 방식 (가상의 예시) URL: https://api.example.com/v1/data Method: GET Authentication: Header Auth Name: x-api-key Value: YOUR_API_KEY_HERE
🗝️ 간편하게 사용할 수 있는 인증 방식입니다.
5. 사용자 정의 인증 (Custom / Advanced)
- 설명: 위에서 언급된 표준 방식 외에, 특정 서비스가 요구하는 독자적인 인증 방식이 있을 수 있습니다. 예를 들어, JWT(JSON Web Token)를 직접 생성해야 하거나, 특정 시그니처를 계산하여 헤더에 포함시켜야 하는 경우 등입니다. 이런 경우에는 보통 n8n의
Function
노드나Code
노드를 사용하여 필요한 인증 값을 동적으로 생성한 후, HTTP Node의 ‘Headers’ 섹션에 동적으로 삽입하는 방식을 사용합니다. - n8n 설정: ‘Function’ 또는 ‘Code’ 노드에서 필요한 인증 로직을 구현하고,
{{ $json.yourAuthToken }}
와 같은 표현식으로 HTTP Node의 헤더나 바디에 주입합니다. -
예시: AWS Signature Version 4 (매우 복잡하므로 개요만 설명)
Function
노드에서 필요한 키와 비밀 키, 요청 정보 등을 조합하여 서명(Signature)을 생성하고, 이를Authorization
헤더에 담아 전송합니다.// (Function 노드 내부) const accessKey = 'YOUR_AWS_ACCESS_KEY'; const secretKey = 'YOUR_AWS_SECRET_KEY'; // ... 복잡한 시그니처 생성 로직 ... return [{ json: { authorizationHeader: "AWS4-HMAC-SHA256 Credential=...", xAmzDate: "..." } }]; // (HTTP Node 설정) Authentication: Header Auth (or None, then manually add) Name: Authorization Value: {{ $json.authorizationHeader }} Name: x-amz-date Value: {{ $json.xAmzDate }}
⚙️ 이 방식은 고급 사용자를 위한 것이며, 때로는 전용 노드를 기다리거나 직접 개발하는 것이 효율적일 수 있습니다.
📤 데이터 처리의 예술: 요청과 응답
인증을 마스터했다면, 이제 API와 데이터를 주고받는 방법을 알아봅시다.
1. 요청 데이터 준비 (Preparing Request Data)
API 요청 시 데이터를 어떻게 구성하느냐에 따라 서버가 수행하는 작업이 달라집니다.
-
쿼리 파라미터 (Query Parameters):
GET
요청 시 필터링, 검색, 페이지네이션 등에 주로 사용됩니다.- n8n에서 ‘Query Parameters’ 섹션을 펼쳐 ‘Add Query Parameter’를 클릭하고, ‘Name’과 ‘Value’를 입력합니다.
- 예시:
https://api.example.com/products?category=electronics&limit=10
Query Parameters: Name: category Value: electronics Name: limit Value: 10
💡 동적인 값은
{{ $json.inputData.category }}
와 같이 이전 노드의 출력값을 참조할 수 있습니다.
-
헤더 (Headers):
- 요청의 메타데이터를 담습니다.
Content-Type
(보내는 데이터 형식),Accept
(받고 싶은 데이터 형식),Authorization
등이 대표적입니다. - n8n에서 ‘Headers’ 섹션을 펼쳐 ‘Add Header’를 클릭하고, ‘Name’과 ‘Value’를 입력합니다.
- 예시: JSON 데이터를 보낼 때
Headers: Name: Content-Type Value: application/json
🔗 API 문서에 따라 필요한 헤더를 추가해야 합니다.
- 요청의 메타데이터를 담습니다.
-
본문 (Body):
POST
,PUT
,PATCH
요청 시 서버로 보낼 실제 데이터(JSON, XML, Form Data 등)를 담습니다.- n8n에서 ‘Body’ 섹션의 ‘Body Content Type’을 선택합니다.
JSON
: 가장 흔히 사용됩니다. JSON 객체를 직접 입력하거나, ‘Add Field’를 사용하여 키-값을 추가합니다.{ "name": "새로운 상품", "price": 10000, "description": "최신 모델입니다." }
Form-urlencoded
: 웹 폼 데이터 전송 방식과 유사합니다. Key-Value 형태로 입력합니다.Key: username Value: user123 Key: password Value: password123
Form-data
: 파일 업로드 시 사용됩니다. ‘File’ 타입 필드를 추가하여 파일을 첨부할 수 있습니다.Raw
: 특정 형식 없이 순수 텍스트를 보낼 때 사용됩니다. XML이나 특정 문자열 데이터에 유용합니다.
- 예시: 새 사용자 등록 (JSON Body)
Method: POST Body Content Type: JSON Body: Field: name, Type: String, Value: John Doe Field: email, Type: String, Value: john.doe@example.com Field: password, Type: String, Value: securePassword123
📝 ‘Body Content Type’을
JSON
으로 선택하면 n8n이 자동으로Content-Type: application/json
헤더를 추가해줍니다.
2. 응답 데이터 처리 (Handling Response Data)
API 요청 후 서버로부터 받은 응답 데이터를 n8n 워크플로우에서 다음 작업으로 넘겨주거나 활용해야 합니다.
-
JSON 응답 파싱: 대부분의 API는 JSON 형식으로 응답합니다. n8n은 HTTP Node에서 받은 JSON 응답을 자동으로 파싱하여
{{ $json }}
객체로 접근할 수 있게 해줍니다.- 예시:
{"id": "abc123", "status": "success", "data": {"user": "Alice"}}
{{ $json.id }}
-> “abc123”{{ $json.status }}
-> “success”{{ $json.data.user }}
-> “Alice” 📥 필요한 데이터를 정확히 추출할 수 있습니다.
- 예시:
-
오류 처리 (Error Handling):
- API 요청이 실패할 경우 HTTP 상태 코드(예: 400 Bad Request, 401 Unauthorized, 404 Not Found, 500 Internal Server Error)와 함께 오류 메시지가 응답될 수 있습니다.
- n8n에서는 HTTP Node의 ‘Options’ 섹션에서 ‘Ignore HTTP Errors’를 활성화하여 HTTP 에러가 발생해도 워크플로우를 중단하지 않고 다음 노드로 넘길 수 있습니다. 이 경우, 응답 데이터에서
{{ $response.statusCode }}
나{{ $response.statusMessage }}
를 확인하여 분기 처리를 할 수 있습니다. IF
노드를 활용하여{{ $response.statusCode >= 400 }}
과 같이 조건을 설정하고 에러 발생 시 알림을 보내는 등의 작업을 자동화할 수 있습니다. 🚫 오류를 무시하지 않고 적절히 처리하는 것이 중요합니다.
-
데이터 변환 (Data Transformation):
- HTTP Node에서 받은 데이터를 다음 노드에서 사용하기 편리하도록 변환해야 할 때가 있습니다.
Set
노드: 데이터 필드의 이름을 변경하거나, 새로운 필드를 추가, 기존 필드를 삭제할 때 유용합니다.Code
노드: JavaScript 코드를 사용하여 복잡한 데이터 조작, 필터링, 정렬 등을 수행할 때 사용합니다.- 예시: 받은
email_address
필드를user_email
로 변경하고 싶을 때Set
노드 사용Set Node: Keep Only Set: false Values: Field: user_email Value: {{ $json.email_address }}
⚙️ 데이터 흐름을 최적화하여 워크플로우를 간결하게 만듭니다.
⚡ 실전 예제: n8n HTTP Node 활용하기
이제 이론을 바탕으로 실제 시나리오에서 HTTP Node를 어떻게 활용하는지 살펴봅시다!
예제 1: 날씨 정보 가져오기 (API Key + Query Parameter) 🌦️
목표: 특정 도시의 현재 날씨 정보를 OpenWeatherMap API에서 가져와서 다음 노드로 전달합니다.
- OpenWeatherMap API Key 발급: OpenWeatherMap 에 가입하고 API 키를 발급받습니다. (무료 플랜은 초당 60회 호출 제한)
- n8n 워크플로우 구성:
Start
노드HTTP Request
노드 연결- Method:
GET
- URL:
https://api.openweathermap.org/data/2.5/weather
- Authentication:
None
(API 키는 쿼리 파라미터로 보낼 것이기 때문) - Query Parameters:
- Parameter 1:
Name
:q
Value
:Seoul
(원하는 도시 이름을 입력하세요, 동적으로 하고 싶다면 이전 노드의{{ $json.cityName }}
등 사용)
- Parameter 2:
Name
:appid
Value
:YOUR_OPENWEATHERMAP_API_KEY
(발급받은 API 키를 여기에 입력)
- Parameter 3 (선택):
Name
:units
Value
:metric
(온도를 섭씨로 받으려면)
- Parameter 1:
- Execute Node 실행 후 응답 확인:
{{ $json.main.temp }}
로 현재 온도에 접근할 수 있습니다.
- Method:
예제 2: Slack 채널에 메시지 보내기 (Bearer Token + JSON Body) 💬
목표: n8n 워크플로우에서 특정 이벤트가 발생했을 때 Slack 채널로 알림 메시지를 보냅니다. (여기서는 Slack Webhook URL을 사용합니다. 일반 Slack API는 별도 OAuth 과정이 필요할 수 있습니다.)
- Slack Webhook URL 생성: Slack Webhook 가이드를 따라 메시지를 보낼 채널에 대한 Webhook URL을 생성합니다. (예:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
) - n8n 워크플로우 구성:
Start
노드HTTP Request
노드 연결- Method:
POST
- URL:
YOUR_SLACK_WEBHOOK_URL
(발급받은 Webhook URL) - Authentication:
None
(Webhook은 URL 자체에 인증 정보가 포함되어 있음) - Body Content Type:
JSON
- Body:
Field 1
:Name
:text
Value
:🚨 새로운 알림이 도착했습니다: {{ $json.someEventData }} 🚨
(이전 노드의 데이터를 활용하여 메시지 내용 구성)
Field 2 (선택):
Name
:username
Value
:n8n 알리미
Field 3 (선택):
Name
:icon_emoji
Value
::robot_face:
- Execute Node 실행 후 Slack 채널에서 메시지 확인.
- Method:
예제 3: 특정 데이터 업데이트 (Custom Header + JSON Body + Dynamic URL) 🛠️
목표: Mock API 서비스 (예: JSONPlaceholder
나 Reqres.in
)를 사용하여 특정 사용자 정보를 업데이트합니다. 여기서는 Reqres.in
을 사용하겠습니다.
- n8n 워크플로우 구성:
Start
노드 (또는 이전 노드에서 사용자 ID를 받는다고 가정)Set
노드를 추가하여 업데이트할 사용자 ID와 데이터를 준비합니다.Set
노드:Values
:Field
:userId
Value
:2
(업데이트할 사용자 ID)Field
:newName
Value
:Jane Doe
Field
:newJob
Value
:Web Developer
HTTP Request
노드 연결- Method:
PUT
- URL:
https://reqres.in/api/users/{{ $json.userId }}
(동적인 URL 구성) - Authentication:
None
(Reqres는 인증 필요 없음) - Headers:
Name
:Content-Type
Value
:application/json
- Tip: HTTP Node가 JSON Body를 선택하면 자동으로 이 헤더를 추가해 줍니다.
- Body Content Type:
JSON
- Body:
Field 1
:Name
:name
Value
:{{ $json.newName }}
Field 2
:Name
:job
Value
:{{ $json.newJob }}
- Execute Node 실행 후 응답 확인:
updatedAt
필드와 함께 업데이트된 정보가 돌아옵니다.
- Method:
🌟 결론: HTTP Node, n8n 워크플로우의 심장
n8n HTTP Node는 단순한 웹 요청 도구를 넘어, 거의 모든 웹 서비스와 여러분의 워크플로우를 연결하는 강력한 심장과 같습니다. 다양한 API 인증 방식을 이해하고, 요청 데이터를 정확히 구성하며, 응답 데이터를 효과적으로 처리하는 방법을 익힌다면, 여러분은 n8n의 무궁무진한 잠재력을 최대한 활용할 수 있을 것입니다.
오늘 배운 내용을 바탕으로 직접 여러 API들을 테스트해보세요. 날씨 API, 뉴스 API, 쇼핑몰 API, 심지어 여러분이 자주 사용하는 SaaS 서비스의 API 등, 세상의 모든 API가 여러분의 워크플로우 확장을 기다리고 있습니다! 🚀✨
궁금한 점이 있다면 언제든지 커뮤니티나 n8n 문서를 참고하여 더 깊이 탐구해보세요. 여러분의 자동화 여정을 응원합니다! 😊