토비의 스프링 ‘7장 스프링의 핵심 기술의 응용’을 읽고 새롭게 배운 여러가지 것들을 정리합니다.
반복해서 듣는 것은 수고로운 일이 아니다. 테스트를 먼저 만드는 게 불편하다면 일단 코드를 먼저 만들고 그에 대한 테스트를 바로 추가해서 확인해보는 방법도 나쁘지 않다. 중요한 건 코드를 작성한 다음 테스트를 만들어 검증하는 그 사이의 간격을 가능한 짧게 하고, 예외상황을 포함한 기능을 세세하게 검증하도록 테스트를 만드는 것이다.
구현 방법과 적용 기술이 바뀔 수 있고 내부 구조가 변경될 수 있으면서도 인터페이스 메서드는 일정하게 유지해야 하는 부담이 있는 코드가 있다면, 설계도 중요하지만 테스트를 철저하게 만들어서 기능을 검증하고 구현 방식이 변경될 때 마다 테스트를 실행해서 기능에 영향을 주는지 확인하는 일이 매우 중요하다.
당장 테스트가 안되어 답답하지만 그렇게 하는 방법이 있다. 사용하는 추상화된 코드를 먼저 작성하는 것이다.
READ_UNCOMMITTED 트랜잭션 격리수준의 문제점은 한 트랜잭션이 종료되기 전의 작업 내용을 다른 트랜잭션이 읽을 위험성이 있다는 것이다. 만약 다른 트랜잭션이 끝나기 전에 변경한 정보를 읽어버렸는데 해당 트랜잭션이 롤백돼버리면 실제로는 반영되지 않은 유효하지 않은 데이터를 사용하는 문제가 발생한다. 성능을 극대화하기 위해 약간의 위험성을 감수하고라도 일부러 낮은 격리수준을 적용하는 경우가 있긴 하지만 SQL의 변경 작업 같은 중요한 작업에는 권장할 수 없다. 낮은 격리수준의 위험성을 피하려면 READ_COMMITTED 격리수준을 지원하는 HSQL 1.9 이상을 사용하거나 H2, 또는 Derby를 사용해야 한다.