# Event Cozyon 이벤트 포스팅봇 개발계획서
- 문서 버전: 1.0
- 작성일: 2026-09-16
- 관리 시스템: ZALNAS 관리자
- 발행 대상: https://event.cozyon.kr
1. 개발 목적
ZALNAS 관리자에서 콘서트, 공연, 행사, 지역축제 정보를 수집하고 ChatGPT 계정을 이용해 게시글을 작성·검수한 뒤, 기존 Event Cozyon 게시판에 안전하게 발행하는 자동화 시스템을 구축한다.
목표는 단순히 많은 글을 생성하는 것이 아니라 다음 조건을 만족하는 행사 전문 콘텐츠를 지속적으로 축적하는 것이다.
- 공식 출처를 근거로 한 정확한 행사 정보
- 중복되지 않는 자체 편집 콘텐츠
- 행사 변경, 취소, 종료 상태 관리
- 검색엔진과 Event 구조화 데이터에 적합한 정보
- 관리자가 출처와 초안을 비교하고 승인할 수 있는 발행 절차
- ChatGPT 사용량과 생성 성공률을 확인할 수 있는 운영 기록
Google AdSense 승인은 보장할 수 없으므로 자동 생성량보다 정보 정확성, 독창성, 출처, 업데이트 책임을 우선한다.
2. 현재 시스템을 반영한 개발 원칙
기존 계획서의 다음 항목은 현재 프로젝트와 맞지 않아 개발 범위에서 제외한다.
- 별도 BlogCore 플랫폼 신규 개발
- 보드게임 전문 블로그와 보드게임 DB
- 다중 사이트 구조
- WordPress, Blogger, 네이버 발행
- 자체 회원, 카테고리, 게시판 시스템 재개발
- 초기 단계의 이미지 자동 생성
- 게시글 URL 구조의 전면 변경
- OpenAI API 호출별 달러 비용 계산
Event Cozyon에는 게시판, 회원·관리자, canonical, sitemap, AdSense 기반과 Event 구조화 데이터 생성 기반이 이미 있으므로 기존 구조를 확장한다.
3. ChatGPT 계정 활용 방식
3.1 적용 방식
ChatGPT 웹사이트를 브라우저 자동화하거나 쿠키를 복제하지 않는다. 공식 Codex CLI에 ChatGPT 계정으로 로그인한 전용 작업자를 사용한다.
```text
ZALNAS 작업 대기열
↓
전용 비공개 작업자
↓
Codex CLI + ChatGPT 계정
↓
구조화된 행사 게시글 JSON
↓
ZALNAS 검수 화면
```
Codex CLI는 ChatGPT 계정 로그인과 구독 혜택 사용을 지원한다. `codex exec` 비대화형 실행과 JSON Schema 출력을 사용해 자동화 결과를 안정적으로 처리한다.
- ChatGPT 계정 인증: https://learn.chatgpt.com/docs/auth
- Codex 비대화형 실행: https://learn.chatgpt.com/docs/non-interactive-mode
- ChatGPT 서비스 계정: https://learn.chatgpt.com/docs/enterprise/service-accounts
예상 실행 형태:
```text
codex exec --ephemeral
--json
--output-schema event-post.schema.json
--output-last-message result.json
```
3.2 실행 환경
- 사용자의 ChatGPT 계정으로 로그인한 신뢰할 수 있는 전용 PC 또는 비공개 작업자에서 실행한다.
- 작업자는 ZALNAS에서 생성 대기 작업을 HTTPS로 가져온다.
- 행사 자료만 들어 있는 격리된 임시 디렉터리에서 실행한다.
- 기본 read-only sandbox를 사용한다.
- 저장소 소스, DB 비밀번호, 운영 SSH 키에는 접근하지 못하게 한다.
- 초기 동시 실행 수는 1개로 제한한다.
- 인증 만료 시 자동발행하지 않고 관리자 화면에 재로그인 필요 상태를 표시한다.
- ChatGPT 인증정보와 `auth.json`은 비밀번호와 같은 수준으로 보호하고 Git, DB, 로그에 저장하지 않는다.
향후 완전 무인 운영이 필요하고 지원되는 ChatGPT 워크스페이스를 사용한다면 개인 계정 대신 전용 서비스 계정과 만료 가능한 접근 토큰으로 전환한다.
3.3 사용량 표시
ChatGPT 계정 방식에서는 게시글별 정확한 달러 비용을 계산하지 않는다. 대신 다음 정보를 기록한다.
- 실행 횟수와 성공·실패 건수
- 입력, 캐시, 출력 토큰 수
- 실행 시간
- 사용 모델
- 재시도 횟수
- 계정 인증 상태
- 사용 제한 또는 일시적 오류
- 게시글 한 건당 평균 토큰과 평균 처리 시간
OpenAI API 비용 계산 기능은 MVP에서 제외한다.
4. 시스템 책임 분리
4.1 ZALNAS
- 관리자 메뉴와 작업 화면
- 출처 수집
- 행사 후보 정규화
- 중복 검사
- ChatGPT 생성 작업 대기열
- 프롬프트와 스타일 관리
- 초안과 검수 결과 저장
- 승인과 예약발행 명령
- 작업량, 토큰, 오류 통계
4.2 ChatGPT 전용 작업자
- 작업 대기열 조회
- Codex CLI 실행
- 구조화된 초안 생성
- 생성 결과와 사용량 반환
- 인증 만료와 실패 보고
4.3 Event Cozyon
- 인증된 내부 발행 API
- 최종 게시글과 행사 메타데이터 검증
- 게시판 글 저장
- Event 구조화 데이터 출력
- canonical, sitemap, 공개 페이지 제공
- 행사 변경, 취소, 종료 상태 반영
ZALNAS가 `event_cozyon` DB에 직접 접속하는 방식은 사용하지 않는다.
5. ZALNAS 관리자 메뉴
```text
이벤트 포스팅봇
├─ 대시보드
├─ 행사 후보
├─ 글 생성
├─ 검수·발행
├─ 작업 이력
└─ 설정
```
5.1 대시보드
- 수집된 행사 후보
- 생성 대기, 진행, 실패 작업
- 검수 대기 글
- 예약과 발행 글
- 중복과 취소 감지
- 오늘과 이번 달 실행량
- 평균 토큰과 처리 시간
- 작업자 및 ChatGPT 인증 상태
5.2 행사 후보
- 수집 출처
- 행사명, 지역, 기간, 장소
- 공식 URL과 확인일
- 중복 가능성
- 정보 누락 경고
- 글 생성 대상 선택
5.3 글 생성
- 행사 후보 선택
- 콘텐츠 유형 선택
- 강조할 검색 의도
- 지역과 대상 독자
- 목표 분량
- 생성 실행과 재생성
5.4 검수·발행
- 원문 출처와 AI 초안을 나란히 표시
- 사실 필드 비교
- 누락과 불일치 경고
- 본문 수동 편집
- 승인, 보류, 폐기
- 즉시발행 또는 예약발행
5.5 작업 이력
- 입력 자료
- 프롬프트 버전
- 생성 결과
- 토큰 사용량
- 오류와 재시도
- 검수자와 승인 시간
- Event Cozyon 발행 결과
5.6 설정
- 정보 출처
- 대상 게시판과 카테고리
- 글 유형별 스타일
- 필수 행사 필드
- 생성과 검수 프롬프트
- 자동 수집 일정
- 작업자 상태
- 발행 API 연결 상태
6. 콘텐츠 생성 절차
기존 계획의 여러 Agent를 각각 호출하면 사용량과 실패 지점이 불필요하게 증가한다. MVP는 다음 4단계로 단순화한다.
```text
행사 수집·정규화
↓
사실 추출·출처 정리
↓
본문·SEO 통합 작성
↓
품질검사·관리자 승인
```
6.1 행사 수집과 정규화
- 공식 행사 페이지를 우선한다.
- 주최기관, 지자체, 공식 예매처 자료를 사용한다.
- 제목, 일정, 장소, 주최자를 표준 형식으로 변환한다.
- 외부 행사 ID와 내용 지문으로 중복을 확인한다.
- 이용조건과 robots 정책을 확인한 출처만 자동 수집한다.
6.2 사실 추출
ChatGPT 출력은 JSON Schema로 제한한다.
필수 필드:
- 행사명과 행사 유형
- 시작·종료 일시와 시간대
- 공연 회차
- 장소명과 주소
- 지역
- 가격
- 예매·참여 방법
- 관람 연령
- 주최·주관
- 문의처
- 공식 URL
- 확인일
- 행사 상태
- 근거 출처
확인되지 않은 값은 추정하지 않고 `정보 확인 필요`로 반환한다.
6.3 본문과 SEO 작성
- 요약
- 행사 핵심 정보표
- 행사 소개
- 주요 프로그램 또는 출연진
- 일정, 장소, 교통
- 가격과 예매 방법
- 방문 전 확인사항
- 공식 출처와 마지막 확인일
- FAQ
- meta description
- 관련 지역과 카테고리
키워드 반복 횟수를 고정하지 않고 자연스러운 검색 의도 충족을 기준으로 한다.
6.4 품질검사
- 공식 출처 존재 여부
- 제목, 일시, 장소 불일치
- 종료되거나 취소된 행사 여부
- 확인되지 않은 출연진, 가격, 프로그램
- 기존 글과 중복
- 과장과 광고성 문구
- 출처 문장 과다 복제
- 개인정보나 내부 정보 포함
- 금지 태그와 스크립트 포함
- 필수 필드 누락
MVP에서는 품질점수와 관계없이 관리자 승인 전 자동발행하지 않는다.
7. 데이터 구조
7.1 ZALNAS 신규 테이블
- `event_bot_sources`: 수집 출처와 정책
- `event_bot_items`: 정규화된 행사 후보
- `event_bot_jobs`: 생성 작업과 상태
- `event_bot_drafts`: 본문, SEO, 검수 결과와 버전
- `event_bot_usage_logs`: 실행, 토큰, 모델, 시간, 오류
- `event_bot_publications`: 발행 요청과 결과
7.2 Event Cozyon 신규 테이블
공용 게시판 테이블을 과도하게 변경하지 않고 `event_article_meta` 메타테이블을 추가한다.
- `article_no`
- `source_event_key`
- `event_type`
- `start_at`, `end_at`, `timezone`
- `venue_name`, `address`, `region`
- `price_text`
- `booking_url`, `official_url`
- `organizer`, `contact`
- `event_status`
- `verified_at`
- `seo_description`
- `source_payload`
- `content_hash`
- `idempotency_key`
게시판 제목, 본문, 카테고리는 기존 `board_data`에 저장하고 행사 전용 정보만 메타테이블에 분리한다.
8. Event Cozyon 발행 API
예상 내부 API:
```text
POST /internal-api/v1/event-posts
PATCH /internal-api/v1/event-posts/{articleNo}
POST /internal-api/v1/event-posts/{articleNo}/cancel
GET /internal-api/v1/capabilities
```
보안 조건:
- HMAC 서명
- 요청 시간과 nonce 검증
- 재전송 방지
- 멱등키 필수
- 요청 크기 제한
- HTML 허용목록 정제
- 요청과 응답 감사 로그
- API 비밀값은 ignored 설정에서만 관리
동일 멱등키가 반복되면 새 글을 만들지 않고 기존 발행 결과를 반환한다.
9. 이미지 정책
MVP에서는 AI 이미지 자동 생성을 제외한다.
우선순위:
1. 사용 권한이 확인된 공식 포스터
2. 주최기관이 배포한 홍보 이미지
3. 직접 제작하거나 라이선스가 명확한 공용 이미지
4. 이미지가 불확실하면 텍스트 콘텐츠만 발행
외부 이미지를 무단 복사하거나 행사 포스터와 유사한 AI 이미지를 생성하지 않는다. 이미지마다 출처, 라이선스, 원본 URL을 기록한다.
10. MVP 범위
10.1 포함 기능
- ZALNAS 이벤트 포스팅봇 메뉴
- 수동 URL 등록과 행사 후보 관리
- 중복 검사
- ChatGPT 계정 기반 Codex 작업자
- 구조화된 행사 정보와 게시글 생성
- 관리자 검수와 수정
- Event Cozyon 내부 발행 API
- 즉시발행
- 발행 이력
- 행사 메타데이터와 Event JSON-LD 연결
- 토큰, 실행시간, 오류 통계
10.2 제외 기능
- 승인 없는 완전 자동발행
- 광범위한 사이트 무단 크롤링
- AI 이미지 생성
- 외부 블로그 동시 발행
- 다중 사이트
- 게시판 URL 구조 전면 변경
- 광고수익과 게시글 비용의 자동 손익 계산
- ChatGPT 웹 브라우저 자동 조작
11. 단계별 개발 순서
### 0단계: 선행 확인
- Event Cozyon 실제 게시판 ID, 카테고리, 작성자 확정
- 개발과 운영 DB 스키마 확인
- 현재 SEO 개선 사항 운영 검증
- 행사 정보 필수 필드와 출처 정책 확정
- 사용할 ChatGPT 계정 유형 확인
### 1단계: 계약과 데이터 기반
- 발행 JSON Schema 작성
- DB 마이그레이션과 복구 스크립트 작성
- 멱등성과 중복 판정 규칙 구현
- 프롬프트와 결과 버전 규칙 작성
### 2단계: Event Cozyon 발행 기능
- 내부 발행 API
- 행사 메타 저장
- 게시판 글과 메타의 트랜잭션 처리
- Event JSON-LD 실제 데이터 연결
- 업데이트와 취소 처리
Event Cozyon은 현재 프로젝트 규칙에 따라 검증과 Push 후 별도 승인으로 수동 운영 배포한다.
### 3단계: ZALNAS 관리자
- 메뉴, 라우트, 권한
- 대시보드
- 행사 후보와 글 생성
- 검수와 발행
- 작업 이력과 설정
ZALNAS는 `main` Push 후 검증을 거쳐 운영에 자동 배포된다.
### 4단계: ChatGPT 작업자
- ChatGPT 계정 로그인
- 작업 polling
- 격리 디렉터리 생성
- `codex exec` 실행
- JSON Schema 검증
- 결과와 사용량 반환
- 인증 만료, 재시도, 시간 초과 처리
### 5단계: 통합 검증
- 로컬 양쪽 사이트 연결
- 동일 행사 중복발행 방지
- 수정과 취소 동기화
- 악성 HTML 차단
- 작업자 중단과 인증 만료 복구
- sitemap과 상세 페이지 확인
- Event 구조화 데이터 검증
### 6단계: 제한적 운영
- 관리자 승인 방식으로 최소 20건 시험
- 오류와 수정률 분석
- 출처별 품질 평가
- 프롬프트 보정
- 안정화 후 예약발행 검토
완전 자동발행은 별도 승인 단계로 남긴다.
12. 테스트 계획
### 12.1 ZALNAS
- 관리자 권한과 메뉴 접근 테스트
- 작업 상태 전이 테스트
- 중복 판정 테스트
- JSON Schema 유효성 테스트
- ChatGPT 작업자 중단과 인증 만료 테스트
- 재시도와 시간 초과 테스트
### 12.2 Event Cozyon
- 발행 API 인증과 재전송 방지 테스트
- 동일 멱등키 중복 요청 테스트
- 게시판 글과 메타 트랜잭션 테스트
- 악성 HTML과 허용되지 않은 URL 차단 테스트
- Event JSON-LD 테스트
- sitemap과 canonical 회귀 테스트
### 12.3 통합
- 후보 등록부터 관리자 승인과 공개까지 전체 흐름
- 취소된 행사의 기존 게시글 갱신
- 발행 응답 유실 후 재시도
- 작업자 재로그인 후 대기 작업 재개
- 운영 배포 후 공개 URL smoke
13. 보안과 운영 원칙
- ChatGPT 인증정보를 웹서버나 DB에 저장하지 않는다.
- 작업자는 행사 자료만 볼 수 있는 격리 환경에서 실행한다.
- ZALNAS와 Event Cozyon은 서로의 DB 계정을 공유하지 않는다.
- 발행 API는 서명, nonce, 만료시간, 멱등키를 검증한다.
- 모든 외부 HTML은 정제 후 저장한다.
- 프롬프트와 응답에 DB 비밀번호, 토큰, 개인정보를 포함하지 않는다.
- 자동 수집기는 출처별 이용조건과 호출 제한을 준수한다.
- DB 마이그레이션 전에는 환경별 백업과 복구 검증을 수행한다.
14. 완료 기준
- 출처 없는 글은 생성 완료 상태가 되지 않는다.
- 동일 행사가 중복 발행되지 않는다.
- 관리자 승인 전 공개되지 않는다.
- 발행 재시도로 중복 게시물이 생기지 않는다.
- 행사 변경과 취소가 기존 글에 반영된다.
- 필수 행사 정보와 출처가 공개 화면에 표시된다.
- Event JSON-LD와 화면 내용이 일치한다.
- 작업자 인증 만료 시 안전하게 중지된다.
- ZALNAS에서 Event Cozyon DB로 직접 접속하지 않는다.
- 비밀값이 Git, 로그, 게시글에 노출되지 않는다.
- 두 저장소의 관련 Harness와 로컬 통합 테스트가 통과한다.
15. 최종 권장안
초기 MVP는 개인 ChatGPT 계정으로 로그인한 신뢰 작업자와 관리자 승인 발행 방식으로 구축한다.
충분한 시험 게시글을 통해 정확성, 수정률, 중복률, 작업 안정성을 확인한 뒤 예약발행을 활성화한다. 완전 무인 운영이 필요해지는 시점에는 지원되는 ChatGPT 워크스페이스 서비스 계정으로 전환한다.
개발과 배포는 두 프로젝트의 책임을 분리해 다음 순서로 진행한다.
```text
Event Cozyon 발행 API와 행사 메타 기반 구축
↓
Event Cozyon 검증, Push, 승인 후 수동 운영 배포
↓
ZALNAS 관리자와 ChatGPT 작업자 구축
↓
ZALNAS 검증과 main Push 후 자동 운영 배포
↓
양쪽 운영 환경 통합 smoke와 제한적 운영
```


