impati

중복을 왜 해결할까?

들어가며 어플리케이션을 개발하다 보면 꽤 자주 중복된 코드를 작성하게 되고 이미 작성된 로직에서 중복된 코드를 보는 것도 어려운 일이 아니다. 중복된 코드를 보면 클래스를 새로 정의해서 중복된 코드를 모아 새로 정의한 클래스를 사용하도록 하여 중복 로직을 해결하거나 여러 가지 디자인 패턴들을 사용하여 중복된 코드를 한곳으로 모은다. “중복 해결...

두 대 이상 서버에서 한 번만 스케쥴링 작업 호출하기

개요 특정 주기로 단 한 번만 호출되어야하는 기능이 있다고 해보자. 예를 들어 30분 마다 예약된 메시지가 있는지를 검사하고 예약된 메시지가 있다면 사용자에게 단 한번만 메시지를 전송해야한다. 이를 가볍게 표현하면 다음과 같다. @Transactional void runReservation() { ReservationTime reserv...

로그 필터링하기

들어가며 로깅은 개발할 때 의도한 대로 동작하는지 확인할 수 있는 좋은 방법이다. 나아가 운영할 때 요청이 어떻게 왔는지 그 요청에서 데이터들이 어떤 상호작용을 했는지 확인할 수 있다. 그렇다고 로깅을 너무 많이 남기면 로그파일에서 원하는 데이터를 검색하는데 시간이 아주 오래 걸릴 수 있다. 의도하지 않은 로깅 이러한 사실을 잘 알고 있다고 하더...

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

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

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

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