이번 포스팅을 시작으로 이벤트 기반의 MSA를 개선하는 과정에 대해서 시리즈로 작성하려고 합니다. 이번 포스팅에서는 레거시의 구조 및 문제점과 이를 해결하기 위해 어떻게 MSA로 전환했는지 공유드리며, MSA로 전환했음에도 남아있는 문제점들을 해결하기 위해 이벤트 기반의 MSA로 전환하게 된 과정까지 작성해보겠습니다. MSA 전환 배경 레거시의 구조저희 서비스 백엔드는 톰캣 웹 애플리케이션 서버에 서블릿 애플리케이션을 배포하여, JDBC를 사용해 DB와 통신하는, 전형적인 모놀리식 아키텍처의 레거시 웹 애플리케이션으로 구축되어 있었습니다. 심지어 서비스 레이어도 없었고, 백엔드 서버는 주로 DB에서 데이터를 읽어와 프론트에 전달하는 역할만 수행하여, 대부분의 비즈니스 로직은 클라이언트 또는 AWS Lam..
Spring Batch 시리즈를 포스팅하고 있습니다. 기준이 되는 버전은 5.x 버전입니다.1. Spring Batch 소개2. Job과 Step의 구조 및 생성3. Job과 Step의 실행 과정4. Job의 흐름 제어 - Flow5. FlowJob의 실행 과정6. 청크 기반 프로세싱의 구조 및 생성7. 청크 기반 프로세싱의 진행 과정8. Flat File, JSON 형식 파일 읽기 및 쓰기9. DB 데이터 읽기 및 쓰기10. Step의 예외 제어하기(스킵, 재시도)11. 배치 작업 확장하기 - 현재 포스팅 서버 개발자라면 스케일 업, 스케일 아웃이라는 용어를 들어봤을 것이다. 방식의 차이가 있지만, 공통적으로 시스템의 처리량과 성능을 향상하기 확장(스케일링) 방법론을 지칭하는 용어들이다. 배치 작업 ..
Spring Batch 시리즈를 포스팅하고 있습니다. 기준이 되는 버전은 5.x 버전입니다.1. Spring Batch 소개2. Job과 Step의 구조 및 생성3. Job과 Step의 실행 과정4. Job의 흐름 제어 - Flow5. FlowJob의 실행 과정6. 청크 기반 프로세싱의 구조 및 생성7. 청크 기반 프로세싱의 진행 과정8. Flat File, JSON 형식 파일 읽기 및 쓰기9. DB 데이터 읽기 및 쓰기10. Step의 예외 제어하기(스킵, 재시도) - 현재 포스팅11. 배치 작업 확장하기 이번 포스팅에서는 `Step`에서 예외가 발생하는 경우 무조건 실패 처리를 하는 것이 아니라, `ExceptionHandler`를 통해 커스텀하게 제어하는 방법에 대해서 살펴볼 것이다.그리고 Spri..
Spring Batch 시리즈를 포스팅하고 있습니다. 기준이 되는 버전은 5.x 버전입니다.1. Spring Batch 소개2. Job과 Step의 구조 및 생성3. Job과 Step의 실행 과정4. Job의 흐름 제어 - Flow5. FlowJob의 실행 과정6. 청크 기반 프로세싱의 구조 및 생성7. 청크 기반 프로세싱의 진행 과정8. Flat File, JSON 형식 파일 읽기 및 쓰기9. DB 데이터 읽기 및 쓰기 - 현재 포스팅10. Step의 예외 제어하기(스킵, 재시도)11. 배치 작업 확장하기 이번 포스팅에서는 DB에서 데이터를 가져와 읽고 쓰는 방법에 대해서 알아볼 것이다. Spring Batch에서는 JDBC를 기반으로 DB로부터 아이템을 읽고 쓰는 `JdbcCursorItemReade..
Spring Batch 시리즈를 포스팅하고 있습니다. 기준이 되는 버전은 5.x 버전입니다.1. Spring Batch 소개2. Job과 Step의 구조 및 생성3. Job과 Step의 실행 과정4. Job의 흐름 제어 - Flow5. FlowJob의 실행 과정6. 청크 기반 프로세싱의 구조 및 생성7. 청크 기반 프로세싱의 진행 과정8. Flat File, JSON 형식 파일 읽기 및 쓰기 - 현재 포스팅9. DB 데이터 읽기 및 쓰기10. Step의 예외 제어하기(스킵, 재시도)11. 배치 작업 확장하기 이번 포스팅에서는 파일 기반으로 읽기 및 쓰기 작업을 수행하는 `ItemReader`, `ItemWriter` 구현체들에 대해 알아볼 것이다. Spring Batch에서는 Flat File을 기반으로..
Spring Batch 시리즈를 포스팅하고 있습니다. 기준이 되는 버전은 5.x 버전입니다.1. Spring Batch 소개2. Job과 Step의 구조 및 생성3. Job과 Step의 실행 과정4. Job의 흐름 제어 - Flow5. FlowJob의 실행 과정6. 청크 기반 프로세싱의 구조 및 생성7. 청크 기반 프로세싱의 진행 과정 - 현재 포스팅8. Flat File, JSON 형식 파일 읽기 및 쓰기9. DB 데이터 읽기 및 쓰기10. Step의 예외 제어하기(스킵, 재시도)11. 배치 작업 확장하기 이번 포스팅에서는 청크 기반 프로세싱을 수행하는 `ChunkOrientedTasklet`의 구현을 상세하게 알아볼 것이다. `ChunkOrientedTasklet`은 `Tasklet`의 구현체이기 때..
Spring Batch 시리즈를 포스팅하고 있습니다. 기준이 되는 버전은 5.x 버전입니다.1. Spring Batch 소개2. Job과 Step의 구조 및 생성3. Job과 Step의 실행 과정4. Job의 흐름 제어 - Flow5. FlowJob의 실행 과정6. 청크 기반 프로세싱의 구조 및 생성 - 현재 포스팅7. 청크 기반 프로세싱의 진행 과정8. Flat File, JSON 형식 파일 읽기 및 쓰기9. DB 데이터 읽기 및 쓰기10. Step의 예외 제어하기(스킵, 재시도)11. 배치 작업 확장하기 지난 포스팅 까지는 `Job`과 `Step`의 컨텍스트를 중점으로 아키텍처와 기능들을 알아보았는데, 이번에는 작업의 최소 단위인 `Step` 내부의 `Tasklet` 컨텍스트를 중점으로 청크 기반 ..
Spring Batch 시리즈를 포스팅하고 있습니다. 기준이 되는 버전은 5.x 버전입니다.1. Spring Batch 소개2. Job과 Step의 구조 및 생성3. Job과 Step의 실행 과정4. Job의 흐름 제어 - Flow5. FlowJob의 실행 과정 - 현재 포스팅6. 청크 기반 프로세싱의 구조 및 생성7. 청크 기반 프로세싱의 진행 과정8. Flat File, JSON 형식 파일 읽기 및 쓰기9. DB 데이터 읽기 및 쓰기10. Step의 예외 제어하기(스킵, 재시도)11. 배치 작업 확장하기 이번 포스팅에서는 `FlowJob`이 어떤 과정으로 실행이 되는지 확인해볼 것이다. 이 과정을 이해하기 위해 상태 전이를 다루는 `State`와 `StateTransition`에 대해서 우선 살펴볼..
Spring Batch 시리즈를 포스팅하고 있습니다. 기준이 되는 버전은 5.x 버전입니다.1. Spring Batch 소개2. Job과 Step의 구조 및 생성3. Job과 Step의 실행 과정4. Job의 흐름 제어 - Flow - 현재 포스팅5. FlowJob의 실행 과정6. 청크 기반 프로세싱의 구조 및 생성7. 청크 기반 프로세싱의 진행 과정8. Flat File, JSON 형식 파일 읽기 및 쓰기9. DB 데이터 읽기 및 쓰기10. Step의 예외 제어하기(스킵, 재시도)11. 배치 작업 확장하기 이번 포스팅에서는 `Job`에서 `Step`의 흐름을 제어하는 방법에 대해서 알아볼 것이다. Spring Batch에서는 `Flow`가 이 역할을 수행하며, Flow를 만드는 방법과 Flow를 통해 ..
Spring Batch 시리즈를 포스팅하고 있습니다. 기준이 되는 버전은 5.x 버전입니다.1. Spring Batch 소개2. Job과 Step의 구조 및 생성3. Job과 Step의 실행 과정 - 현재 포스팅4. Job의 흐름 제어 - Flow5. FlowJob의 실행 과정6. 청크 기반 프로세싱의 구조 및 생성7. 청크 기반 프로세싱의 진행 과정8. Flat File, JSON 형식 파일 읽기 및 쓰기9. DB 데이터 읽기 및 쓰기10. Step의 예외 제어하기(스킵, 재시도)11. 배치 작업 확장하기 이번 포스팅에서는 `Job`을 실행하면 어떤 과정으로 실행되는지, `Step`은 또 어떻게 실행되는 건지 한번 알아보자. 이 과정을 통해 1번 포스팅에서 설명했던 도메인 객체들이 어떤 역할을 하는지..