일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Spring Boot
- 맛집
- MySQL
- springboot
- redis
- Git
- laravel
- IntelliJ
- ubuntu
- JVM
- Design Patterns
- java
- 요리
- elasticsearch
- db
- it
- jenkins
- Gradle
- devops
- tool
- Oracle
- ReactJS
- javascript
- Web Server
- Spring
- Spring Batch
- jsp
- linux
- AWS
- php
- Today
- Total
목록Spring Batch (13)
아무거나
Spring Batch Partitioning 구현예제코드예제코드Spring Batch Partitioning 이란파티셔닝은 매니저 Step 이 대량의 데이터 처리를 위해 지정된 수의 작업자 (Worker) Step 으로 병렬처리 하는 방식이다.Multi Thread Step 과 비교멀티스레드 Step 은 단일 Step 을 Chunk 단위로 스레드를 생성해 분할처리 한다.어떤 쓰레드에서 어떤 데이터들을 처리하게 할지 세밀한 조정이 불가능해당 Step의 ItemReader/ItemWriter 등이 멀티스레드 환경을 지원하는지 유무가 굉장히 중요파티셔닝은 독립적인 Step (Worker Step)을 구성하고, 그에 따른 각각 별도의 StepExecution 파라미터 환경을 가지게 하여 처리멀티스레드 Step..
Spring Batch + Redis Pipeline 으로 구현한 성능 개선코드 참고는 https://github.com/bkjeon1614/java-example-code/tree/develop/spring-batch-mybatis-codebase 에서 참고 부탁드립니다.Redis Pipeline 이란Redis의 pipeline은 여러 개의 명령어를 한 번에 보내고, 그 결과를 한 번에 받아올 수 있는 메커니즘입니다. 이를 통해 네트워크 오버헤드를 줄이고 Redis 서버의 처리 성능을 최적화할 수 있다. 또한 주의해야할 점은, Redis 서버의 처리량(capacity)을 고려하여 pipeline의 chunk size를 결정해야 한다.주의사항Request Chunk Size: 먼저 요청하는 chunk s..
Spring Batch 성능 개선 사례 정리개선 항목 점검 Flow유지보수가 좋고 코드가 직관적인 범주 내에서 최적화를 진행이후에도 성능 이슈가 발생하면 멀티 스레드 / 파티셔닝과 같은 다양한 방식으로 진행즉, 직관적인 방식과 단계적으로 진행하는 편이 좋다.개선 항목단일 UPDATE -> WHERE IN (Nos..) UPDATE 로 변경하기 코드에서 단일로 UPDATE 를 실행하면 건별로 DB의 I/O 발생이 일어난다. 만약 WHERE IN 으로 변경시 예를 들어 1000개의 단 건일 경우 WHERE IN 으로 500개씩 나누어 처리하면 최대 2건의 I/O 발생// 단일UPDATE userSET grade = 'A'WHERE id = 1;UPDATE userSET grade = 'A'WHERE id =..
Spring Batch 5 + Mybatis (JdbcItem Reader/Writer) 구현코드는 https://github.com/bkjeon1614/java-example-code/tree/develop/spring-batch-mybatis-codebase 참고 부탁드립니다.Spring Batch 4.x -> 5.x 대표적 변경 내용What’s New in Spring Batch 5.0Java 17 RequirementMajor dependencies upgradeBatch infrastructure configuration updatesBatch testing configuration updatesJob parameters handling updatesExecution context seriali..
관리 도구로서의 Jenkins 를 통한 Spring Batch 운영 Spring Batch 는 아직까지 확실한 표준 관리 도구가 없다고 한다. 그래서 보통 클라우드 서버리스, 따로 API 기반 호출, Spring Batch Admin(더 이상 개선하지 않으며 Spring Cloud Data Flow 로 전환하라고함), Spring Quartz, Jenkins, Teamcity 등의 방법을 사용한다고한다. 여기서 Spring Cloud Data Flow 가 러닝커브도 높으며 아직 국내에서 많이 사용되는 사례가 적으므로 그 전까지 보편적으로 활용되는 Jenkins 에 대해서 알아보기로 한다. 1. 장점 1-1. 관리기능 관리 도구의 대표 기능들에 대해 기본으로 지원된다. (Ex: Dashboard, 이력관리..
ItemProcessor 이전글: Spring Batch 8편 - ItemReader 작업코드: 작업코드 ItemProcessor 는 데이터를 가공하거나 필터링하는 역할을 하고 있으며 필수가 아니고 이는 Writer 부분에서도 충분히 구현이 가능 하다. 그럼에도 사용하는 것은 Reader, Writer 와는 별도의 단계로 분리되었기 때문에 비즈니스 코드가 섞이는 것을 방지 해주기 때문이다. Batch 에 비즈니스 로직을 추가할때는 가장 먼저 Processor 를 고려하는 것이 좋다. (각 계층 읽기/처리/쓰기 를 분리할 수 있는 좋은 방법) 1. ItemProcessor 란 ItemProcessor 는 Reader 에서 넘겨준 데이터 개별건을 가공/처리 해준다. 변환 Reader 에서 읽은 데이터를 원하..
ItemWriter 이전글: Spring Batch 7편 - ItemReader 작업코드: 작업코드 1. ItemWriter 란 ItemWriter 는 Spring Batch 에서 사용하는 출력 기능이며 Spring Batch 초기에는 ItemReader 와 마찬가지로 item 을 하나씩 다루었지만 Spring Batch2 와 Chunk 기반 처리의 도입으로 인하여 ItemWriter 는 item 하나를 작성하지 않고 Chunk 단위로 묶인 item list 를 다룬다. 상기 코드를 보면 ItemReader 의 read() 는 item 을 하나를 반환하지만, Writer 의 write() 는 인자로 Item List 를 받는다. 하기 이미지를 참고하자. ItemReader 를 통해 각 항목을 개별적으로 ..
ItemReader 이전글: Spring Batch 6편 - Chunk-Oriented Processing 작업코드: 작업코드 1. ItemReader 란 데이터 -> (읽기) -> ItemReader -> ItemProcessor -> ItemWriter -> (쓰기) -> 데이터 상기 프로세스와 같이 ItemReader 는 데이터를 읽어들인다. 꼭 DB의 데이터만 의미하진 않고 XML, JSON 등의 다른 형식의 데이터도 읽는다. 이외에도 Spring Batch 에서 지원하지 않는 Reader 들도 직접 만들 수 있다. Spring Batch 의 Reader 에서 읽어올 수 있는 유형은 아래와 같다. 입력 데이터에서 읽어오기 파일에서 읽어오기 DB에서 읽어오기 다른 소스에서 읽어오기 직접 커스텀한 R..
Chunk-Oriented Processing (Chunk 지향 처리) 이전글: Spring Batch 5편 - Spring Batch Scope & Job Parameter 작업코드: 작업코드 Chunk Spring Batch 의 Chunk 란 각 커밋 사이에 처리되는 row 수를 의미한다. 즉, 한 번에 하나씩 데이터를 읽어 Chunk 라는 덩어리를 만든 뒤, Chunk 단위로 트랜잭션을 다루는 것 을 Chunk 지향 처리라고 한다. 또한 Chunk 단위로 트랜잭션을 수행하기 때문에 실패한 경우엔 해당 Chunk 만큼만 롤백 이 되며, 이전에 커밋된 트랜잭션 범위까지는 반영된다. 상기 이미지의 프로세스는 아래와 같다. Reader 가 누적해서 읽어 Chunk Size 를 맞춤 Processor 에선 ..
Scope & Job Parameter 이전글: Spring Batch 4편 - Spring Batch Job Flow 작업코드: 작업코드 Job Parameter, Scope 외부/내 에서 파라미터를 받아 처리할 때 해당 파라미터를 Job Parameter 라고 한다. Job Parameter 를 사용하려면 항상 Scope 를 선언해야 하는데 Scope 는 크게 @StepScope 와 @JobScope 가 있다. 사용법은 아래와 같다. @Value("#{jobParameters[파라미터명]}") 그 외에도 jobExecutionContext, stepExecutionContext 등 에도 SpEL 로 사용할 수 있다. @JobScope 에선 stepExecutionContext 는 사용할 수 없고, j..