MongoDB 에서 데이터를 입력하는데 _class라는 값이 입력되었다. (이게 모지😮)
_class에 대해 알아보고 제거하는 방법도 알아보겠습니다!
'_class' 필드란 무엇인가?
MongoDB는 NoSQL 데이터베이스로 JSON과 유사한 BSON 형식으로 데이터를 저장합니다.
MongoDB는 스키마가 없으므로 데이터를 유연하게 저장할 수 있지만, 애플리케이션의 객체 지향 구조와 MongoDB의 문서 구조를 매핑하는 과정에서 추가적인 메타 데이터가 필요할 수 있습니다. 그중 하나가 '_class' 필드입니다.
'_class' 필드의 역할
- 객체 매핑
'_class' 필드는 Spring Data MongoDB와 같은 ODM(Object-Document Mapping) 프레임워크에서 사용됩니다.
이 필드는 MongoDB 문서가 매핑되는 Java 클래스 정보를 저장합니다. - 다형성 지원
'_class' 필드는 상속 관계를 지원하며, 자식 클래스의 인스턴스를 저장할 때 부모 클래스의 필드를 포함하여 저장할 수 있도록 도와줍니다. 이는 객체의 유형을 MongoDB 문서에서 쉽게 식별할 수 있게 해 줍니다.
'_class' 필드를 제거하는 이유
불필요한 메타데이터
- _class 필드는 객체의 클래스 정보를 저장하지만, 실제 비즈니스 로직에는 필요하지 않을 수 있습니다.
특히, MongoDB의 스키마가 유연하기 때문에 이러한 메타데이터가 비즈니스 로직에서 필요하지 않을 수 있습니다.
쿼리 성능 개선
- _class 필드는 MongoDB 문서의 크기를 증가시킬 수 있으며, 쿼리 성능에 영향을 줄 수 있습니다.
특히 많은 문서가 _class 필드를 가지고 있다면, 이를 제거하여 문서 크기를 줄이고 쿼리 성능을 개선할 수 있습니다.
데이터 구조 단순화
- _class 필드는 ODM 프레임워크에 의존하는 구조를 만들어 문서 구조를 복잡하게 만들 수 있습니다.
이 필드를 제거함으로써 데이터 구조를 단순화하고, MongoDB와의 상호작용을 더 직접적으로 관리할 수 있습니다.
'_class' 필드 제거 방법
MongoDB의 '_class' 필드를 제거하는 방법은 여러 가지가 있습니다.
저는 MappingMongoConverter를 사용하여 제거하였습니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
@Configuration
public class MongoDBConfig {
@Bean
public MappingMongoConverter mappingMongoConverter(
MongoDatabaseFactory mongoDatabaseFactory,
MongoMappingContext mongoMappingContext
) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory);
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return converter;
}
}
DefaultMongoTypeMapper의 생성자에 null을 전달하여 _class 필드의 생성을 방지하였습니다.
다시 Document를 생성해 보면 아래와 같이 _class 필드가 제거된 것을 확인할 수 있었습니다.
'DataBase > MongoDB' 카테고리의 다른 글
[MongoDB] Map-Reduce: 대량 데이터 처리의 유연한 방법 (0) | 2024.12.29 |
---|---|
[MongoDB]Aggregation Framework: 효율적인 데이터 처리와 분석 (1) | 2024.12.27 |
MongoDB 인덱스와 인덱싱 전략 이해하기 (3) | 2024.10.31 |
[MongoDB] Spring Boot에서 임베디드 MongoDB를 사용하는 방법 (0) | 2024.06.30 |
MongoDB란? (0) | 2024.06.16 |