AI Automation System · Oracle Cloud · mTLS 보안

텔레그램으로 대화하는 AI 개인비서 자동화 시스템

메시지·이미지·문서·링크를 채팅창에 보내면 AI가 내용을 이해하고 분류·요약·저장·달력 등록·리마인드까지 이어주는 개인 정보 관리 자동화입니다.
n8n은 오라클 클라우드 서버에서 상시 가동되며, mTLS 인증서로 접근을 통제합니다.

한 문장 정의

채팅형 입력창을 개인 데이터베이스와 AI 분석 엔진에 연결한 자동화 비서입니다.

핵심 가치

입력은 메신저처럼 가볍게, 저장은 DB처럼 구조적으로, 달력과 리마인드는 자동으로.

인프라

Oracle Cloud Always Free VM · 전용 도메인 · Caddy mTLS 단말 인증서 보안

Phase 1 강화

일정 특화 분석 — title suffix 정책, summary 고정 양식, Calendar 3가지 등록 모드

뭘 만든 건가

이 프로젝트는 텔레그램 봇을 인터페이스로 쓰고, n8n이 전체 자동화 흐름을 제어하며, AI API와 Google 서비스를 연결해 개인 지식과 파일을 정리하는 시스템입니다. n8n은 오라클 클라우드 Always Free VM에서 24시간 상시 가동됩니다.

1. 텔레그램에 정보 전송 (텍스트·이미지·PDF·링크)
2. AI가 제목, 분류, 요약, 키워드, 날짜·시간 추출
3. Google Sheets에 검색 가능한 인덱스 저장
4. 일정/할일이면 Google Calendar 자동 등록
5. 결과를 텔레그램으로 다시 안내
flowchart TB A["채팅 입력"] --> B["AI 분석"] B --> C["구조화 데이터"] C --> D["Sheets 인덱스"] C --> E["Drive 파일"] C --> F["Calendar 일정"] D --> G["조회·수정·삭제"] E --> G F --> G G --> H["텔레그램 응답"]

Claude Code로 만든 자동화 프로젝트

Claude Code를 개발 파트너로 활용해 n8n 워크플로우, API 연동, 서버 인프라 구성, mTLS 보안, Google 서비스 연결, 테스트 자동화 흐름을 구성했습니다.

Claude
Claude Code개발 보조·코드 작성
n8n
n8n워크플로우 자동화
Telegram
Telegram채팅형 인터페이스
OpenAI
gpt-4o-mini분류·요약·추출 (전 타입)
Google Sheets
Google Sheets인덱스 DB
Google Drive
Google Drive파일 저장소
Google Calendar
Google Calendar일정·기한 자동 등록
Oracle
Oracle CloudAlways Free VM · 서울 리전
Caddy
CaddyReverse Proxy · mTLS 보안

오라클 클라우드 인프라 & 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 아웃바운드는 영향 없습니다.

🤖 Telegram Bot Webhook 이벤트 전송 (/webhook/wj-*)
🌐 브라우저 (n8n 관리 UI) 클라이언트 인증서 설치된 단말에서 접근
☁️ Google / OpenAI API 아웃바운드 — 서버에서 직접 호출, 영향 없음
요청
Caddy Reverse Proxy
인증서 검증
라우팅
✅ /webhook* 경로 OPEN 인증서 없어도 통과 → n8n
✅ 인증서 있는 단말 ALLOWED n8n 관리 UI 접근 가능
❌ 인증서 없는 요청 403 BLOCKED 로그인 화면조차 차단

등록된 단말 (2026-06-10 기준)

갤럭시북 (노트북) ✅  ·  갤럭시 폰 ✅
인증서 만료: 2031-06-09 (CA 2036-06-07)

새 단말 추가 절차

1. ca.key로 새 .p12 인증서 발급
2. 새 단말에 ca.crt + 새 .p12 설치
3. 브라우저에서 n8n 도메인 접속 테스트
⚠️ 서버 설정 변경 불필요, 기존 단말 영향 없음

실제 화면으로 보는 결과

