10주차 주간보고서
10주차 주간보고서
1. 개요 (Objective)
본 주차에는 AonBot이 게임 내 시간 기반 이벤트(보스 리젠, 정기 콘텐츠 등)를 오차 없이 처리하기 위해 구축한 백엔드 스케줄러(Scheduler) 시스템을 분석함. 또한, 서버 리소스 낭비를 막기 위해 디스코드 음성 채널 접속을 배제하고, Socket.io와 브라우저 TTS(Text-to-Speech)를 결합한 혁신적인 실시간 알림 아키텍처를 문서화함.
2. 주요 수행 내용 (Task Accomplishments)
가. 용도별 다중 스케줄러(Multi-Scheduler) 분리
단일 루프로 인한 병목 현상을 방지하기 위해 역할을 3개의 독립적인 스케줄러로 분리하여 구동함.
- boss-scheduler.js: 매분마다 MongoDB의 BossTimer를 조회하여 리젠 30분/15분/10분/0분 전 알림을 트리거함.
- content-scheduler.js: 아이온2의 정기 이벤트(카이라, 어비스 아티팩트, 시공의 균열 등) 시간을 Cron Job으로 등록하여 정확한 KST(한국 표준시) 기준 알림 전송.
- scheduler.js (News Crawler): 5분 주기로 PlayNC 공식 API를 크롤링하여 신규 공지사항을 감지하고, 도배 방지 로직(최초 1회 저장 시 알림 생략)을 적용함.
나. Socket.io 기반 클라이언트 사이드 TTS 아키텍처 구현

- 문제 인식: 봇이 디스코드 음성 채널에 직접 접속하여 오디오를 스트리밍할 경우, 트래픽 비용 증가 및 서버(Linode 1Core) 과부하가 발생함.
- 기술적 해결: 서버는 global.sendVoiceAlert(data)를 통해 Socket.io 이벤트(신호)만 발생시킴.
- Web Speech API 연동: 사용자가 띄워둔 웹 대시보드(/alerts 경로)에서 Socket 신호를 수신한 뒤, 클라이언트(브라우저)의 리소스를 활용하여 직접 TTS 음성을 출력하도록 분산 처리함.
3. 기술적 성과 (Technical Achievements)
- 서버 리소스 최적화: 오디오 인코딩 및 스트리밍 부하를 클라이언트 브라우저로 완전히 전가(Offloading)하여 저사양 VPS 환경에서도 무중단 서비스를 유지하는 아키텍처를 증명함.
- 실시간 양방향 통신 구현: HTTP의 단방향 통신 한계를 넘어, 웹소켓(Socket.io)을 통해 백엔드(Node.js)와 프론트엔드(EJS Dashboard) 간의 지연 없는 데이터 파이프라인을 구축함.