NoSQL/MongoDB

insert와 save의 차이(?) 오류(?) 버그(?)

jeeyong 2012. 6. 13. 14:12

우선 이번 포스팅은 개인적으로 프로젝트 진행하면서 알게된 노하우를 적어놓은 것이므로 핵심코어에 대한 검증은 안되있다는 것을 밝힌다. 그리고 


Java 라이브러리를 사용하면서 생긴 버그에 대해서 설명하고자 한다.


설명에 앞서 프로젝트에 이 버그를 파악된 스팩을 설명한다.


database : MongoDB 2.0.1 

library

1. spring-data-commomns-core-1.2.0.M2.jar

2. spring-data-mongodb-1.0.0.M5.jar

3. common-dbcp-1.4.jar

4. mongo-2.7.3.jar


이제 본론으로 설명하자면

org.springframework.data.mongodb.core.index.CompoundIndexes 를 이용해서 

특정 컬럼(들)에 unique 속성을 걸어놓고

org.springframework.data.mongodb.core.MongoTemplate 를 이용해서 


mongoDB에 데이터를 저장하는 메소드가 두가지 있는데 insert와 save 메소드이다. 기본적인 차이점은 insert는 무조건 데이터를 추가한다는점이고 save는 중복 id값이 있는경우엔 그 데이터를 수정하지만 없는 경우엔 추가를 한다는 점이다. 아마도 그점에서 이 버그가 발생한것으로 보인다.


save 메소드를 사용할 경우 간혹적으로 중복된 데이터가 들어가는 경우가 있다.

콘솔로 들어가서 indexes 생성이 된것을 확인했기때문에 mongodb 자체내 결함 일수도 있고 mongo-2.7.3.jar 라이브러리의 버그일 가능성이 있다. ( 예전에 2.7.3 이하 버젼에서 select 에 대한 버그도 있었다. )


그래서 insert 메소드를 사용하도록 수정했더니 정상적으로 데이터가 들어가는 걸 볼 수 있었다.


결론적으론 유니크 인덱스를 사용하는 collection은 가급적 insert를 사용하는것이 좋다.


끗.