n8n은 자동화 흐름을 실행하고, 텔레그램은 사용자가 결과를 확인하는 대화형 화면이 됩니다.

n8n 워크플로우 노드 구성

Telegram Trigger 메시지 파싱 Sheets 읽기 Pending 조회 AI 분석 gpt-4o-mini 카테고리 검증 중복 확인 Sheets 저장 Calendar 자동 등록 Telegram 응답
텔레그램 입력 → AI 분석 → Sheets 저장 → Calendar 자동 등록 → 결과 응답까지 이어지는 전체 흐름입니다.

텔레그램 실제 대화 화면

나만의 비서 이번주 토요일 오전 9시부터 11시 테니스야 멤버는 나, 아경, 동수 처리중... 테니스 일정 일정/할일 › 스포츠/운동 시간: 09:00~11:00 | 장소: - | 멤버: 아경, 동수 | 비고: - 📅 캘린더 등록됨 까꿍이 병원 예약필요 일정/할일 › 동물/반려동물 ⚠️ 예약 필요 항목입니다
자연어로 보내면 title suffix, 시간, 멤버까지 자동 정리되어 캘린더에 등록됩니다.

어떤 걸 할 수 있나

IN

아무 형식으로 저장

텍스트, 이미지, PDF, 문서, 링크를 채팅하듯 보내면 기록으로 변환합니다.

AI

자동 분류와 요약

AI가 제목, 대분류, 소분류, 키워드, 요약, 날짜·시간 정보를 추출합니다.

CAL

Calendar 자동 등록

일정/할일 카테고리이면 날짜·시간을 분석해 Google Calendar에 바로 등록합니다.

OK

확인형 자동화

중복, 새 카테고리, 수정 후보는 버튼으로 확인한 뒤 처리합니다.

사용자가 하는 일시스템이 하는 일결과
메모나 아이디어를 보낸다내용을 분석해 제목, 분류, 요약, 키워드 생성구조화된 기록으로 저장
일정을 채팅으로 알린다날짜·시간·멤버를 추출하고 summary 양식으로 정리Google Calendar에 자동 등록 + 텔레그램 확인
이미지, 캡처, 문서를 보낸다파일 정보를 읽고 캡션이 부족하면 추가 설명 요청파일과 설명을 하나의 항목으로 묶어 보관
전에 저장한 내용을 찾아달라고 한다키워드와 후보 점수로 관련 항목을 찾음텔레그램에서 후보 확인 후 내용 또는 파일 수신
기한이 있는 내용을 보낸다날짜를 추출하고 Calendar와 리마인드 흐름에 연결놓치기 쉬운 항목을 다시 알림

일정 특화 기능 — Phase 1 캘린더

단순 저장을 넘어, 일정 메시지에서 의미 있는 구조를 추출해 Google Calendar에 정확하게 연결합니다. title 작성 규칙부터 반복 일정까지 세밀하게 설계되어 있습니다.

title suffix 정책

AI가 메시지의 예약 완료 여부를 판단해 title 끝에 suffix를 붙입니다. 날짜·요일 정보는 title에 절대 포함하지 않습니다.

신호 표현판정suffix예시 →결과
~이야, ~야, 됐어, 잡았어, 있어, 예약했어확정 상태~일정"이번주 토요일 테니스야" → 테니스 일정
가야해, 해야해, 잡아야해, 예약해야, 가야겠어미확정 상태~예약필요"까꿍이 병원가야해" → 까꿍이 병원 예약필요
신호 불명확기본값~일정애매하면 '일정'으로 처리

summary 고정 양식

일정/할일 카테고리이면 AI가 자유 텍스트 대신 아래 고정 양식으로 summary를 채웁니다. 정보가 없는 항목은 '-'로 표기하고, 레이블은 생략 불가입니다.

시간: HH:MM~HH:MM  |  장소: 장소명  |  멤버: 이름들  |  비고: 기타
예) 시간: 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에는 저장되지 않습니다.

"매주/매월 반복 일정입니다.
구글 캘린더에서 반복 설정을 권장합니다."

