우선 이번 포스팅은 개인적으로 프로젝트 진행하면서 알게된 노하우를 적어놓은 것이므로 핵심코어에 대한 검증은 안되있다는 것을 밝힌다. 그리고
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를 사용하는것이 좋다.
끗.
'NoSQL > MongoDB' 카테고리의 다른 글
Mongdb DB 보안셋팅 (0) | 2012.05.14 |
---|---|
[spring-data/mongodb] 클라이언트 콘솔에서 DBRef로 등록된 객체를 통해 find()하는 방법. (1) | 2011.12.26 |
MongoDB SpringFramework 인젝션 방법 (0) | 2011.11.21 |