데이터베이스 연동
외부 클라우드 DB 연동 가이드
봇 컨테이너 외부의 Supabase, MongoDB Atlas 등의 클라우드 DB 연동법과 디스호스트 IP 대역 차단 방지를 위한 방화벽 설정 요령을 안내합니다.
대규모 디스코드 서비스를 설계 중이거나, 여러 웹 대시보드와 데이터를 상호 공유해야 한다면, 컨테이너 내부에 DB를 두기보다 외부 전문 클라우드 데이터베이스 서비스(SaaS)로 연결을 돌리는 것이 관리와 백업 측면에서 훨씬 탁월합니다.
1. 외부 DB 사용의 이점 및 추천 서비스
- 스토리지 보존: 봇 호스팅 컨테이너가 폭파되거나 초기화되어도 사용자의 모든 재화 데이터는 물리 데이터베이스 원격 서버에 격리 보관되어 완전히 안전합니다.
- 쉬운 다중 인스턴스 연동: 하나의 DB를 공유하는 로드밸런싱 클러스터 구조로 여러 대의 봇을 동시에 안전 가동할 수 있습니다.
- 추천 플랫폼:
- Supabase (PostgreSQL): 무료 티어로 관계형 DB 구축 가능. REST API 및 실시간 소켓 통신 모듈 지원.
- MongoDB Atlas (NoSQL): 스키마가 필요 없는 자유로운 문서 기반 데이터 수집에 용이하며 무료 샌드박스 제공.
- Firebase / Firestore: 실시간 동기화가 필요한 소형 키-값 저장소에 유리.
2. 외부 방화벽 IP 허용 (Fact check: Allow All IPs)
대부분의 클라우드 데이터베이스 플랫폼은 비인가 접속자를 원천 차단하기 위해 방화벽(IP Whitelist) 시스템을 디폴트로 활성화해 둡니다.
중요
모든 IP 대역 접속 허용 세팅이 필수적입니다. 디스호스트의 컨테이너 구동 머신 노드들은 로드밸런싱 라우터 가상화 기법을 사용하므로, 봇을 재기동하거나 다른 노드로 컨테이너가 마이그레이션될 때 컨테이너 외부 출력 IP 주소가 유동적으로 변합니다. 따라서 특정 고정 IP 주소 하나만 DB 방화벽 화이트리스트에 올릴 경우, 봇이 재기동된 후 DB 커넥션 제한 에러를 발생시키게 됩니다. 원활한 연결을 위해 DB 콘솔의 방화벽 설정 항목에서 아래와 같이 모든 연결 허용 주소를 추가해 주시기 바랍니다:
0.0.0.0/03. Node.js (MongoDB Atlas) 연동 코드 명세
환경 변수에 DB 주소 문자열(DATABASE_URL)을 등록하고 안전하게 커넥션을 맺는 코드입니다.
const mongoose = require('mongoose');
const connectDB = async () => {
try {
// 환경변수 주소로 안전 연동 시도
await mongoose.connect(process.env.DATABASE_URL);
console.log('Log: 외부 MongoDB 데이터베이스 연결에 성공했습니다.');
} catch (err) {
console.error('Error: 데이터베이스 접속 중 치명적 에러 발생:', err.message);
process.exit(1);
}
};
connectDB();4. Python (Supabase/PostgreSQL) 연동 코드 명세
파이썬의 psycopg2-binary 라이브러리를 가동해 연동하는 구조입니다.
import os
import psycopg2
from dotenv import load_dotenv
load_dotenv()
def get_db_connection():
try:
conn = psycopg2.connect(os.getenv("DATABASE_URL"))
return conn
except Exception as e:
print(f"Error: PostgreSQL 원격 연결 실패: {e}")
return None