지원 입력 타입과 사용 방식

저장, 수정, 삭제, 조회가 모두 채팅 명령과 버튼 확인으로 이어집니다. 사용자는 별도 관리 화면을 열지 않고 대화창 안에서 주요 기능을 처리합니다.

TXT

텍스트

메모, 아이디어, 할 일, 일정처럼 짧은 자연어 입력을 바로 저장합니다.

IMG

이미지

캡처, 사진, 안내문 이미지를 받아 주요 내용을 분석하고 파일과 함께 보관합니다.

PDF

PDF

문서 제목, 목적, 날짜, 핵심 내용을 추출해 검색 가능한 항목으로 만듭니다.

URL

링크

URL을 보내면 페이지 내용을 분석해 제목·분류·요약을 생성합니다.

저장 그냥 메시지나 파일을 보냅니다. 이번주 토요일 9시 테니스야
수정 바뀐 내용을 자연어로 말하면 관련 항목을 찾아 확인 후 바꿉니다. 내일 테니스 약속 15일로 미뤄졌어
삭제 지우고 싶은 내용을 말하면 후보를 보여주고 확인 후 삭제합니다. 아까 저장한 테니스 약속 지워줘

전체 연계 도식

오라클 클라우드 VM 위에 n8n이 가동되고, Caddy가 트래픽을 제어합니다. Telegram은 입출력, AI API는 이해와 분류, Google Cloud는 인증과 저장 레이어입니다.

flowchart LR U["사용자"] --> TG["Telegram Bot\n입력·버튼·응답"] TG --> CADDY["Caddy\n/webhook* open\n그 외 mTLS 차단"] CADDY --> N8N["n8n Workflow\n오라클 클라우드 VM"] N8N --> OPENAI["gpt-4o-mini\n분류·요약·추출\n(전 타입 동일)"] N8N --> GCLOUD["Google Cloud\nService Account·API 권한"] GCLOUD --> SHEETS["Google Sheets\n인덱스 DB"] GCLOUD --> DRIVE["Google Drive\n파일 저장소"] GCLOUD --> CAL["Google Calendar\n일정·반복 항목"] SHEETS --> N8N DRIVE --> N8N CAL --> N8N N8N --> TG

저장되는 데이터 구조

단순 메시지 원문만 저장하는 것이 아니라, 검색·수정·자동화에 쓸 수 있도록 여러 필드를 함께 저장합니다. 일정 특화 필드(start_date, start_time, end_time, recurrence)가 추가되어 Google Calendar와 정밀하게 연동됩니다.

Sheets에 저장되는 필드

record_key시스템 내부 식별값
titleAI 생성 짧은 제목
suffix: 일정 / 예약필요
L1 / L2대분류와 소분류 카테고리
entities검색에 쓸 핵심 키워드
summary요약 텍스트
일정: 시간|장소|멤버|비고 고정 양식
due_date마지막 날짜 / 기한 (YYYY-MM-DD)
start_date범위 시작일. 단일이면 due_date와 동일
start_time시작 시간 HH:MM. 없으면 null (하루종일)
end_time종료 시간 HH:MM. 명시된 경우만 저장
recurrence반복 패턴 (WEEKLY:TUE 등). 없으면 null
file_pathDrive에 저장된 파일 위치
status대기, 저장, 수정 등 처리 상태

Telegram 전용 필드 (Sheets 미저장)

notice 반복 일정 감지 시 Telegram에만 전달하는 안내 메시지.
"매주/매월 반복 일정입니다. 구글 캘린더에서 반복 설정을 권장합니다."
왜 Telegram 전용인가? notice는 사용자에게 한 번 안내하면 충분하고, 이후 조회·검색에서 필요하지 않아 Sheets에 별도 컬럼을 두지 않았습니다.

도구별 역할

