데이터베이스 연동
외부 클라우드 DB 연동 가이드
Supabase, MongoDB Atlas 등 외부 클라우드 DB와의 연동 방법 및 방화벽 설정 요령을 안내합니다.
대규모 서비스를 운영하거나 여러 대의 봇 또는 웹 대시보드와 데이터를 공유해야 하는 경우, 컨테이너 내부에 파일을 두는 대신 외부 클라우드 데이터베이스(SaaS)를 연동하는 것이 관리와 확장성 면에서 유리합니다.
1. 외부 DB의 장점 및 추천 서비스
- 스토리지 분리: 봇 호스팅 컨테이너의 상태 변경과 무관하게 데이터가 원격 클라우드에 안전하게 보존됩니다.
- 다중 인스턴스 연동: 하나의 데이터베이스에 여러 대의 봇과 웹사이트가 동시에 접근할 수 있습니다.
- 추천 플랫폼:
- Supabase (PostgreSQL): 무료 티어로 관계형 DB를 손쉽게 구축할 수 있으며 REST API와 실시간 소켓 구독 기능을 제공합니다.
- MongoDB Atlas (NoSQL): 유연한 문서(Document) 기반 데이터 처리에 적합하며 무료 클러스터를 제공합니다.
- Firebase / Firestore: 실시간 데이터 동기화가 필요한 소형 키-값 저장소로 유용합니다.
2. 방화벽 IP 허용 설정 (0.0.0.0/0)
대부분의 클라우드 데이터베이스 서비스는 보안을 위해 IP 화이트리스트 방화벽을 기본으로 적용하고 있습니다.
중요
모든 IP 허용 설정이 필요합니다.
디스호스트의 컨테이너 인프라는 로드밸런싱 및 분산 노드 환경에서 동작하므로, 봇이 재부팅되거나 노드가 변경될 때 외부 아웃바운드 IP가 유동적으로 달라질 수 있습니다.
따라서 특정 단일 IP만 방화벽에 등록하면 재시작 후 DB 연결이 차단될 수 있습니다. 원활한 연결을 위해 DB 콘솔의 방화벽(Network Access) 설정에서 모든 연결 허용(0.0.0.0/0)을 추가해 주세요.
3. Node.js (MongoDB Atlas) 연동 예제
환경 변수 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) 연동 예제
Python 환경에서 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