MongoDB 상한 컬렉션이란?
상한 컬렉션(Capped Collection)은 고정된 크기를 가지는 특수한 컬렉션으로, 삽입 순서에 따라 문서를 저장하고 조회하는 높은 처리량(throughput)의 작업에 최적화되어 있습니다. 저장 공간이 가득 차면 가장 오래된 문서부터 자동으로 덮어쓰기 때문에 로그, 캐시 등 순환 버퍼 형태의 데이터 관리에 유용합니다.
이러한 상한 컬렉션에는 컬렉션의 크기(size)뿐만 아니라 저장할 수 있는 최대 문서 수(max)도 지정할 수 있습니다.
max 값을 설정하는 기본 문법
상한 컬렉션에 max 값을 설정하려면 db.createCollection() 메서드에서 capped, size, max 옵션을 함께 지정합니다.
db.createCollection("yourCollectionName", {capped:true, size:yourSizeValue, max:yourMaxValue});- capped: true로 설정해야 상한 컬렉션으로 생성됩니다.
- size: 컬렉션의 최대 크기(바이트 단위)입니다. 필수 값입니다.
- max: 컬렉션에 저장할 수 있는 최대 문서 수입니다.
실제 적용 예제
위 문법을 실제로 적용하여 max 값이 설정된 상한 컬렉션을 생성해 보겠습니다. 다음은 컬렉션 이름이 setMaxDemo이고, 크기는 948575757바이트, 최대 문서 수는 2000개로 지정하는 쿼리입니다.
> db.createCollection("setMaxDemo", {capped:true, size:948575757, max:2000});쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "ok" : 1 }ok : 1은 컬렉션이 성공적으로 생성되었음을 의미합니다.
컬렉션 정보 확인하기
생성된 컬렉션의 상세 정보는 stats() 메서드로 확인할 수 있습니다.
> db.setMaxDemo.stats();
실행 결과 중 핵심적인 부분은 다음과 같습니다.
{
"ns" : "test.setMaxDemo",
"size" : 0,
"count" : 0,
"storageSize" : 4096,
"capped" : true,
"max" : 2000,
"maxSize" : 948576000,
...
"nindexes" : 1,
"totalIndexSize" : 4096,
"indexSizes" : {
"_id_" : 4096
},
"ok" : 1
}주요 필드 설명
- capped : true — 해당 컬렉션이 상한 컬렉션임을 나타냅니다.
- max : 2000 — 설정한 최대 문서 수가 정상적으로 적용되었음을 보여줍니다.
- maxSize : 948576000 — 지정한 크기가 MongoDB 내부에서 256KB 단위로 정렬되어 저장된 값입니다.
- count / size : 0 — 아직 문서가 삽입되지 않았기 때문에 0으로 표시됩니다.
전체 출력에는 이 외에도 WiredTiger 스토리지 엔진의 세부 통계(캐시, 압축, B-트리, 커서 등)가 포함되며, 필요에 따라 성능 분석 자료로 활용할 수 있습니다.
정리 및 참고 사항
상한 컬렉션에서는 size 옵션이 반드시 필요하며, max 옵션은 선택 사항입니다. 두 조건 중 하나라도 먼저 도달하면 가장 오래된 문서부터 제거되고 새로운 문서가 삽입됩니다. 즉, 문서 수가 2000개에 도달하거나 크기가 maxSize에 도달하면 오래된 데이터가 순환 방식으로 덮어쓰여집니다.
또한 상한 컬렉션은 일반 컬렉션과 달리 문서 삭제나 크기를 초과하는 업데이트가 제한되므로, 로그 수집, 실시간 피드, 최근 활동 기록 등 삽입 위주의 워크로드에 활용하는 것이 좋습니다.