Telegram
사용자와 시스템이 만나는 채팅 인터페이스. 메시지, 파일, 버튼 클릭을 받고 결과를 전달합니다.
n8n
전체 흐름의 두뇌. 입력 종류 구분, API 호출, 성공·실패 응답을 처리합니다. 오라클 VM 상시 가동.
Caddy
리버스 프록시 + mTLS 보안 게이트웨이. /webhook* 개방, 그 외 인증서 없으면 403.
Oracle Cloud
Always Free VM (서울 리전). 24시간 n8n 상시 가동. 로컬 Docker 의존에서 벗어난 인프라 기반.
gpt-4o-mini
텍스트·이미지·PDF·URL 전 타입에 단일 모델 적용. 빠른참조 날짜 지시를 정확히 따릅니다.
Google Sheets
제목, 카테고리, 요약, 날짜 필드, 파일 위치, 상태값을 저장하는 인덱스 DB 역할입니다.
Google Calendar
일정/할일 카테고리 항목을 3가지 모드(시간/하루종일/날짜범위)로 자동 등록합니다.
Google Cloud
Sheets, Drive, Calendar API를 쓰기 위한 프로젝트, 권한, 서비스 계정 인증 기반입니다.

데이터 처리 흐름

사용자의 메시지 한 건이 어떤 경로를 거쳐 저장·실행되는지 단계별로 보여줍니다.

01 입력
사용자
텍스트·이미지·PDF·링크를 텔레그램에 전송
02 수신
Telegram → Caddy → n8n
Webhook 이벤트 전달. /webhook* 경로로 mTLS 우회
03 라우팅
n8n 파싱
입력 유형(텍스트/파일/버튼), 명령 의도 판별
04 분석
gpt-4o-mini
title·L1/L2·날짜·시간·summary·recurrence 추출 → JSON
05 저장·실행
Google APIs
Sheets 저장 · Drive 업로드 · Calendar 등록 (조건부)
06 응답
Telegram
완료·확인·오류 메시지 + notice(반복 일정 시)

단계 05 조건부 분기

🗂 모든 항목 Google Sheets에 구조화된 필드로 저장
📅 일정/할일 카테고리 Google Calendar 자동 등록 (시간/하루종일/날짜범위 중 자동 선택)
📎 파일 첨부 항목 Google Drive에 파일 업로드, Sheets에 경로 기록

n8n 내부 처리 케이스

사용자는 채팅만 하지만, 뒤에서는 입력 유형과 명령 의도에 따라 서로 다른 경로로 처리됩니다.

일반 텍스트 저장
텍스트 수신 → 메시지 파싱
gpt-4o-mini로 전체 필드 추출
카테고리 검증 → 중복 체크
Sheets 저장
일정/할일이면 Calendar 등록
텔레그램 완료 응답
파일 + 캡션 없음 (Pending)
파일만 수신 (캡션 없음)
Pending 시트에 파일 임시 저장
"설명을 보내주세요" 안내
다음 텍스트 수신 → 파일과 병합
gpt-4o-mini 분석 → 저장
수정 / 삭제 / 조회
의도 파악 (수정/삭제/조회 키워드)
Sheets에서 후보 항목 검색
후보 버튼으로 사용자 확인
확인 후 Sheets 갱신 / 항목 반환
텔레그램 결과 응답
중복 감지 / 새 카테고리
중복 가능성 감지 → 덮어쓰기/취소 버튼
새 카테고리 감지 → 등록 확인 요청
사용자 버튼 응답 대기
확인 선택 → Sheets 저장 실행
완료 응답

Google 서비스 연계 구조

flowchart TB GC["Google Cloud Project"] --> SA["Service Account\n서버 간 인증"] SA --> AUTH["OAuth/JWT Token\nAPI 호출 권한"] AUTH --> S1["Sheets API\n인덱스 읽기·추가·수정·삭제"] AUTH --> S2["Drive API\n파일 업로드·다운로드 링크"] AUTH --> S3["Calendar API\n3가지 모드 이벤트 등록"] S1 --> IDX["메인 인덱스 DB 시트\n(record_key~recurrence)"] S1 --> CAT["카테고리 관리 시트"] S1 --> TMP["Pending 대기 시트"] S2 --> FILE["첨부 파일 저장 폴더"] S3 --> EVENT["캘린더 이벤트\n(시간 지정 / 하루종일 / 날짜범위)"]

