분류 전체보기34 Spring Batch Paging vs Cursor 배치를 돌릴 때 페이징 처리를 할 지 커서를 할 지 고민이 되는 때가 있다.업무적으로 경험했던 많은 케이스들을 떠올려보면 해당하는 조건의 모든 데이터가 대상이 되기 때문에, 애초부터 쿼리를 잘 짜서 Cursor로 돌리는 것이 편하다. PagingItemReader의 경우에는 데이터가 많아질수록 한 번의 쿼리 수행이 느려지는 단점이 있다. 또한, MyBatisPagingItemReader 쿼리 내에 paging 처리를 위한 파라미터를 따로 추가해줘야 하는 번거로움도 있다. (없으면 계속 첫 페이지를 돌리기 때문에 뜻밖의 장애와 마주칠 수 있다)SELECT FOOFROM BARWHERE TYPE = 'A'OFFSET #{_skiprows} ROWS FETCH NEXT #{_pagesize} ROWS ONLY.. 2025. 7. 28. Pub-Sub 구조에서 자주 발생하는 실수 Kafka를 통해서 Event Driven Architecture를 만들다 보면 흔히 발생하는 실수가 한 가지 있다. 바로 트랜잭션 종료 전에 Event를 전송하게 되는 것이다. 가령 상품을 생성하고 상품 번호를 받아서 후처리를 하는 경우, Subscriber에서 상품 번호로 조회를 하고자 하면 조회가 되지 않을 수도 있다. Publisher와 Subscriber 각각 layer 단위로 테스트 할 때는 발견이 되지 않는 문제다. 또한 개발 서버에서 테스트할 때도 Kafka와 DB의 속도 차이에 따라 테스트 중에 발견이 되지 않을 수도 있다. 다른 팀과 함께 협업을 하는 상황이라면 어디에서 잘못된 것인지 알아채기 굉장히 어려운 경우도 종종 있었던 것 같다. Subscriber 기준에서 Retry 설정을 갖.. 2022. 2. 16. Kafka 자주 쓰는 명령어 정리 버전 확인 $ bin/kafka-topics.sh --version Topic 관리 토픽 생성 $ bin/kafka-topics.sh --create --zookeeper ${zookeeper} --replication-factor 3 --partitions ${partitions} --topic ${topicName} * 토픽을 생성할 때 deadLetter도 함께 만들어 두는 습관을 갖자. deadLetter는 토픽의 파티션과 같은 숫자여야 한다. 토픽 확인 $ bin/kafka-topics.sh --describe --zookeeper ${zookeeper} --topic ${topicName} 토픽의 파티션 갯수, replication factor, retention등의 부가 설정을 확인할 수 있.. 2022. 2. 16. /dev/null 이해하기 Backend 개발자로서 업무 중에 스크립트를 작성할 일이 많지 않지만, 배포 스크립트를 작성하다 보면 리눅스 잘 모르는 사람으로서 당황스러운 구문이 /dev/null이었다. java -jar myapplication.jar > /dev/null 2> /dev/null jar로 되어있는 프로그램을 실행시킨다. > /dev/null => 실행 결과에 대한 응답값(STDOUT)을 무시한다. 2> /dev/null => 실행시 오류(STDERR)를 무시한다. 실행한 곳에 EOF를 전달한다. & => 백그라운드로 실행한다. /dev/null 자체는 리눅스에서.. 2021. 10. 14. 이전 1 2 3 4 ··· 9 다음