07.15 17기 2주차 워크샵 - 자동화 툴 n8n 활용법, MCP 활용까지 강의의 2교시 내용을 따라해 보았습니다.
1교시 내용은 아래 링크 클릭하시면 됩니다.
1/2 따라하기
첫번째 따라하기 할 때 google 관련 설정이 복잡 다단해서 어렵다고 했었는데,
이 부분을 아래 사례에서 박카스님께서 잘 정리해 주셨네요.
필독입니다.!!
n8n에서 Google Sheets 자동화를 위한 OAuth2 연동 과정 A to Z
1교시 때까지는 이미 만들어진 워크플로우의 json 내용을 참조할 수 있어서 그나마 따라하기 편했는데,
2교시에는 흐름과 워크플로우의 모양까지만 알려주신 후 셀프스터디를 해야한다고 하셔서
난이도가 확 올라가네요.
화면캡쳐 보다는 노드별 입력값 위주로 정리해 보겠습니다.
1. 손으로 만드는 워크플로우
선행작업 : 내 메일함에 "일정등록" 이라는 문구가 제목에 포함된 메일 1건을 수신합니다.(다른 메일에서 gmail로 메일하나 쏘면 되겠죠..)
교육 내용에 있던 워크플로우에 등장한 노드들을 일단 하나하나씩 만들어 봅니다.
Gmail Trigger : 테스트 모드에서는 1 건만 가져온다고 하네요.
Event : Message Received 로 설정
Poll Time : 메일함에 새 메일 가져오는 시간 주기 설정
Filter : 메일이 여러건 도착했을 때 메일제목에 "일정등록" 이라는 문구가 있는 메일만 걸러내기
Conditions : {{ $json.Subject }} contains 일정등록
OpenAI
Operation: Message a Model
Model : CHATGPT-4O-LATEST
Output Content as JSON : 체크 꼭체크해주세요
prompt :
{{ $json.snippet }}을 읽고, 구글캘린더에 표시해 야할 일정이 있다면, 정리해줘.
현재시간: {{ $now.setZone('Asia/Seoul') }}
json으로 대답해
meeting: Y/N
title: 제목
start: 구글캘린더에 입력할 시작시간
end:구글캘린더에 입력할 종료시간
note: 알아둬야하는 메일내용요약
Filter : ChatGPT가 만들어준 응답값 json에서 meeting이 Y인거만 필터링
Conditions : {{ $json.message.content.meeting }} is equal to Y
Google Calendar
Calendar : 사용하시는 캘린더 선택
Start : {{ $json.message.content.start }}
End : {{ $json.message.content.end }}
Additional Fields
Description: {{ $json.message.content.note }}
Summary: {{ $json.message.content.title }}
구글 캘린더에 잘 등록되네요.
2. AI가 만드는 워크플로우
위 1번에서 OpenAI -> Filter -> Google Canlder 세 단게를 AI Agent에게 위임해서 한 단계로 처리하는 워크플로우 입니다.
선행작업
위 1번에서 확인된 calendar 일정은 삭제합니다.
위 1번 워크플로우를 저장하고, 복사해서 새로 하나 만듭니다.
복사한 워크플로우에서 Gmail Trigger와 첫번째 Filter만 남기고 이후 3개 노드는 삭제하빈다.
AI Agent
OpenAI Chat Model 연결
Model : chatgpt-4o-latest
Simple Memory 연결
Context Window Length : 5
Google Calendar Tool 연결
Calendar : 사용하시는 캘린더 선택
Start / End : 모두 입력 영역 우측의 별3개아이콘 선택(Let the model define this parameter)
Additional Fields
Description / Summary : Defined automatically by the model 선택
오류발생하여 수정
workflow 그림만 보고 따라하다 보니, 오류가 발생하네요.
여기서부터는 강의 내용에 없는 내용입니다.
오류1
Simple Memory에서 "Error in sub-node ‘Simple Memory‘ No session ID found Open node" 라는 오류가 발생했는데, 이는 AI Agent 이전 노드에서 전달해 주는 json 값 중에 "sessionId" 키에 해당 하는 값이 없어서 발생하는 오류였습니다.
해결) Filter와 AIAgent 노드 중간에 Edit Fields라는 노드를 추가
Edit Fields
Mode : Manual Mapping
Fields to Set 에 Add 클릭하여 sessionId 에 {{ $json.id }} 로 설정
Input Fields to Include : All 선택
오류2
OpenAI Chat 모델에서 Error in sub-node ‘Simple Memory‘
No session ID found Open node
The resource you are requesting could not be found
tools is not supported in this model. For a list of supported models
라는 오류가 발생했습니다.
해결) Model : chatgpt-4o-latest 로 설정했서 발생한 오류. gpt-4o로 변경하니까 정상동작함.
OpenAI Node를 이용할 때와 AIAgent노드에서 OpenAI ChatModel로 이용할 때
모델명 선택하는 기준이 뭔가 다른것 같습니다
perplexity 에게 물어보니..아래와 같이 답해주네요.
**chatgpt-4o-latest**로 모델명을 설정할 때 오류가 발생하고, **gpt-4o**로 변경하면 정상 동작하는 이유는 현재 n8n의 OpenAI 연동(2025년 7월 기준)에서 `chatgpt-4o-latest` 모델명에 대한 내부 매핑 또는 지원이 제대로 이루어지지 않기 때문입니다.
실제 사례에서 `chatgpt-4o-latest`로 설정 시 `"The limit of 30,000TPM of the GPT-4o model has been exceeded."`와 같이 _기본 gpt-4o 모델의 한도 내에서 에러가 발생했으며_, OpenAI에서는 `chatgpt-4o-latest` 모델의 한도가 맞게 부여돼 있고 자체적으로는 이상이 없다고 답변했습니다. 그러나 n8n에서는 이를 올바르게 전달하지 못하고, 심지어 `chatgpt-4o-latest` 모델을 정확하게 호출하지 못하고 구 버전(gpt-4o)과 혼동하는 현상이 확인됐습니다[](https://github.com/n8n-io/n8n/issues/15887).
제 n8n 환경 보니 n8n 서버 update가 6개나 밀려있네요.
이번 실습 끝나면 최신으로 업데이트 해야겠습니다.
구글 캘린더에 잘 등록되네요.
3. Calendar MCP 만들어보기
MCP 맛만 보려고 일정 등록하는 거만 해 보았습니다.
MCP Server Trigger
production url 복사해두기 --> Claude 에서 커스텀 커넥터로 등록
Tools : Google Calendar
구글 캘린더 설정은 위에서 설정한 것과 동일하게 설정( 추가 속성 등)
claude에서 아래와 같이 명령 날리면
대한민국 시간으로 2025년 7월 17일 AM 10시 부터 AM 11시까지 을지문덕님과 M&A 관련 미팅있어 구글캘린더에 등록해줘. 일정 제목과 내용이 꼭 들어가야 해.
그럼 구글 캘린더에 아래와 같이 일정이 잘 등록됩니다.
4. Naver News 검색 MCP
MCP Server Trigger를 새로 만듭니다.
사전작업
https://developers.naver.com/apps/ 에 가서 clientid와 secret을 관리해야 함.
주의 사항
네이버 인증은 헤더에 위에서 만든 clientid와 secret를 헤더에 담아서 보내야 함
url에 함께 전송되는 쿼리 파라미터의 키는 query임, 값은 ai가 설정함.
MCP Server Trigger
production url 복사해두기 --> Claude 에서 커스텀 커넥터로 등록
Tools : Http Request
Method : GET
Authentication : None
Send Query Parameters : 켜기
Specify Query Paramters : Using Fields Below
Query Parameters
Name : query
Value : Defined automatically by the model
Specify Headers
Using Fields Below
Name : X-Naver-Client-Id
Value: 등록한 client id
Name: X-Naver-Client-Secret
Value: 등록한 client secret
Claude에서 아래처럼 명령 날리면
GPTers 커뮤니티 정보 검색해줘MCP Server를 통해서 아래와 같이 답해 주네요.
느낀점
강의를 통해서 MCP 개념을 쉽게 이해할 수 있었고, 실습을 통해 생각보다 쉽게 구현할 수 있다 라는 걸 느꼈습니다.
처음에는 막막하고, 하나하나 따라하기에 시간이 많이 걸리지만, 막힐 때마다 퍼플렉시티에게 물어봐가면서 진행하니 할만 하네요
n8n과 더 친해지기 위해, 선배님들의 주옥같은 사례글 보며 계속 따라해 보아야 겠습니다.