대표 프로젝트
Conoti (코노티) — AI 공지 자동화 앱 · MCP 연동
운영자↔AI 채팅으로 맞춤 공지를 자동 작성 · 예약 발송하고 외부 AI까지 MCP로 연동하는 공지 자동화 앱 — 앱 · 백엔드 · AI · 인프라 1인 모노레포
- Flutter
- Dart
- Riverpod
- FastAPI
- PostgreSQL
- MCP
- OpenAI
- APScheduler
- FCM
- RevenueCat
- Docker
- 11개 기능 모듈
- 99개 API 라우트
- 30+ DB 테이블
- 48개 Flutter 화면
- 140 통과 백엔드 테스트
개요
Conoti(코노티)는 강사 · 학원 · 동호회 같은 모임 운영자를 위한 AI 공지 자동화 앱입니다. 참여자는 수신 전용(인앱 채팅 없음)이고, 운영자는 AI와 대화하는 것만으로 맞춤 공지를 만들어 예약 · 반복 발송할 수 있습니다.
Flutter 앱, FastAPI 백엔드, 커스텀 MCP 서버, 배포 산출물까지 하나의 모노레포로 기획(Phase 0 스펙)부터 구현 · 통합 · 배포까지 1인으로 완성한 v1.0.0 프로젝트입니다.
핵심은 AI 공지 자동화 파이프라인과 MCP 이중 경로 설계로, 내부 앱 AI뿐 아니라 ChatGPT · Claude 같은 외부 AI도 권한 제한 하에 같은 도구를 호출할 수 있게 했습니다.
아키텍처 · 데이터 흐름
- 대화 — 운영자가 AI와 멀티턴 대화로 공지 내용을 다듬음 (구조화 출력으로 제목 · 본문 · 일정 · 반복규칙 생성)
- 확인 — "등록" 시 서버가 단일 사용 · 페이로드 해시된 확인 토큰을 발급해 오발송을 방지
- 등록 — 앱이 MCP 도구(예약/반복 공지 생성)를 호출, MCP가 토큰 · 권한을 재검증 후 공지 생성
- 스케줄 — APScheduler가 예약 · 반복 공지를 폴링해 발송 시점을 판단 (타임존 인식)
- 발송 — FCM로 참여자에게 푸시, 3중 방어(flock · 상태 CAS · 멱등키)로 중복 발송 차단
- 연동 — 상위 플랜은 외부 AI(ChatGPT · Claude)가 발급 인증키로 같은 도구를 호출, 호출 이력을 감사
모바일 앱 (Flutter)
48화면, 순수 Riverpod(코드젠 미사용) · go_router. 우드톤 공지 게시판 UI에 OAuth 로그인 · 푸시 · 구독 결제를 통합.
API 서버 (FastAPI)
11개 기능 모듈 · 99 라우트, SQLAlchemy 2.0 + PostgreSQL(30+ 테이블). pytest 140개 통과, SQLite↔PostgreSQL 호환.
AI 대화 · 공지 생성
구조화 출력(JSON 스키마)으로 공지 초안을 생성하고, 확인 토큰 게이트를 거쳐 등록. 요청 · 토큰 · 비용을 분리 기록.
커스텀 MCP 서버
내부(서비스 토큰) · 외부(발급 인증키) 이중 경로. 공지 초안 · 예약 · 반복 · 발송 도구를 방 · 도구 단위 범위 제한과 감사 로그로 노출.
스케줄러 (APScheduler)
인프로세스 단일 인스턴스(파일락), 예약 · 반복 공지를 타임존 인식으로 발송. Redis 없이 가볍게 운영.
구독 · 결제 (RevenueCat)
4티어(Free/Basic/AI Pro/Professional) 플랜을 서버측 엔타이틀먼트로 게이팅, 애플 · 구글 영수증 검증.
AI 활용
AI 공지 자동 등록
운영자↔AI 멀티턴 대화로 공지를 다듬고, 구조화 출력으로 제목 · 본문 · 일정 · 반복규칙을 받아 확인 게이트 후 자동 등록.
MCP 이중 경로 설계
내부 앱 AI는 서비스 토큰으로, 외부 AI(ChatGPT · Claude)는 발급 인증키로 같은 도구를 호출. 방 · 도구 단위 범위 제한 · 회전 · 폐기 · 감사.
확인 토큰 안전장치
실제 등록 직전 단일 사용 · 시간 제한 · 페이로드 해시된 확인 토큰을 발급해 AI 오작동 · 오발송을 구조적으로 차단.
구조화 출력 + 프롬프트 캐싱
JSON 스키마 강제 출력으로 파싱을 안정화하고, 시스템 프롬프트 캐싱으로 입력 토큰 비용을 절감.
비용 관측 · 공정 사용
사용자 노출 예산/게이지 없이, 호출별 토큰 · 비용을 기록하고 레이트리밋 · 일 · 월 소프트캡으로 공정 사용을 관리.
캘린더 연동 (선택)
상위 플랜은 개인 일정 리마인더를 외부 캘린더와 연동(선택)하고, 강사 개인 맞춤 공지 모듈을 제공.
서비스 자동화 · 운영
예약 · 반복 공지
APScheduler가 규칙 기반(일 · 주 · 월) 반복과 고정 시각 예약을 타임존 인식으로 처리, 템플릿 제목 · 본문 지원.
중복 발송 3중 방어
flock(단일 인스턴스) + 상태 CAS(원자적 전이) + 멱등키(UNIQUE)로 동일 공지의 중복 푸시를 구조적으로 차단.
푸시 발송 (FCM)
Firebase Cloud Messaging로 참여자에게 배치 발송, 디바이스 토큰 등록 · 플랫폼 추적과 재시도 처리.
엔타이틀먼트 게이팅
구독 상태를 항상 서버측에서 재확인하고 플랜별 기능을 미들웨어로 게이팅 (JWT 클레임은 UX 힌트로만 사용).
데이터 보존 정리
무료 1개월 · 유료 1년 보존정책에 따라 만료 · 소프트삭제 레코드를 백그라운드로 정리.
배포 산출물
도커 컴포즈 · 리버스프록시 · systemd · 백업 스크립트를 산출물로 정리, 공유 호스트→전용 VM 분리를 한 번의 덤프/복구로 수행하도록 설계.
기술 스택
모바일
- Flutter
- Dart
- Riverpod
- go_router
- dio
- FCM
백엔드
- FastAPI
- SQLAlchemy 2.0
- PostgreSQL(psycopg3)
- APScheduler
- Gunicorn
AI / MCP
- OpenAI
- MCP 서버
- 구조화 출력
- 프롬프트 캐싱
- 확인 토큰
인증 · 결제
- OAuth(구글 · 애플 · 카카오)
- RevenueCat
- JWT · 세션
인프라 · 운영
- Docker Compose
- Caddy
- systemd
- pg_dump 백업
핵심 역할 · 성과
- 기획(Phase 0 스펙) · 앱 · 백엔드 · AI · 인프라까지 모노레포 전체를 1인으로 설계 · 구현 · 통합
- 운영자↔AI 채팅 → 구조화 출력 → 확인 토큰 → MCP 등록으로 이어지는 안전한 AI 공지 자동화 파이프라인 구현
- 커스텀 MCP 이중 경로로 외부 AI(ChatGPT · Claude)까지 권한 · 감사 제어 하에 도구 연동
- pytest 140 통과 · flutter analyze 0 이슈로 품질을 확보하고 v1.0.0 통합 릴리스까지 완료