대용량 데이터 처리
대용량 데이터 처리를 위한 기반 환경 제공
Batch Core, Batch Execution, Batch Support
사람의 상호작용이 아닌 컴퓨터로 작용이 일어남
- 대량의 데이터 전송
- 웹사이트 로그 통계 분석, 회계 결산, 쇼핑몰 일일 결제 취합 등
반복적으로 수행해야 하는 작업에 배치를 사용
*유효하지 않은 데이터도 예외적으로 처리할 수 있어야 한다.
DB 데이터를 읽고 처리할 때 DB에 많은 부하를 주게 된다.
다른 어플리케이션의 성능이 저하되는 문제가 발생할 수 있다.
사용자가 적은 새벽 시간대에 배치 프로그램을 많이 들 돌린다.
신뢰성은 배치 실행 결과를 확인할 수 있어야 한다. 몇 건의 데이터가 처리되고 문제가 되며 원인 분석도 되어야 함
스프링사와 액센츄어라는 회사가 같이 개발한 배치
스프링 배치에 녹아들어져가 있다.
Dependency Injection, AOP, 서비스 추상화 -> 스프링 핵심 기능 모두 사용
- Batch Monitoring 기능 제공 (몇건의 데이터가 처리됬는지, 몇건으 데이터가 문제가 발생했는지)
- Chunk 기반의 데이터 처리 지원 (데이터를 묶음 단위로 처리)
- Retry, Repeat, Skip - 문제가 발생했을 때 처리
- Quartz, Command Link, Web 등의 외부 트리거를 통한 실행 지원
Quartz: 자바 스케줄러 라이브러리, 리눅스의 크론이나 윈도우의 잡 스케줄러 같은 기능들이 없어도 자바 라이브러리 쿼츠만 가지고도 배치 프로그램을 정해진 스케줄에 따라서 배치를 실행할 수 있게 된다.
Command Line: 리눅스의 셸이나 윈도우의 프롬프트 창에서 배치를 실행하는 것을 의미한다.
Web: 웹 어플리케이션에 스프링 배치 구성요소를 미리 등록해두었다가 사용자의 요청이 왔을 때 배치 잡을 실행시킬 수 있는 것을 말한다.
JobLauncher: 사용자의 배치 실행 명령을 받아서 Job을 실행시켜주는 역할
Job: 배치 프로그램의 중심적인 개념, 여러 개의 Step으로 나누어서 실행을 할 수 있다.
Step: 크게 두가지 방식으로 구성할 수 있다. Item 단위로 읽고 처리하고 쓰는 방식이 있다. Item은 DB로 봤을 때 DB의 테이블의 레코드 한 줄을 아이템이라고 볼 수 있다. 파일은 플랫한 파일, 텍스트 파일이나 CSV 파일은 한줄, XML은 특정 엘리먼트 한개를 Item이라고 할 수 있다.
조금 더 커스텀한 업무 처리를 해야할 될 때가 있다.
그럴 때
JobRepository는 DB 또는 메모리 방식으로 구성할 수 있다.
모든 이력이 기록됨
이력을 통해 배치가 실행된 결과를 확인할 수 있다.
모니터링 용도로도 활용될 수 있다.
Application: 개발자가 직접 작성한 비즈니스 로직을 커스텀한 코드들
Batch Core: Batch Job을 실행하는데 필요한 구현체들 (JobLauncher, Job 등)
Batch Infrastructure: 배치 프로그램을 실행하는데 있어서 필요로 하는 부가적인 기능들 (예외처리, 트랜잭션)
스프링 배치의 전체적인 실행 흐름
Run Tier : 외부의 트리거에 의해서 배치를 실행 영역
Job Tier: 실행 명령을 받아서 Job을 실행하는 명령어 영역
Application Tier: 개발자가 작성한 비즈니스 로직, Step이 실제로 동작되는 영역
Data Tier: 데이터를 입출력하는 데이터가 저장되어 있는 데이터 영역
회색박스: 스프링 배치 범위에 포함되지 않는 외부 어플리케이션
파란색 박스: 스프링 배치에서 제공하는 서비스들
초록색 박스: 개발자가 직접 구현을 해야하는 부분들
배치를 실행했을 때 처리 도중에 발생하는 여러가지 이벤트 정보를 기록해주는 저장소 역할
배치잡이 언제 시작됐고 언제 종료됬는지 실행결과는 어떤지 메타 데이터들이 저장
Job Repository 설정 예시 코드
namespace를 이용해서 job repository를 설정하는 예시 코드
기본적인 빈태그를 이용해서 job repository를 설정하는 예시 코드
job repository를 설정하는 방법
- 데이터베이스 방식: 배치를 실행한 이력을 남겨야 될 때, 모니터링을 해야 될 때, 중복 실행을 방지하고 싶을 때 -> JobRepositoryFactoryBean 사용 (DataSource 주입)
- 메모리 방식: 배치 실행 이력을 남길 필요가 없을 때 설정해서 사용할 수 있다. MapJobRepositoryFactoryBean 사용해서 설정
Spring Batch를 DataBase 방식으로 실행하려면 아래와 같은 테이블들을 미리 생성해야 한다.
스크립트 문은 스프링 배치 코어 jar 파일 안에 각각의 DB 유형별로 포함되어져 있다.
미리 잡 리포지토리 테이블들을 생성해주면 된다.
사용자의 실행 명령을 받아서 잡을 실행시키는 역할
실행시킬 잡 이름과 잡 파라미터를 입력 받아서 잡을 실행시키게 됨
잡 런처 인터페이스 이 run 메소드를 보면 잡을 실행시키기 위해 필요로 하는 아규먼트를 확인할 수 있다.
잡 객체와 잡 파라미터즈 두 개의 인자값을 받고 있다.
jobLauncher 인터페이스를 구현해서 기본으로 제공하는 클래스로는 SimpleJobLauncher 클래스가 있다.
이 잡 런처를 설정할 때 리포지토리를 필수로 주입
잡은 동기적 실행과 비동기적 실행으로 실행
동기적 실행: 잡이 실행했을 때 종료될 때까지 대기 상태로 있는 것
비동기적 실행: 잡이 실행했을 때 바로 잡이 종료처리 되는 것을 말한다. 실제로 그 잡은 백그라운드 쓰레드로 계속 동작. 실제로 종료가 됬을 때는 잡 리포지토리에 상태 정보를 저장하게 된다. 기본적으로 taskExecutor를 설정하지 않으면 동기적 방식으로 실행된다.
잡 러너
외부 실행 모듈과 잡 런처를 연결해주는 모듈
스프링 배치 커맨드 라인 러너 제공
표준 프레임워크 확장해서 제공
범용적으로 사용할 수 있는 이가브 러너 제공
커맨드 라인에서 잡을 실행
웹 어플리케이션에서도 잡을 실행할 수 있게 된다.
어플리케이션 내부에 쿼츠 라이브러리들을 포함시켜서 스케줄링해서 잡을 실행시킬 수 있다.
감사합니다.
'전자정부프레임워크' 카테고리의 다른 글
1. 프로젝트 메모 (0) | 2024.02.13 |
---|