impati

트랜잭션 범위를 넘어선 동시 수정 문제

들어가며 어느 날 A 관리자가 관리하고 있는 감자빵 상품의 이름을 “감자빵”에서 “가장 맛있는 감자빵”으로 수정하고 운영환경에 반영된 모습까지 확인한 뒤 업무를 마무리했다. 하지만 그날 저녁 감자빵 판매자가 요구했던 “가장 맛있는 감자빵” 으로 상품 이름이 노출되기를 바랬는데 반영되지 않고 “감자빵”으로 노출되고 있다고 문의가 들어왔다. 관리자 A ...

설정에 따라 실제 외부 모듈과 통신하는 로직 테스트 해보기

들어가며 외부 모듈과 통신하는 로직 테스트는 외부 모듈이 제어할 수 없는 영역이므로 모킹 하여 외부 모듈에 대한 응답을 지정한 뒤 진행하기도 한다. 이때 외부 모듈이 실제로 기대한 응답을 내려줄 것이라는 것은 어떻게 테스트해 볼 수 있을까? 예를 들어 레디스에서 특정 키에 대해 특정 값을 응답할 것이라는 것을 모킹을 통해 응답 지정하여 로직을 테스트...

JPA Entity 에서 equals() ,hashcode() 다시보기

들어가며 자바에서 equals() ,hashcode() 를 재정의하는 이유는 무엇일까? 생성한 객체의 동일성 수준의 같음을 넘어 동등성 수준의 같음을 원하기 때문이다. 여기서 동일성은 실제로 참조가 같은 객체를 가르키고 있는 경우를 말하며 동등성은 도메인 규칙에 의해 같은 객체이다라고 판단하는 기준을 말한다. 그리고 equals() ,hashcod...

JPA에서 변경 감지 사용 안 하기

들어가며 JPA는 트랜잭션 내 영속성 컨텍스트에서 관리되는 엔티티의 변경이 일어났을 때 update 쿼리를 전달하지 않아도 변경 감지 기능에 의해 update 쿼리를 전달해 준다. 이러한 일이 가능한 이유는 엔티티를 영속성 컨텍스트에 보관할 때 최초 상태를 복사해서 저장해 두는 스냅샷을 관리하기 때문이다. 그리고 데이터베이스에 영속성 컨텍스트가 ...