DocumentDB의 설치, 계정 생성과 보안, Next.js 연동 및 활용법
DocumentDB 개요 및 기술적 특징
DocumentDB는 리눅스 재단이 관리하는 오픈소스 문서형 데이터베이스 프로젝트로, PostgreSQL을 기반으로 개발되고 있으며 MongoDB와의 호환성을 목표로 하고 있습니다[2][1][3][4].
프로젝트 개요
DocumentDB는 처음 마이크로소프트에서 2025년 초에 공개한 후, 리눅스 재단으로 이관되어 AWS와 구글 등 주요 클라우드 기업들도 공동 참여하는 오픈소스 프로젝트로 성장했습니다. 이 프로젝트의 목적은 클라우드와 AI 시대에 맞는 공급업체 중립적인(벤더 락인 해소) 문서형 DB 표준을 만들고, 유연한 JSON 기반 데이터 처리, AI·벡터 검색 등 최신 워크로드에 적합한 엔진을 제공하는 것입니다.
기술적 특징 및 호환성
DocumentDB의 가장 큰 특징은 PostgreSQL 생태계 위에 BSON(Binary JSON) 지원 확장을 얹은 구조라는 점입니다. 기존 PostgreSQL의 백업, 도구, 확장성은 그대로 이용할 수 있으면서도, NoSQL 방식의 문서 쿼리와 색인, 의미 기반 질의 등 다양한 최신 기능을 사용할 수 있습니다.
- 특히 MongoDB와의 호환성을 최우선 개발 목표로 삼고 있으며,
- MongoDB 드라이버 및 툴과의 호환 API(Gateway)를 별도로 구현 중입니다.
- 사용자는 기존 MongoDB 앱/도구 대부분을 별도 변경 없이 DocumentDB에 적용할 수 있게 될 예정입니다.
계정 생성 및 보안
계정 생성
- DocumentDB(PostgreSQL 기반)는 기본적으로 관리 사용자(root 또는 admin)를 생성하며, 추가 사용자는 DB 콘솔이나
db.createUser
명령을 통해 생성할 수 있습니다. - AWS 계정과 연동하는 경우, IAM(AWS Identity and Access Management) 역할을 활용하여 계정을 생성할 수 있습니다.
- 예시: IAM 역할 기반 사용자 생성
use $external;
db.createUser({
user: "arn:aws:iam::123456789012:role/teleport-docdb-user",
mechanisms: ["MONGODB-AWS"],
roles: [{ role: "root", db: "admin" }]
});
보안 설정
- 계정 및 비밀번호는 AWS Secrets Manager와 연계해 관리할 수 있으며, 기본적으로 7일마다 자동 교체 설정이 가능합니다.
- 네트워크 단에서는 VPC 보안 그룹/서브넷을 통해 데이터베이스 접근을 제한합니다. 예를 들면, 인바운드 규칙에서 27017 포트만 특정 서비스로 열도록 설정합니다[5][6][7].
- SSL을 통한 암호화 접속이 기본이며, 접속 인증서(CA 번들)를 적용해야 정상적으로 DocumentDB에 연결할 수 있습니다[5].
- IAM 기반 접근은 MONGODB-AWS 인증 방식으로 추가 보안 계층을 적용할 수 있습니다[2].
DocumentDB 설치 및 확장 연동
PostgreSQL 설치
- 리눅스에서 일반적으로
sudo apt update
sudo apt install postgresql
명령어로 설치 후, psql
로 접속해 정상 동작 확인[6].
DocumentDB 확장 설치
- 확장 소스코드 다운로드 및 빌드
git clone https://github.com/documentdb/documentdb-extension.git
cd documentdb-extension
make
sudo make install
- PostgreSQL에서 확장을 활성화:
CREATE EXTENSION documentdb;
- 설치 상태는 아래 명령으로 확인:
SELECT * FROM pg_extension;
-- 또는 \dx
- 확장 삭제는
DROP EXTENSION documentdb;
적용[8].
Next.js 프로젝트 연동
MongoDB 호환 드라이버 설치
- DocumentDB 사용을 위해 Next.js 13 이상 app 라우팅에서
mongodb
패키지를 사용
npm install mongodb
연결 예제 코드 (app
라우팅, ESlint 제외 없음)
/util/database.js
import { MongoClient } from 'mongodb';
const url = '문서DB 연결 URL'; // 예: 'mongodb://localhost:27017'
const options = { useNewUrlParser: true };
let connectDB;
if (process.env.NODE_ENV === 'development') {
if (!global._mongo) {
global._mongo = new MongoClient(url, options).connect();
}
connectDB = global._mongo;
} else {
connectDB = new MongoClient(url, options).connect();
}
export { connectDB };
- 페이지 예제
import { connectDB } from "@/util/database";
export default async function Page() {
const db = (await connectDB).db("forum");
const posts = await db.collection("post").find().toArray();
return (
<div>
{posts.map(post => <div key={post._id}>{post.title}</div>)}
</div>
);
}
- 실제 운영환경에서는 연결 URL·인증·Pool 관리 등을 적절히 구성 필요[9].
전체 요약
DocumentDB는 PostgreSQL 기반으로 리눅스 재단 관리 하에 오픈소스로 개발되고, IAM 역할 및 비밀번호 방식 모두 지원하며, AWS Secrets Manager 연동으로 보안성을 높일 수 있습니다. 실시간 데이터 변경 구독(Subscription)은 이벤트 알림은 지원하지만, MongoDB Change Streams 방식의 데이터 실시간 push 구독 기능은 아직 공식 구현 전입니다. 확장 설치부터 Next.js와 연동까지 MongoDB와 거의 동일한 방식으로 사용할 수 있어 기존 앱도 쉽게 마이그레이션이 가능합니다[1][2][3][4][5][6][7].
[↑] [1] https://docs.aws.amazon.com/ko_kr/documentdb/latest/developerguide/security.managing-users.html
[↑] [2] https://teleport-docs.infograb.net/enroll-resources/database-access/enroll-aws-databases/aws-docdb/