05-infrastructure-falkordb
Dec 7, 2025
FalkorDB 연결 및 설정
코드:
lib/graph/config.ts,lib/graph/client.ts
왜 FalkorDB인가?
선택 이유
Redis 프로토콜 호환: 기존 Redis 인프라/도구 활용 가능
Cypher 쿼리 지원: Neo4j와 동일한 쿼리 언어
벡터 인덱스 내장: 별도 벡터 DB 없이 임베딩 검색 가능
경량화: Neo4j 대비 리소스 사용량 적음
오픈소스: MIT 라이센스
고려했던 대안
DB | 장점 | 단점 | 선택하지 않은 이유 |
|---|---|---|---|
Neo4j | 성숙한 생태계, 강력한 쿼리 | 무거움, 라이센스 비용 | 리소스 과다 |
DGraph | 분산 처리 | 학습 곡선 | 단일 노드에서 오버킬 |
Memgraph | 실시간 스트리밍 | 커뮤니티 작음 | 문서/예제 부족 |
설계 결정
1. 싱글톤 패턴
왜?
Next.js의 Hot Module Reload(HMR)에서 모듈이 다시 로드될 때마다 새 연결 생성 방지
global객체는 HMR에서도 유지됨
대안: 매번 새 연결
장점: 코드 단순
단점: 연결 풀 고갈, 성능 저하
선택하지 않음: 실제 운영에서 문제 발생
2. Lazy Connection
왜?
앱 시작 시간 단축 (DB 연결 대기 없음)
DB가 다운되어 있어도 앱은 시작 가능
실제 쿼리 필요 시점까지 연결 지연
대안: import 시 즉시 연결
장점: 시작 시점에 연결 오류 감지
단점: 앱 시작 지연, 불필요한 연결
선택하지 않음: 서버리스 환경에서 Cold Start 영향
3. 지수 백오프 재연결
왜?
일시적 네트워크 오류 복구
DB 재시작 시 자동 복구
급격한 재시도로 인한 부하 방지
사용 예시
기본 쿼리
읽기 전용 쿼리
연결 상태 확인
환경 변수
변수 | 기본값 | 설명 |
|---|---|---|
|
| 호스트 |
|
| 포트 |
| (없음) | 인증 비밀번호 |
|
| 그래프 이름 |
|
| 연결 타임아웃 (ms) |
|
| 최대 재시도 횟수 |
|
| 재시도 간격 (ms) |
운영 가이드
Docker로 실행
데이터 백업
모니터링
다음 문서
노드 스키마 - MemoryNode 등 노드 타입 정의
관계 타입 - 노드 간 관계 정의