insert와 save의 차이(?) 오류(?) 버그(?)
우선 이번 포스팅은 개인적으로 프로젝트 진행하면서 알게된 노하우를 적어놓은 것이므로 핵심코어에 대한 검증은 안되있다는 것을 밝힌다. 그리고
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를 사용하는것이 좋다.
끗.