전체 글
-
스프링 배치 Processor의 Filtering개발/Spring 2021. 12. 27. 02:31
스프링 배치의 필터링 최근 아래와 같은 물음을 받은 적이 있다. 스프링 배치에서 만약 10000건을 읽어왔을 때, 업데이트 대상은 100건 정도임에도 불구하고 10000건의 업데이트를 치게되냐? 내 대답 : 100건에 대한 업데이트만 발생한다. 왜냐하면 스프링배치의 Processor가 null을 리턴하면 해당 item은 writer 로 가지 않는다. 라고 말했었다. 사실 내 눈으로 확인한 적이 없었다. 그래서 말하고도 약간 자신이 없었다. 분명히 그렇게 알고는 있는데.. 코드로 확인한 적이 없어 찜찜했다. 다음부턴 확실하게 알고 얘기할 수 있도록 한번 내부동작을 간단히 살펴보았다. 시작! step이 시작되면 아래와 같이 진행된다. ChunkOrientedTasklet chunkProcessor.proce..
-
(성능테스트) Hikari pool connection 데드락 해결프로젝트/BLUE DELIVERY 2021. 8. 23. 18:22
안녕하세요. 최근 진행중인 프로젝트에서 최근 주문 API를 구현하고, JMeter를 이용해 부하 테스트를 진행한 적이 있습니다. 적은 트래픽에서는 문제가 없었는데, 부하를 일으키니 Hikari pool connection timeout 발생으로 요청을 처리하지 못하는 문제를 겪은 적이 있습니다. 이번 글에서는 이 문제를 발견하고 원인을 찾은 후 해결하는 과정까지를 정리해보려고 합니다. 문제점 주문 API를 구현하고 간단하게 테스트 해보았을 때는 아무 문제가 없었습니다. 그러나 JMeter를 이용해 부하테스트를 진행하면 대부분의 요청이 실패하는 문제가 생겼습니다. 임시 조치 콘솔창에 찍힌 에러 로그를 확인하니, HikariPool 에서 connection을 얻을 수 없다고 합니다. hikari pool 의..
-
스프링 이벤트 에러에 독립적으로 만들기 (트랜잭션 분리. @TransactionalEventListener, @Transactional)프로젝트/BLUE DELIVERY 2021. 8. 22. 17:43
안녕하세요. 제가 프로젝트에서 '주문 후 가게에 알림'을 구현하는 과정에서 고민했던 내용을 정리해보려는데, 내용이 길어질거같아 나눠서 올리려고 합니다. 주로 하게된 고민은 다음과 같습니다. 주문이 발생하야 알림이 발생할 수 있는데, 하나의 요청안에서 '주문'과 '알림'을 어떻게 독립적으로 처리할 수 있을지에 대한 고민 어떻게하면 에러가 발생해도 이벤트 메세지를 유실시키지 않고 한번 이상 유저에게 전달하는 것을 보장할 수 있을지 이번 글에서는 알림 서비스 개요와 @TransactionalEventListener, @Transactional 을 사용한 트랜잭션 분리에 관련된 내용을 해보겠습니다. 알림 서비스의 특징 알림 서비스를 구현하기 앞서서 알림 서비스에 필요한 내용을 정리해보겠습니다. 구현 목표 알림을..