뭘 만든 건가
이 프로젝트는 텔레그램 봇을 인터페이스로 쓰고, n8n이 전체 자동화 흐름을 제어하며, AI API와 Google 서비스를 연결해 개인 지식과 파일을 정리하는 시스템입니다. n8n은 오라클 클라우드 Always Free VM에서 24시간 상시 가동됩니다.
Claude Code로 만든 자동화 프로젝트
Claude Code를 개발 파트너로 활용해 n8n 워크플로우, API 연동, 서버 인프라 구성, mTLS 보안, Google 서비스 연결, 테스트 자동화 흐름을 구성했습니다.
오라클 클라우드 인프라 & mTLS 단말 보안
n8n은 Oracle Cloud Always Free VM에서 24시간 상시 가동됩니다. n8n 관리 화면은 mTLS로 잠겨 있어 클라이언트 인증서가 설치된 단말에서만 접근 가능합니다. Telegram 봇 통신과 외부 API 아웃바운드는 mTLS 영향 없이 정상 동작합니다.
인프라 구조
| 항목 | 값 |
|---|---|
| 클라우드 | Oracle Cloud Always Free |
| 리전 | 서울 |
| 도메인 | 전용 고정 도메인 (Telegram Webhook 직결) |
| 가용성 | 24시간 상시 가동 · PC 의존 없음 |
mTLS 보안 구조
Caddy가 리버스 프록시로 동작하며, /webhook* 경로만 개방하고
그 외는 클라이언트 인증서가 없으면 403을 반환합니다. Telegram 봇 통신과 외부 API 아웃바운드는 영향 없습니다.
/webhook/wj-*)
인증서 검증
등록된 단말 (2026-06-10 기준)
갤럭시북 (노트북) ✅ · 갤럭시 폰 ✅
인증서 만료: 2031-06-09 (CA 2036-06-07)
새 단말 추가 절차
1. ca.key로 새 .p12 인증서 발급
2. 새 단말에 ca.crt + 새 .p12 설치
3. 브라우저에서 n8n 도메인 접속 테스트
⚠️ 서버 설정 변경 불필요, 기존 단말 영향 없음
실제 화면으로 보는 결과
n8n은 자동화 흐름을 실행하고, 텔레그램은 사용자가 결과를 확인하는 대화형 화면이 됩니다.
n8n 워크플로우 노드 구성
텔레그램 실제 대화 화면
어떤 걸 할 수 있나
아무 형식으로 저장
텍스트, 이미지, PDF, 문서, 링크를 채팅하듯 보내면 기록으로 변환합니다.
자동 분류와 요약
AI가 제목, 대분류, 소분류, 키워드, 요약, 날짜·시간 정보를 추출합니다.
Calendar 자동 등록
일정/할일 카테고리이면 날짜·시간을 분석해 Google Calendar에 바로 등록합니다.
확인형 자동화
중복, 새 카테고리, 수정 후보는 버튼으로 확인한 뒤 처리합니다.
| 사용자가 하는 일 | 시스템이 하는 일 | 결과 |
|---|---|---|
| 메모나 아이디어를 보낸다 | 내용을 분석해 제목, 분류, 요약, 키워드 생성 | 구조화된 기록으로 저장 |
| 일정을 채팅으로 알린다 | 날짜·시간·멤버를 추출하고 summary 양식으로 정리 | Google Calendar에 자동 등록 + 텔레그램 확인 |
| 이미지, 캡처, 문서를 보낸다 | 파일 정보를 읽고 캡션이 부족하면 추가 설명 요청 | 파일과 설명을 하나의 항목으로 묶어 보관 |
| 전에 저장한 내용을 찾아달라고 한다 | 키워드와 후보 점수로 관련 항목을 찾음 | 텔레그램에서 후보 확인 후 내용 또는 파일 수신 |
| 기한이 있는 내용을 보낸다 | 날짜를 추출하고 Calendar와 리마인드 흐름에 연결 | 놓치기 쉬운 항목을 다시 알림 |
일정 특화 기능 — Phase 1 캘린더
단순 저장을 넘어, 일정 메시지에서 의미 있는 구조를 추출해 Google Calendar에 정확하게 연결합니다. title 작성 규칙부터 반복 일정까지 세밀하게 설계되어 있습니다.
title suffix 정책
AI가 메시지의 예약 완료 여부를 판단해 title 끝에 suffix를 붙입니다. 날짜·요일 정보는 title에 절대 포함하지 않습니다.
| 신호 표현 | 판정 | suffix | 예시 →결과 |
|---|---|---|---|
| ~이야, ~야, 됐어, 잡았어, 있어, 예약했어 | 확정 상태 | ~일정 | "이번주 토요일 테니스야" → 테니스 일정 |
| 가야해, 해야해, 잡아야해, 예약해야, 가야겠어 | 미확정 상태 | ~예약필요 | "까꿍이 병원가야해" → 까꿍이 병원 예약필요 |
| 신호 불명확 | 기본값 | ~일정 | 애매하면 '일정'으로 처리 |
summary 고정 양식
일정/할일 카테고리이면 AI가 자유 텍스트 대신 아래 고정 양식으로 summary를 채웁니다. 정보가 없는 항목은 '-'로 표기하고, 레이블은 생략 불가입니다.
예) 시간: 09:00~11:00 | 장소: - | 멤버: 아경, 동수 | 비고: -
Google Calendar 등록 3가지 모드
start_time이 있을 때. 시작·종료 시간을 그대로 등록합니다. 종료 시간이 없으면 1시간 기본값.
dateTime: 2026-06-14T09:00:00+09:00
start_time이 null일 때. 날짜만 지정해 종일 이벤트로 등록합니다.
date: "2026-06-19"
start_date ≠ due_date일 때. 범위 전체를 하나의 이벤트로 등록합니다.
start: "2026-06-16" → end: "2026-06-17"
반복 일정 & notice
RRULE 기반 반복 설정
AI가 반복 패턴을 감지하면 recurrence 필드를 채웁니다.
매주 화요일 → WEEKLY:TUE
매주 월요일 → WEEKLY:MON
매월 15일 → MONTHLY:15
notice — Telegram 전용 안내
반복 일정이 감지되면 Telegram에만 안내 메시지를 보냅니다. Sheets에는 저장되지 않습니다.
"매주/매월 반복 일정입니다.
구글 캘린더에서 반복 설정을 권장합니다."
지원 입력 타입과 사용 방식
저장, 수정, 삭제, 조회가 모두 채팅 명령과 버튼 확인으로 이어집니다. 사용자는 별도 관리 화면을 열지 않고 대화창 안에서 주요 기능을 처리합니다.
텍스트
메모, 아이디어, 할 일, 일정처럼 짧은 자연어 입력을 바로 저장합니다.
이미지
캡처, 사진, 안내문 이미지를 받아 주요 내용을 분석하고 파일과 함께 보관합니다.
문서 제목, 목적, 날짜, 핵심 내용을 추출해 검색 가능한 항목으로 만듭니다.
링크
URL을 보내면 페이지 내용을 분석해 제목·분류·요약을 생성합니다.
이번주 토요일 9시 테니스야
내일 테니스 약속 15일로 미뤄졌어
아까 저장한 테니스 약속 지워줘
전체 연계 도식
오라클 클라우드 VM 위에 n8n이 가동되고, Caddy가 트래픽을 제어합니다. Telegram은 입출력, AI API는 이해와 분류, Google Cloud는 인증과 저장 레이어입니다.
저장되는 데이터 구조
단순 메시지 원문만 저장하는 것이 아니라, 검색·수정·자동화에 쓸 수 있도록 여러 필드를 함께 저장합니다. 일정 특화 필드(start_date, start_time, end_time, recurrence)가 추가되어 Google Calendar와 정밀하게 연동됩니다.
Sheets에 저장되는 필드
suffix: 일정 / 예약필요
일정: 시간|장소|멤버|비고 고정 양식
Telegram 전용 필드 (Sheets 미저장)
"매주/매월 반복 일정입니다. 구글 캘린더에서 반복 설정을 권장합니다."
도구별 역할
데이터 처리 흐름
사용자의 메시지 한 건이 어떤 경로를 거쳐 저장·실행되는지 단계별로 보여줍니다.
단계 05 조건부 분기
n8n 내부 처리 케이스
사용자는 채팅만 하지만, 뒤에서는 입력 유형과 명령 의도에 따라 서로 다른 경로로 처리됩니다.
Google 서비스 연계 구조
AI 모델 연계 구조
모든 입력 타입에 gpt-4o-mini 단일 모델을 사용합니다. 모델을 통일함으로써 날짜 계산 정확도와 지시문 준수율을 높였습니다. 프롬프트에는 오늘 날짜 기준으로 이번주/다음주 날짜를 미리 계산한 빠른참조 테이블이 포함됩니다.
빠른참조 테이블 — 날짜 오류 방지 핵심
프롬프트 첫 줄에 오늘=2026-06-14, 이번주 토=2026-06-14, 다음주 화=2026-06-16... 식으로
모든 요일을 실제 날짜로 미리 계산해 주입합니다. AI는 직접 날짜를 계산하지 않고
이 테이블에서 복사만 합니다. gpt-4.1-nano에서 발생하던 날짜 off-by-one 오류가 이 방법으로 해결되었습니다.
핵심 설계 포인트
채팅을 입력 폼으로 사용
복잡한 UI 없이 평소 쓰는 메신저를 자동화의 시작점으로 만들었습니다.
AI 결과를 데이터화
AI 답변을 문장으로 끝내지 않고, 후속 처리 가능한 JSON 구조로 변환합니다.
확인 필요한 자동화
중복, 수정 후보, 새 카테고리는 버튼 선택을 거쳐 데이터 품질을 지킵니다.
서버 상시 가동
Oracle Cloud Always Free VM으로 로컬 PC 의존 없이 24시간 자동화가 동작합니다.
mTLS 단말 인증
관리 화면은 클라이언트 인증서 설치 단말만 접근 가능. Telegram 봇은 개방 유지.
일정 특화 분석
title suffix, summary 고정 양식, Calendar 3가지 모드를 통해 일정 데이터 품질을 높였습니다.
핵심 구현 패턴
Pending 패턴
파일만 먼저 오고 설명이 나중에 오는 경우, 임시 저장소에 상태를 남겨 두 메시지를 하나의 기록으로 합칩니다.
검증 가능한 AI
AI의 분류 결과를 바로 저장하지 않고 카테고리 목록, 중복 후보, 사용자 버튼 확인을 거칩니다.
빠른참조 프롬프트
날짜 계산을 AI에게 맡기지 않고, 오늘 기준 모든 요일의 날짜를 프롬프트에 미리 주입해 오류를 방지합니다.
결과적으로 가능한 일
개인용 정보 수집함 + AI 분류기 + 일정 자동화 실행기를 하나로 묶은 시스템
이 시스템은 단순한 챗봇이 아니라, 사용자가 보낸 정보를 이해하고, 저장 가능한 형태로 정리하고, 일정이면 캘린더까지 자동으로 연결하는 개인 운영 도구입니다. Oracle Cloud 서버에서 상시 가동되고, mTLS로 보안이 유지됩니다.