AI 모델 연계 구조

모든 입력 타입에 gpt-4o-mini 단일 모델을 사용합니다. 모델을 통일함으로써 날짜 계산 정확도와 지시문 준수율을 높였습니다. 프롬프트에는 오늘 날짜 기준으로 이번주/다음주 날짜를 미리 계산한 빠른참조 테이블이 포함됩니다.

flowchart LR INPUT["원본 입력\n텍스트·이미지·PDF·URL"] --> ROUTER["gpt-4o-mini\n입력 타입별 프롬프트 구성"] ROUTER --> O1["텍스트 분석\n분류·요약·날짜·시간 추출"] ROUTER --> O2["Vision / PDF 분석\n파일 내용 이해 + 구조화"] O1 --> JSON["표준 JSON\ntitle, L1, L2, entities\ndue_date, start_date, start_time\nend_time, summary, recurrence"] O2 --> JSON JSON --> VALIDATE["카테고리 검증·중복 체크"] VALIDATE --> SAVE["저장·Calendar·응답 자동화"]

빠른참조 테이블 — 날짜 오류 방지 핵심

프롬프트 첫 줄에 오늘=2026-06-14, 이번주 토=2026-06-14, 다음주 화=2026-06-16... 식으로 모든 요일을 실제 날짜로 미리 계산해 주입합니다. AI는 직접 날짜를 계산하지 않고 이 테이블에서 복사만 합니다. gpt-4.1-nano에서 발생하던 날짜 off-by-one 오류가 이 방법으로 해결되었습니다.

핵심 설계 포인트

01

채팅을 입력 폼으로 사용

복잡한 UI 없이 평소 쓰는 메신저를 자동화의 시작점으로 만들었습니다.

02

AI 결과를 데이터화

AI 답변을 문장으로 끝내지 않고, 후속 처리 가능한 JSON 구조로 변환합니다.

03

확인 필요한 자동화

중복, 수정 후보, 새 카테고리는 버튼 선택을 거쳐 데이터 품질을 지킵니다.

04

서버 상시 가동

Oracle Cloud Always Free VM으로 로컬 PC 의존 없이 24시간 자동화가 동작합니다.

05

mTLS 단말 인증

관리 화면은 클라이언트 인증서 설치 단말만 접근 가능. Telegram 봇은 개방 유지.

06

일정 특화 분석

title suffix, summary 고정 양식, Calendar 3가지 모드를 통해 일정 데이터 품질을 높였습니다.

핵심 구현 패턴

P

Pending 패턴

파일만 먼저 오고 설명이 나중에 오는 경우, 임시 저장소에 상태를 남겨 두 메시지를 하나의 기록으로 합칩니다.

V

검증 가능한 AI

AI의 분류 결과를 바로 저장하지 않고 카테고리 목록, 중복 후보, 사용자 버튼 확인을 거칩니다.

R

빠른참조 프롬프트

날짜 계산을 AI에게 맡기지 않고, 오늘 기준 모든 요일의 날짜를 프롬프트에 미리 주입해 오류를 방지합니다.

결과적으로 가능한 일

개인용 정보 수집함 + AI 분류기 + 일정 자동화 실행기를 하나로 묶은 시스템

이 시스템은 단순한 챗봇이 아니라, 사용자가 보낸 정보를 이해하고, 저장 가능한 형태로 정리하고, 일정이면 캘린더까지 자동으로 연결하는 개인 운영 도구입니다. Oracle Cloud 서버에서 상시 가동되고, mTLS로 보안이 유지됩니다.

메모 저장 이미지 분석 PDF/문서 정리 링크 보관 자동 카테고리화 중복 확인 조회 수정 삭제 파일 저장 📅 Calendar 자동등록 🔖 예약필요 알림 🔁 반복 일정 감지 ⏰ 시간 범위 등록 📋 summary 정형화 🔐 mTLS 단말 보안 ☁️ 오라클 클라우드 상시가동