본문 바로가기

전체 글73

API 호출 관점에서 TaskExecutor & Coroutine & Webclient 비교해보기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 기술에 대한 필요성 spring mvc 환경에선 하나의 요청당 하나의 스레드가 할당되어 요청을 처리하게 된다. 이는 기본적으로 모든 요청을 동기적(순차적)으로 처리한다는 의미이다. 모든 요청을 동기적으로 처리하는 방식은 인간이 가장 이해하기 쉬운 방식이기 때문에, 이 방식으로 시스템을 구성하고 코드를 작성하는 것은 코드에 대한 가독성과 유지보수성을 좋게 유지할 수 있는 선택지가 된다. 따라서 대부분의 상황에서 이 방식은 좋은 선택지가 된다.(심플이즈베스트..) 하지만 특정 상황에서 트레이드오프를 해야 할 수도 있다. 예를 들어 하나의 요청에서 처리해야 하는 작업이 외부 api를 10번 호출해야 하는 일이고, 각.. 2023. 9. 8.
멀티인스턴스 & Blue-Green 배포 환경에서 @Scheduled 사용 시 주의사항 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 1. @Scheduled 란? 특정 로직을 주기적으로 실행하고 싶을 때 Spring boot 기반 애플리케이션에서 사용할 수 있는 선택지다. cron, fixedDelay, fixedRate 등 스케쥴스케줄 주기를 지정할 수 있는 다양한 표현 방법을 지원하고 스케줄 로직을 실행하기 위한 스레드 풀 설정 및 등록을 편리하게 할 수 있는 기능을 지원한다. 스케줄 주기나 실행할 스레드에 대한 관리는 해당 애플리케이션 인스턴스 범위 내에서만 이루어진다. 2. 멀티인스턴스에서 주의사항과 해결책(분산락) 스케쥴 주기나 실행할 스레드에 대한 관리는 해당 애플리케이션 인스턴스 범위 내에서만 이루어진다. 위 말을 곱씹어보면, .. 2023. 8. 19.
spring batch chunk 기반 처리 시 주의점: 스킵 시 중복처리 되는 문제 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. spring batch의 chunk 기반 처리를 사용해 배치를 개발하던 중 스킵을 사용할 시 ItemProcessor와 ItemWriter의 동작 원리에 의해 특정 item 이 중복처리 될 수 있음을 알게 되었고, 놓칠 수 있는 부분이라고 생각이 들어서 정리해 두려고 한다. 거두절미하고 예제 코드부터 살펴보자 예제 코드 @Configuration @RequiredArgsConstructor public class TestJobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepB.. 2023. 8. 8.
Spring Batch JpaPagingItemReader 사용 시 주의사항 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 스프링 배치의 청크 프로세싱은 Item에 대한 읽기, 처리, 쓰기 작업을 Reader, Processor, Wirter로 잘 추상화해 두었다. 따라서 일반적으로 Reader 는 읽는 역할을 한다고 생각했다. 하지만 JpaPagingItemReader 는 단순히 읽는 역할 이상을 한다. JpaPagingItemReader#doReadPage 메소드의 코드를 보자. protected void doReadPage() { EntityTransaction tx = null; if (this.transacted) { tx = this.entityManager.getTransaction(); tx.begin(); this... 2023. 7. 2.