본문 바로가기

프로그래밍

[Java/MongoDB/Spring]데이터(Document) 입력시 _class 제거


인터넷에 떠도는 접속 MongoDB접속 방법 등을 통해서 
Java MongoDB Driver 를 사용해 update, insert 등을 이용하면 Document에 내부적으로
_class가 같이 들어가게된다.



이기능을 지원하는 이유는 스키마가 애초에 없기때문에
예를 들어 같은 내용을 각기 다른 클래스의 인스턴스가 입력했을 때
어떤 것을 통해서 입력이 되었는지 분명히 하기위해 이같은 값이 들어가도록 되었다고 한다.
어떤 데이터가 정확한 프로세스로 들어갔는지 검증을 위해 이용할 수도 있지만,
정의가 확실하고 필요가 없다면 낭비되는 필드 하나가 생기는 것이다.



이를 제거하려면 아래와 같이 MongoMappingContext와 DefaultMongoTypeMapper의 설정을
변경하여 Driver에 접근하면 되겠다.
추가로 아래 설정은 User접근정보가 적용된 MongoDB에 접속할 때의 처리다.
사용자 접근정보는 기본적으로 MongoDB설치 후에는 따로 파라미터나 설정정보를 입력하지 않으면
없기 때문에 초기에 설정을 하는 것이 좋겠다. 
후에 이 내용도 적어야겠다.

        <mongo:mongo-client id="mongo"
                host="호스트명"
                port="포트"
                credentials="접근정보" />  <--! ex)계정명:비밀번호@접속DB명 -->
        <mongo:db-factory mongo-ref="mongo" dbname="접속DB명"/>

        <bean id ="mappingMongoContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
        <bean id ="defaultMongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
                <constructor-arg name="typeKey"><null/></constructor-arg>
        </bean>

        <!-- MappingMongoConverter -->
        <mongo:mapping-converter  id="mappingMongoConverter"
                db-factory-ref="mongoDbFactory"
                mapping-context-ref="mappingMongoContext"
                type-mapper-ref="defaultMongoTypeMapper">
        </mongo:mapping-converter>

        <!-- MongoTemplate -->
        <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
                <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
                <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
        </bean>

        <mongo:repositories base-package="@Repository로 표기된 클래스가 존재하는 위치" />