여러분은 혹시 노션(Notion) 데이터베이스의 데이터를 수동으로 업데이트하느라 시간을 낭비하고 계신가요? 😥 매일매일 반복되는 지루한 작업에 지쳤다면, 오늘 이 글이 여러분의 구원자가 될 것입니다! n8n을 활용하면 노션 데이터베이스를 자동으로 업데이트하여 업무 효율을 극대화하고, 더욱 중요한 일에 집중할 수 있게 됩니다.
왜 n8n과 Notion의 조합인가요? 🤔
노션은 유연한 데이터베이스 기능으로 프로젝트 관리, 고객 관리, 콘텐츠 계획 등 다양한 용도로 활용됩니다. 하지만 다른 서비스(예: 이메일, CRM, 스프레드시트)에서 발생하는 데이터를 노션에 수동으로 입력하는 것은 번거롭고 오류를 유발할 수 있습니다. 이때 n8n이 등장합니다!
- n8n이란? n8n은 워크플로우 자동화를 위한 강력하고 유연한 오픈 소스 도구입니다. Zapier나 Make(구 Integromat)와 유사하지만, 자체 호스팅이 가능하여 민감한 데이터의 통제권을 유지하고 비용을 절감할 수 있다는 장점이 있습니다.
- 시너지 효과: n8n은 수백 가지 서비스와 연동될 수 있으며, 노션은 그중 하나입니다. n8n을 통해 외부 데이터를 가져오거나, 특정 조건이 충족될 때 노션 데이터베이스의 특정 아이템을 자동으로 업데이트할 수 있습니다.
이 조합의 장점은 다음과 같습니다:
- ⚡️ 시간 절약: 반복적인 수동 작업을 없애줍니다.
- 📉 오류 감소: 사람의 실수로 인한 데이터 불일치를 줄여줍니다.
- 📊 데이터 신뢰성: 항상 최신 데이터를 유지하여 의사결정에 도움을 줍니다.
- 🔒 개인정보 보호: n8n을 자체 호스팅하면 데이터가 외부 서비스로 전송되는 것을 최소화할 수 있습니다.
- 💰 비용 절감: 유료 자동화 서비스 대비 장기적으로 비용을 절감할 수 있습니다.
시작하기 전 준비물 🛠️
본격적인 자동화 워크플로우를 만들기 전에 몇 가지 준비물이 필요합니다.
-
n8n 인스턴스:
- 로컬 PC, 클라우드 서버(AWS, GCP 등), 또는 Docker 컨테이너 등 원하는 방식으로 n8n을 설치하고 실행하세요. n8n 공식 웹사이트에 자세한 설치 가이드가 있습니다.
-
노션(Notion) 계정:
- 당연히 노션 계정이 있어야겠죠? 자동 업데이트할 데이터베이스가 포함된 워크스페이스에 접근할 수 있어야 합니다.
-
노션(Notion) 통합(Integration) 설정:
- n8n이 노션 데이터베이스에 접근하고 수정할 수 있도록 API 연동을 설정해야 합니다.
- 단계별 설정:
- 새로운 통합 만들기: 노션 페이지 좌측 하단의 ‘설정 & 멤버’ > ‘내 연결’ > ‘통합 개발’로 이동합니다.
- 새로운 통합 만들기: ‘새 통합 만들기’ 버튼을 클릭합니다.
- 통합 정보 입력: 이름을 지정하고(예: “n8n 자동화”), 내부 통합으로 설정한 후 제출합니다. 중요한 것은 ‘내부 통합 비밀 토큰’ 입니다. 이 토큰을 복사해 두세요! 🔑
- 데이터베이스에 통합 초대: 이제 이 통합이 접근할 데이터베이스에 통합을 초대해야 합니다.
- 자동 업데이트할 노션 데이터베이스 페이지로 이동합니다.
- 페이지 우측 상단의
...
(점 세 개) 아이콘을 클릭하고 ‘연결 추가’를 선택합니다. - 방금 만든 통합 이름(예: “n8n 자동화”)을 검색하여 추가합니다.
- 주의: 통합이 데이터베이스에 초대되어 있어야 n8n이 해당 데이터베이스에 접근할 수 있습니다.
-
노션 데이터베이스 ID 확인:
- 자동 업데이트할 노션 데이터베이스 페이지의 URL을 확인합니다.
https://www.notion.so/{워크스페이스 이름}/{데이터베이스_ID}?v={뷰_ID}
와 같은 형식일 것입니다. 여기서{데이터베이스_ID}
부분이 필요합니다. 이 ID를 복사해 두세요.
n8n 워크플로우 생성하기: 단계별 가이드 🚀
이제 n8n 워크플로우를 만들어 봅시다. 가장 일반적인 시나리오인 ‘특정 조건에 따라 데이터베이스 아이템 업데이트’를 예시로 들어보겠습니다.
예시 1: 외부 웹훅(Webhook)으로 Notion 재고 업데이트 📈
시나리오: 온라인 쇼핑몰에서 상품이 판매될 때마다 노션에 기록된 해당 상품의 ‘재고 수’를 자동으로 줄이고, ‘마지막 업데이트’ 날짜를 갱신합니다.
준비물:
- 노션 데이터베이스: “제품 재고” 라는 데이터베이스를 만듭니다.
- 속성:
제품명
(제목),재고 수
(숫자),가격
(숫자),마지막 업데이트
(날짜) - 예시 데이터: “콜라” (재고 수: 100), “과자” (재고 수: 50) 등
- 속성:
워크플로우 구성:
-
트리거 (Webhook):
- n8n 워크플로우를 새로 만들고, 첫 번째 노드로
Webhook
을 추가합니다. Webhook URL
을 복사합니다. 이 URL로 데이터(판매 정보)가 전송될 것입니다.HTTP Method
는POST
로 설정하고,Response Mode
는On Received
로 설정합니다.- 💡 팁: Postman이나 curl 명령어를 사용하여 이 웹훅 URL로 테스트 데이터를 전송해 볼 수 있습니다.
curl -X POST -H "Content-Type: application/json" -d '{"product_name": "콜라", "sold_quantity": 1}' YOUR_WEBHOOK_URL
이 데이터는
product_name
(판매된 제품 이름)과sold_quantity
(판매된 수량)을 포함합니다.
- n8n 워크플로우를 새로 만들고, 첫 번째 노드로
-
Notion 노드 (Find Database Item):
Webhook
노드 뒤에Notion
노드를 추가합니다.- Credential (인증): 이전에 복사해 둔 ‘내부 통합 비밀 토큰’으로 새로운 Notion Credential을 생성하여 선택합니다.
- Operation (작업):
Find Database Items
를 선택합니다. - Database ID: 이전에 복사해 둔 “제품 재고” 데이터베이스의 ID를 붙여넣습니다.
- Filters (필터):
Add Filter
를 클릭합니다.Property
:제품명
Condition
:Equals
Value
:={{$json["product_name"]}}
(이전 Webhook 노드에서 받은product_name
데이터를 사용합니다.)
- 이 노드는 웹훅으로 받은
product_name
에 해당하는 제품을 노션 DB에서 찾아 그 정보를 다음 노드로 전달합니다.
-
Notion 노드 (Update Database Item):
Find Database Item
노드 뒤에 또 다른Notion
노드를 추가합니다.- Credential (인증): 동일한 Notion Credential을 선택합니다.
- Operation (작업):
Update
를 선택합니다. - Database ID: 동일한 “제품 재고” 데이터베이스 ID를 붙여넣습니다.
- Item ID:
Find Database Item
노드에서 찾은 아이템의 ID를 사용합니다.={{$node["Notion Item"].json["id"]}}
(여기서 “Notion Item”은Find Database Item
노드의 이름입니다. 이름을 변경했다면 해당 이름으로 수정하세요.)
- Properties (속성):
재고 수
:Type
:Number
Value
:={{$node["Notion Item"].json["properties"]["재고 수"].number - $json["sold_quantity"]}}
- 설명: 현재 재고에서 웹훅으로 받은
sold_quantity
를 뺀 값으로 업데이트합니다.
마지막 업데이트
:Type
:Date
Value
:={{new Date().toISOString()}}
- 설명: 현재 날짜 및 시간으로 업데이트합니다.
- 이 노드는
Find Database Item
에서 찾은 아이템의재고 수
와마지막 업데이트
속성을 자동으로 변경합니다.
워크플로우 흐름 요약:
🛒 Webhook
(판매 데이터 수신) -> 📦 Notion (Find)
(해당 제품 찾기) -> ✅ Notion (Update)
(재고 및 날짜 업데이트)
예시 2: 특정 조건 충족 시 프로젝트 상태 자동 변경 🔄
시나리오: 매일 오전 9시에 구글 스프레드시트에 있는 모든 하위 작업이 ‘완료’로 표시되면, 노션의 해당 프로젝트 상태를 ‘진행 중’에서 ‘완료’로 자동으로 변경합니다.
준비물:
- 노션 데이터베이스: “프로젝트 관리” 데이터베이스를 만듭니다.
- 속성:
프로젝트명
(제목),상태
(선택: 진행 중, 완료, 대기),담당자
(사람) - 예시 데이터: “웹사이트 리뉴얼” (상태: 진행 중)
- 속성:
- 구글 스프레드시트: “웹사이트 리뉴얼 하위 작업” 시트를 만듭니다.
- 컬럼:
Task
(텍스트),Status
(텍스트: To Do, Done),Project
(텍스트: 웹사이트 리뉴얼) - 예시 데이터: “디자인 시안 확정” (Status: Done), “개발 시작” (Status: Done), “테스트” (Status: To Do)
- 컬럼:
워크플로우 구성:
-
트리거 (Cron):
- 워크플로우를 새로 만들고, 첫 번째 노드로
Cron
을 추가합니다. Mode
:Every day
Time
:09:00
(매일 오전 9시)- 이 노드는 매일 정해진 시간에 워크플로우를 시작합니다.
- 워크플로우를 새로 만들고, 첫 번째 노드로
-
Google Sheets 노드 (Read All):
Cron
노드 뒤에Google Sheets
노드를 추가합니다.- Credential (인증): 구글 계정으로 새로운 Google Sheets Credential을 생성합니다.
- Operation (작업):
Read All
을 선택합니다. - Spreadsheet ID: 해당 구글 스프레드시트의 ID를 입력합니다.
- Sheet Name: “웹사이트 리뉴얼 하위 작업” 시트 이름을 입력합니다.
- 이 노드는 스프레드시트의 모든 행 데이터를 가져옵니다.
-
Code 노드 (조건 확인):
Google Sheets
노드 뒤에Code
노드를 추가합니다.- 이 노드는 스프레드시트에서 가져온 모든 작업의
Status
가 ‘Done’인지 확인합니다. Execute Once
함수 내부에 다음 코드를 작성합니다:let allTasksDone = true; const projectName = "웹사이트 리뉴얼"; // 확인할 프로젝트명 for (const item of $json) { if (item.Status !== "Done" && item.Project === projectName) { allTasksDone = false; break; } } return [{ json: { allTasksDone: allTasksDone, projectName: projectName } }];
- 이 노드는
allTasksDone
이라는 불리언(boolean) 값과projectName
을 다음 노드로 전달합니다.
-
IF 노드 (조건부 실행):
Code
노드 뒤에IF
노드를 추가합니다.Value 1
:={{$json["allTasksDone"]}}
Operation
:Is True
IF
노드는allTasksDone
값이true
일 경우에만 다음 노드로 실행 흐름을 전달합니다.
-
Notion 노드 (Find Database Item):
IF
노드의True
분기(Branch)에Notion
노드를 추가합니다.- Credential (인증): 동일한 Notion Credential을 선택합니다.
- Operation (작업):
Find Database Items
를 선택합니다. - Database ID: “프로젝트 관리” 데이터베이스 ID를 붙여넣습니다.
- Filters (필터):
Property
:프로젝트명
Condition
:Equals
Value
:={{$json["projectName"]}}
(Code 노드에서 받은projectName
사용)
- 이 노드는 ‘웹사이트 리뉴얼’ 프로젝트를 노션 DB에서 찾아 정보를 다음 노드로 전달합니다.
-
Notion 노드 (Update Database Item):
Find Database Item
노드 뒤에 또 다른Notion
노드를 추가합니다.- Credential (인증): 동일한 Notion Credential을 선택합니다.
- Operation (작업):
Update
를 선택합니다. - Database ID: 동일한 “프로젝트 관리” 데이터베이스 ID를 붙여넣습니다.
- Item ID:
={{$node["Notion Item 2"].json["id"]}}
(Find Database Item 노드의 이름이 “Notion Item 2″라고 가정) - Properties (속성):
상태
:Type
:Select
Value
:완료
- 이 노드는 ‘웹사이트 리뉴얼’ 프로젝트의
상태
를 ‘완료’로 변경합니다.
워크플로우 흐름 요약:
⏰ Cron
(매일 아침 실행) -> 📄 Google Sheet (Read)
(하위 작업 목록 가져오기) -> 🖥️ Code
(모든 작업 완료 여부 확인) -> 🚦 IF
(모두 완료 시) -> 🔍 Notion (Find)
(해당 프로젝트 찾기) -> 👍 Notion (Update)
(프로젝트 상태 ‘완료’로 변경) 🎉
n8n & Notion 활용 팁 💡
- 오류 처리 (Error Handling): 워크플로우 실행 중 오류가 발생할 수 있습니다. 각 노드의 ‘On Error’ 탭을 활용하여 특정 오류 시 Slack 알림을 보내거나 재시도를 설정하는 등 오류 처리 로직을 구현하면 워크플로우의 안정성을 높일 수 있습니다.
- 데이터 변환 (Data Transformation): 노션 API는 특정 형식의 데이터를 요구합니다. 예를 들어, 날짜는 ISO 8601 형식이어야 합니다.
Set
노드나Code
노드를 사용하여 데이터를 노션이 이해할 수 있는 형식으로 변환해야 할 때가 많습니다.Set
노드: 간단한 값 할당, 이름 변경 등에 유용합니다.Code
노드: 복잡한 계산, 조건부 로직, 여러 데이터 조합 등 프로그래밍이 필요할 때 사용합니다.
- 조건부 로직 (Conditional Logic):
IF
노드를 사용하여 특정 조건(예: 특정 값이 비어있지 않은 경우, 숫자가 특정 값보다 큰 경우)에 따라 워크플로우의 흐름을 다르게 가져갈 수 있습니다. - 반복 작업 (Looping): 여러 개의 아이템을 처리해야 할 때
Split In Batches
나Item Lists
노드를 활용하여 각 아이템에 대해 동일한 작업을 반복 수행할 수 있습니다. - Notion API 제한: 노션 API에는 요청 빈도 제한(rate limit)이 있습니다. 너무 짧은 시간 내에 많은 요청을 보내면 일시적으로 차단될 수 있으니, 대량의 데이터를 처리할 때는
Wait
노드를 활용하거나Split In Batches
로 요청 간의 간격을 두는 것을 고려해 보세요.
마무리하며 맺는말 ✨
n8n과 Notion의 조합은 단순한 데이터 입력 자동화를 넘어, 여러분의 업무 프로세스를 혁신할 수 있는 무궁무진한 가능성을 제공합니다. 이 글에서 제시된 예시는 빙산의 일각에 불과합니다. 이메일 수신 시 특정 정보를 노션에 기록하거나, 웹사이트 폼 제출 데이터를 자동으로 데이터베이스에 추가하는 등, 상상하는 모든 자동화를 구현할 수 있습니다.
처음에는 복잡하게 느껴질 수 있지만, n8n의 시각적인 워크플로우 빌더는 코딩 지식이 없어도 쉽게 자동화를 구성할 수 있도록 돕습니다. 지금 바로 여러분의 반복적인 노션 데이터베이스 작업을 파악하고, n8n을 활용하여 자동화의 세계에 발을 들여보세요! 여러분의 업무 효율이 눈에 띄게 향상될 것입니다. 🚀🔥
질문이 있다면 언제든지 댓글로 남겨주세요! 함께 자동화의 즐거움을 느껴봅시다. D