8주차 주간보고서
8주차 주간보고서
1. 개요 (Objective)
본 주차에는 AonBot의 핵심 두뇌 역할을 하는 MongoDB의 데이터 모델을 분석함. 관계형 데이터베이스(RDB)의 제약을 벗어나 게임 데이터의 특성에 최적화된 Document 기반 스키마를 설계하고, 클라우드 환경(MongoDB Atlas)에서의 효율적인 데이터 관리 체계를 문서화함.
2. 주요 수행 내용 (Task Accomplishments)
가. 클라우드 DB 인프라 및 보안 (Cloud DB & Security)
- Atlas Cloud 활용: Linode 메인 서버의 I/O 부하를 줄이기 위해 Managed Service인 MongoDB Atlas를 도입.
- 보안 환경 구축:
.env환경 변수를 통해 MONGODB_URI를 분리 관리하여 소스 코드 내 인증 정보 노출을 차단함.
나. 주요 데이터 모델링 분석 (Data Modeling)
CLAUDE.md에 명시된 핵심 모델들을 바탕으로 데이터 구조를 체계화함:

- guildId (String, Required):
- 설명: 봇이 설치된 디스코드 서버의 고유 식별 번호입니다.
- 역할: AonBot은 멀티 서버를 지원하므로, 각 서버(길드)마다 독립적인 보스 타이머를 가질 수 있도록 구분해 주는 핵심 키입니다.
- channelId (String, Required):
- 설명: 보스 알림(30분 전, 15분 전 등)이 실제로 출력될 디스코드 채널의 ID입니다.
- 역할: 유저가 /설정 등을 통해 지정한 특정 채널로만 정확히 메시지를 보내기 위해 저장합니다.
- bossName (String, Required):
- 설명: 추적 대상인 보스의 이름입니다. (예: 카이라, 나흐마 등)
- 역할: 어떤 보스의 시간이 제보되었는지 식별하며, 나중에 유저가 “카이라 언제 나와?”라고 물었을 때 DB에서 검색하는 기준이 됩니다.
- serverName (String, Default: ‘통합’):
- 설명: 아이온2의 게임 서버 명칭입니다.
- 역할: 같은 보스라도 게임 서버(천족, 마족 또는 각 리전 서버)마다 등장 시간이 다르기 때문에, 이를 혼동하지 않도록 서버별로 데이터를 분리하여 관리합니다.
- BossTimer (핵심 모델): * 보스별 리젠 타임을 관리하며, guildId + bossName + serverName을 조합한 복합 유니크 인덱스(Compound Unique Index)를 설정하여 데이터 중복 및 알림 오류를 원천 차단함.
- GuildConfig: 서버별 커스텀 설정(인증 채널, 로그 채널, 역할 ID 등)을 JSON 형태로 저장하여 서버별 독립적인 운영 환경 구축.
- MainCharacter & PartyMember: 유저의 캐릭터 인증 상태(isVerified)와 파티 모집 멤버 정보를 유연하게 관리하여 실시간 커뮤니티 기능 지원.
다. NoSQL 설계의 기술적 장점 (Technical Insights)
- Schema-less 특성 활용: 게임 업데이트에 따라 수시로 변하는 보스 데이터 및 이벤트 항목에 대응하기 위해 고정된 테이블 구조가 아닌 가변적인 Document 구조를 채택함.
- Data Mapping 효율화: Node.js 기반 봇 엔진과 데이터 형식이 동일(JSON)하여, 별도의 변환 레이어 없이 빠른 데이터 처리 속도를 확보함.
3. 기술적 성과 (Technical Achievements)
- 데이터 무결성 확보: 중복 제보나 잘못된 서버 정보 입력을 방지하기 위한 DB 레벨의 제약 조건(Unique Index) 적용 역량 증명.
- 확장성 있는 아키텍처: 향후 새로운 게임 컨텐츠(예: 시공의 균열 등) 추가 시 DB 구조 변경 없이 필드를 확장할 수 있는 NoSQL의 장점을 극대화함.