MongoDB 인덱스 생성이란?
MongoDB에서 인덱스를 생성하려면 createIndex() 메서드를 사용합니다. 인덱스는 특정 필드 값을 기준으로 데이터를 빠르게 검색할 수 있도록 해주는 핵심 기능으로, 대용량 컬렉션에서 쿼리 성능을 크게 향상시킵니다.
이번 글에서는 문서가 포함된 컬렉션에 인덱스를 생성하고, 데이터를 삽입한 뒤 조회까지 확인하는 전체 과정을 예제와 함께 살펴보겠습니다.
1단계: createIndex()로 인덱스 생성하기
먼저 details.id 필드에 오름차순(1) 인덱스를 생성합니다. 이때 컬렉션이 아직 존재하지 않더라도 MongoDB가 자동으로 컬렉션을 생성해 주므로 별도의 사전 작업이 필요하지 않습니다.
> db.demo702.createIndex({"details.id":1});
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}실행 결과를 보면 createdCollectionAutomatically 항목이 true로 표시되어, demo702 컬렉션이 자동으로 생성되었음을 확인할 수 있습니다. 또한 모든 컬렉션에 기본적으로 존재하는 _id 인덱스(1개)에 새 인덱스가 추가되어, 전체 인덱스 수가 2개(numIndexesAfter)가 되었습니다.
2단계: insertOne()으로 문서 삽입하기
이제 insertOne() 메서드를 사용하여 학생 정보를 담고 있는 배열 형태의 details 필드를 가진 문서를 삽입합니다.
> db.demo702.insertOne({
... "details" : [
... {
... id:101,
... studentInfo:{
... "StudentName" : "Chris",
... "StudentAge" : 23
... }
... },
... {
... id: 102,
... studentInfo:{
... "StudentName" : "Robert",
... "StudentAge" : 20
... }
... }
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea6ea3b551299a9f98c93b3")
}삽입이 성공하면 acknowledged 값이 true로 반환되며, MongoDB가 자동으로 부여한 고유 식별자인 ObjectId도 함께 확인할 수 있습니다.
3단계: find() 메서드로 저장된 문서 조회하기
컬렉션의 모든 문서를 조회하려면 find() 메서드를 사용합니다. 여기에 pretty() 메서드를 함께 호출하면 결과가 들여쓰기된 보기 좋은 형태로 출력됩니다.
> db.demo702.find().pretty();
위 명령을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
{
"_id" : ObjectId("5ea6ea3b551299a9f98c93b3"),
"details" : [
{
"id" : 101,
"studentInfo" : {
"StudentName" : "Chris",
"StudentAge" : 23
}
},
{
"id" : 102,
"studentInfo" : {
"StudentName" : "Robert",
"StudentAge" : 20
}
}
]
}마무리 정리
지금까지 MongoDB 컬렉션에서 인덱스를 생성하는 과정을 단계별로 살펴보았습니다. 핵심 내용을 요약하면 다음과 같습니다.
- createIndex({필드: 1}): 지정한 필드에 오름차순 인덱스를 생성하며, -1을 사용하면 내림차순 인덱스가 됩니다.
- 컬렉션 자동 생성: 인덱스 생성 시점에 컬렉션이 없어도 자동으로 만들어집니다.
- _id 인덱스: 모든 컬렉션에는 기본 _id 인덱스가 존재하므로 인덱스 개수가 하나 더 집계됩니다.
- find().pretty(): 저장된 문서를 사람이 읽기 쉬운 형태로 조회할 수 있습니다.
배열 내부의 중첩 필드(예: details.id)에도 인덱스를 생성할 수 있으므로, 복잡한 문서 구조에서도 효율적인 쿼리 성능을 확보할 수 있습니다.