시작하며: 알림 시스템

지난 2편에서 폐쇄망 인프라 구축까지 완벽하게 마쳤다. 하지만 아무리 백그라운드에서 잘 돌아가는 자동화라도, “나 달력 다 썼어요!” “뭔가 잘못됐어요” 라고 알려주지 않으면 내가 매번 캘린더나 n8n을 켜서 확인해야 하는 귀찮음이 남는다.

그래서 모든 달력 등록 작업이 끝나면 내 스마트폰으로 텔레그램(Telegram) 알림을 딱 한 번 쏴주는 작업을 하기로 했다.

1. n8n 최신 버전의 직관적인 텔레그램 노드

알림을 붙이려고 n8n 노드 검색창에 ‘Telegram’을 입력하니 Send a text message 같은 세부 액션들이 검색됐다.

2. 비서(Bot) 사원증 발급 및 주소 확인

텔레그램을 보내려면 봇을 만들고 권한을 얻어야 한다. 이미 이전에 가족 분이 하시는 사업 홈페이지를 제작하고 금액을 변경할 수 있는 봇을 만들어봐서 어렵지 않았다.

  1. 텔레그램 앱에서 @BotFather 를 찾아 /newbot 을 입력해 ‘server alert’과 같이 봇을 생성하고 HTTP API Token을 발급받았다.

  2. 텔레그램 앱에서 @userinfobot 을 찾아 내 고유의 숫자 Chat ID를 조회했다.

이 토큰과 ID가 있으면 n8n이 내 스마트폰으로 직접 메시지를 꽂아 넣을 수 있다.

3. 텔레그램 노드 연결과 메시지 작성

n8n 워크플로우 맨 마지막(HTTP Request POST 노드 뒤)에 Send a text message 노드를 붙였다.

  1. Credential 항목을 새로 생성하여 아까 받은 토큰을 넣었다. 어렵지 않다.

  2. Chat ID 칸에 내 숫자 ID를 넣었다.

  3. Text 칸에 Expression 모드로 알림 문구를 작성했다.

✅ 200
{{ $json.start.date.split('-')[0] }}년 {{ parseInt($json.start.date.split('-')[1]) }}월 운동 루틴 캘린더 등록 완료 🏋️

나중에 다른 서비스들도 알림을 한 번에 이 봇으로 보내도록 형식을 만들어봤다.

4. 🚨 스팸 폭탄 방지 (Execute Once)

여기서 끝이 아니다. 텔레그램 노드 세팅에서 가장 중요한 부분이 남았다.

바로 직전 노드(HTTP Request POST)가 한 달 치 달력을 채우기 위해 30번을 도는데, 텔레그램 노드를 이대로 그냥 두면 똑같은 완료 메시지가 내 폰으로 30번 날아오는 끔찍한 대참사가 벌어진다.

🤔 왜 옵션을 켜지 않으면 문자가 30개나 날아올까?

이 현상은 n8n의 아주 기본적인 작동 원리인 ‘아이템 단위 반복 실행’ 때문이라고 한다.

  • 30장의 영수증 상자: 직전 노드는 달력에 일정을 쓸 때마다 “1일 성공”, “2일 성공”이라는 결과물을 하나씩 만든다. 일이 다 끝나면 이 30장의 영수증이 담긴 상자가 다음 작업자인 텔레그램 비서에게 통째로 전달된다.

  • n8n의 충직한 규칙: n8n의 노드는 기본적으로 “상자 안에 든 서류(아이템)의 개수만큼 무조건 반복해서 일한다” 는 규칙을 따른다. 그래서 비서는 영수증 30장을 보고, 1장 읽고 문자 1통 보내는 행동을 30번 무식하게 반복해 버리는 것이다.

💡 해결책: Execute Once (한 번만 실행)

이를 막기 위해 텔레그램 노드의 상단 [Settings] 탭에 들어가 목록 중 Execute Once(한 번만 실행) 옵션을 찾아 스위치를 켜주었다.

이 옵션은 텔레그램 비서에게 “상자 안에 서류가 30장이 있든 100장이 있든 신경 쓰지 말고, 맨 위에 있는 첫 번째 영수증만 보고 나에게 대표로 딱 한 번만 보고해!” 라고 특별 지시를 내리는 것과 같다.

앞서 3번 항목에서 작성한 수식($json.start.date...)이 바로 이 맨 위에 있는 첫 번째 영수증에서 날짜를 쏙 빼와서 완벽한 한 통의 완료 보고서를 만들어주는 역할을 한다. 이렇게 설정하면 노드를 타고 30개의 데이터가 들어와도 깔끔하게 1번만 메시지를 발송하고 시스템을 멈춘다.

이제 완벽하다고 생각하고 흐뭇하게 [Test Workflow] 버튼을 눌렀다. 그런데, 예상치 못한 붉은색 에러가 터지며 시스템이 멈춰버렸다. 다음 4편에서는 어리석게도 예외사항을 고민하지 않아 발생한 에러를 해결하는 트러블슈팅을 다룬다.