
안녕하세요! 👋
요즘 자동화 도구로 n8n 이야기를 자주 듣게 되었고,
『요즘 당근 AI 개발』 이라는 책에서도 n8n 사용기가 소개되어 있어
직접 써본 간단한 사용 후기를 정리해보려고 합니다.
마침 하루에 백준 문제 1문제 풀기를 목표로 하고 있어서,
이를 디스코드 알림과 구글 시트를 이용해 자동화해보았습니다.

하루에 백준 1문제 풀기를 목표로,
오전에 오늘 풀 문제가 디스코드 알림으로 오도록 워크플로우를 구성했습니다.
간단히 만들기 위해서 도커를 사용해 로컬로 동작시켰습니다.
1️⃣ 도커 🐳 로 n8n 실행시키기
n8n 도커 이미지를 pull 하는 명령어 입니다.
docker pull n8nio/n8n:latest
그리고 나서 docker-compose.yml을 아래와 같이 작성했습니다.
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
ports:
- "5678:5678"
volumes:
- n8n_data:/home/node/.n8n
environment:
TZ: Asia/Seoul
N8N_TIMEZONE: Asia/Seoul
GENERIC_TIMEZONE: Asia/Seoul
N8N_BASIC_AUTH_ACTIVE: "true"
N8N_BASIC_AUTH_USER: admin
N8N_BASIC_AUTH_PASSWORD: 1234
restart: unless-stopped
volumes:
n8n_data:
GENERIC_TIMEZONE: Asia/Seoul 을 처음엔 설정하지 않았는데,
Schedule Trigger가 계속 뉴욕 시간 기준으로 동작하는 문제가 발생했습니다.
n8n에서는 단순히 TZ, N8N_TIMEZONE 만으로는
스케줄러 기준 시간이 바뀌지 않는 경우가 있어,
GENERIC_TIMEZONE 설정이 필요했습니다.
이제 작성한 docker-compose.yml을 실행하면 n8n 실행은 끝이 납니다.
docker compose up -d
docker ps
아래와 같이 결과가 나오고
http://localhost:5678 로 접속하면 n8n UI가 보입니다.


2️⃣ n8n 워크플로우 만들기

🕓 Scheduler Trigger

처음에 Scheduler Trigger는 언제 이 워크플로우를 동작시킬지를 결정하는 노드입니다.
참고로 n8n에는 연결할 수 있는 노드들이 아래 사진처럼 엄청 많습니다!


저는 오전에 알림이 왔으면 좋겠어서
위의 그림처럼 설정했는데 여기서 1은 일 간격을 말하고 1일마다 == 매일
즉, 매일 오전 10시 10분에 반복하게 하라는 뜻입니다.
📄 Google 스프레드시트에서 한 행 가져오기

그 다음은 조금 애를 먹었던..Google 스프레드시트 연동입니다.
OAuth 발급이 조금 복잡했어요!

위의 구글 스프레드 시트에서 오늘 날짜에 해당되는 문제를 가져오게 했습니다.
구글 스프레드시트는 chatGPT를 통해 만들어서 금방 만들었어요.
구글 스프레드시트를 만들 때 주의할 점은 날짜가 날짜 형식이 아닌 텍스트 형식이어야
n8n에서 날짜로 조회할 때 문제가 없더라고요!
Google 스프레드시트 연동을 하기 위해서는 Create new credential을 눌러서 진행합니다.


Google Cloud에서 새로운 프로젝트를 만든 후 API 키를 발급받아야 합니다.



새 프로젝트를 만들고,
API 및 서비스 > 라이브러리에서 Google Sheets API 와 Google Drive API를 사용합니다.
그 후에 OAuth 동의 화면을 눌러
Open docs 가이드에 따라 앱 이름, 이메일 등을 입력합니다.
저 같은 경우에는 로컬이라서 브랜딩엔 따로 뭘 작성을 안했어요!
그리고 클라이언트 ID를 만들면 끝이고,
승인된 리디렉션 URI에는 아까 n8n UI에 있던 OAuth Redirect URI를 입력하면 됩니다.


저 클라이언트 ID랑 보안 비밀번호를 잘 복사해뒀다가 아까 n8n으로 돌아가서 입력하면 됩니다.


다 된 줄 알았는데 access_denied😭가 떠서 찾아보니
대상 > 테스트 사용자에 제 이메일을 넣어야 한다기에 넣어서 해결했습니다.



오늘 날짜의 행을 가져와야 해서 column이 date인 것에 값이 오늘 인 것이 있으면 가져오게 했습니다.
{{ $now.setZone('Asia/Seoul').format('yyyy-MM-dd') }} 를 Expression으로 넣어서 오늘 날짜를 가져오게 했어요!
오른쪽 결과 사진을 보면 오늘 것만 잘 가져와진게 보입니다.
🤨 IF 노드

오늘 날짜의 데이터가 있다면(true면) 디스코드 알림보내기를 위해서 IF 노드를 넣었습니다.

이렇게 설정을 했고, Execute step을 누르면 중간중간에 테스트를 해볼 수 있어서 편했어요!
✉️ Discord에 알림보내기

원래는 카톡 알림을 생각했는데 Discord 웹후크 기능을 쓰면 더 간단해질거 같아서 이걸로 했습니다..😅


HTTP Request 노드를 사용했고, URL에는 Discord 채널의 웹후크 URL을 넣었습니다.
그리고 Send Body를 On 하고 보낼 메시지 내용을 value에 Expression으로 넣었습니다.
☀️ 오늘의 코테 1문제
📌 문제 번호: {{ $json.problem_id }}
🔗 바로 풀기: {{ $json.link }}
👉 목표: 문제 열고 접근 1줄
⏱️ 제한: 20분
요런식으로 문제를 열어보기라도 하도록 작성했습니다.
두둔,,디스코드에 알림이 이렇게 옵니다!
하루에 1백준 잘 해보겠습니다.😤

3️⃣ 마무리
추가로 저녁 시간에 문제를 풀지 않았을 경우 다시 알림을 보내거나,
문제를 풀면 자동으로 상태가 변경되는 워크플로우도 만들어볼 수 있을 것 같았습니다.
다만 로컬에서 도커로 실행하다 보니,
노트북이 꺼지면 자동화가 멈춘다는 한계도 있어
추후에는 클라우드 환경으로 옮겨볼 계획입니다.
책을 읽으면서 갑자기 해보고 싶어서 시작했는데,
실제로 동작하는 것을 확인해보니
n8n을 다양한 반복 작업에 활용해볼 수 있겠다는 생각이 들었습니다!👍👍
'자동화' 카테고리의 다른 글
| [n8n] 나만의 개인 일정 비서 만들기(구글 캘린더 + Gemini API) (0) | 2026.01.10 |
|---|