2015년 11월 9일 월요일

[spring] - mongo 에러처리

mongodb의 특성상 처리에 대한 결과를 신경 쓰지 않는다.

즉, 삽입에서의 성공, 실패에 대한 처리가 불가능가능하지 않다.

 결과를 리턴받는 것은 필요한 기능이고 당연 기능을 제공한다. 하지만 spring에서든 node에서든 이러한 성격에 따라 결과를 신경쓰지 않는 것을 따기 때문에 default 설정으로 그냥 넘기게 된다.

xml 설정의 mongoTemplate의 설정 부분을 바꾸면 된다.
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongo" />
    <constructor-arg value="oman" />
    <property name="writeResultChecking" value="EXCEPTION"/>
</bean>


value로 설정 할 수 있는 값은 3가지다.
none, exception, log



  • none
    • default 설정 값으로 아무런 행동도 하지 않는다. error를 던지지도 않고 로그로도 남기지 않는다.
  • log
    • 문제가 생길 경우 로그로 남긴다.
    • ....failed: E11000 duplicate key error index:........
  • exception
    • 예외처리가 되어 핸들링 할 수 있게 된다.
    • org.springframework.dao.DataIntegrityViolationException:.......

2015년 10월 24일 토요일

mysql transction isolation level (트렌젝션 격리 수준)



repeatable read
  • mysql에서 default로 설정되어 있는 트랜젝션 격리수준이다. 
  • 한 데이터에 대하여 데이터 트랜젝션이 수행중일 경우 읽기에 대한 접근을 할 수 있다.
  • 한 데이터에 대해 여러 트랜젝션이 동시에 진행중일 때 모든 트렌젝션이 끝날때까지 이전의 데이터를 읽을 수 있다.
    • 이점은 read commit 과 다른 점이다.
read uncommitted
  • 커밋 되지 않은 데이터 상태에서 읽을 경우 추후에 롤백이 되더라도 처리 된 부분까지의 결과를 읽을 수 있습니다. 즉, 트랜젝션 중간이라도 데이터 읽기에 대한 접근이 가능합니다.
  • dirty read라고 부르기도 한다.
read commit
  • 트랜젝션 중의 경우 커밋이 되어 있지 않다면 이전의 데이터를 읽는다는 점에서는 repeatable read와 비슷하다.
  • 여러 트랜젝션이 수행중일 경우 해당 세션에서 진행중인 트랜젝션의 범위 내에서만 적용된다.
 SERIALIZABLE
  • 가장 높은 level의 트랜젝션
  • 데이터에 대하여 트랜젝션이 수행중인 경우 읽기 쓰기 수정 삭제 모든게 불가능하다.