Batch 작업은 서비스 플랫폼 관점에서 오류검출이나 예외 처리하기 상당히 불편한 기능중 하나입니다.
그래서 선행조건으로 스케쥴 작업을 왜 해야하는지 어떤검토가 필요한지 알아보도록 하겠습니다.
Batch 검토 시 고려 사항
비지니스 관점으로 볼때, 고가용성(대용량, 매우빠른배치전략) 이 필요한지 검토
데이터 안정성이 꼭필요한지 유실되도 문제 없는지에 대한 검토
연속으로 순서가 보장되어야 하는 비지니스를 가지는 배치가 있는지 검토
개발자가 배치를 개발할때 편하게 생성하고 관리나 모니터링 오류등을 확인할수 있는지 검토
관련 비지니스가 꼭 배치로 작업이 되어야 하는지 검토
장기적인 관점에서 개선이 가능한 배치방향인지 검토
Spring Batch
Spring Batch 는 읽기, 처리, 쓰기 단위를 명확히 구분 하는 구조를 가지고 있기 때문에
약간의 학습으로 빠르게 Batch Job 생성이 가능하지만 트랜잭션 구성은 좀더 러닝커브가 존재합니다.
Step은 Tasklet 으로 Reader & Processor & Write 3가지 기능을 가지고 있는 묶음으로도 구성으로 가능합니다.
Spring Batch는 프로젝트 생성 만으로 동작하는 구조가 아님
Spring Batch가 동작과 관련된 정보를 담고 있는 메타 테이블이 필요
메타 테이블에는 아래와 같은 정보들이 저장됨
- 이전에 실행된 Job 상태
- 최근 성공, 실패에 대한 Spring Batch Parameter 정보
- 실행된 Job에 어떤 Step들 성공, 실패 했는지 정보
- 다시 실행 할 경우, 어디서 부터 실행해야 될지 시작 지점 정보
참고 : metaDataSchema.html
Batch 실행
Spring Batch를 통해서 비즈니스 로직이 만들어 졌다면,
특정 상황에 맞게 배치가 실행될 수 있도록 실행 환경이 구성되어 있어야 합니다.
Batch Job 일 실행시키는 스케쥴 라이브러리에 대해서
가볍게 장단점을 정리해 보도록 하겠습니다.
Spring @Scheduled | Jenkins |
장점
|
장점
|
단점
|
단점
|
TeamCity | Spring Cloud Data Flow(SCDF) |
장점
|
장점
|
단점
|
단점
|
Batch 실행 전략
스스로 실행되는 배치
- URL 요청 등에 빠르게 대응하기 위해서 미리 캐시에 넣어 놓고 실행되는 형태
- 특정 시간에 스스로 활성화 되어 캐시를 만들어 줌
- 스스로 동작하는 형태 이므로 외부에서 요청되는 형태가 아님
- 미리 실행에 필요한 데이터가 준비된 형태로, 배치 실행 중에 준비된 데이터는 거이 변경되지 않음
- 준비된 데이터를 기준으로 배치 실행시 매번 새로운 데이터가 생성 혹은 수정되는 형태
- 배치 실행 시간이 비교적 짧음
- 중복된 실행에도 크게 리스크가 없음
외부 요청에 따라 실행되는 배치
- 외부 요청에 의해서 데이터가 취합되고, 취합된 데이터를 기준으로 실행되는 형태
- 취합된 데이터 자체가 실행된 배치에 의해서 변경될 수 있으며, 배치 실행이 길어 질 수 있음
- 매번 실행될 때 결과가 다를 수 있음
- 실패시 재 요청에 대한 전략이 필요함
특정 조건이 만족되어서 선행 배치 실행 후에 다음으로 실행되는 배치
- 특정 조건 예를 들어 서버에 가용자원에 80% 이상일경우 사용되지 않은 파일 자동백업 폴더 이동 및 파일 삭제
Batch 작업시
진짜 중복 코드(True Duplicate) VS 현재 상황에서 어쩔수 없이 발생되는 중복(Accident Duplicate)
True Duplicate | Accident Duplicate | |
이론 | 개발을 진행하다 발생하는 중복 코드를 의미 하며, 시간이 지나 비즈니스가 발전하게 되면, 지속적인 문제를 만들기 때문에 중복을 제거하는 것을 목적으로 리팩토링을 진행해야 하는 현상을 의미함 |
예기치 않게 성격이 다른 여러 프로젝트에서 중복되는 코드로 이 중복되는 코드를 제거 하려면 오히려 많은 노력이 들게 되며, 중복된 코드로 시작했지만 시간이 지나면서 많은 유지 보수나 비즈니스 복잡도가 올라가게 되면 점차 중복되던 코드가 희미하게 다른 코드를 가지게 되는 현상을 의미함 |
상황 | 보통 레거시 코드에서 많이 발생하며, 현재 코드가 어느 부분까지 영향을 미치는지 알지 못하여, 같은 코드를 복사해서 만들면서 발생함 |
여러 프로젝트에 걸쳐서 데이터를 가볍게 다루는 value 성격의 코드는 중복 제거하는 것은 쉬울 수 있으나 비즈니스 코드가 있는 경우, 같은 중복 코드이나 성격이 다른 프로젝트에서 전혀 다른 목적을 가지고 쓰일 수 있기 때문에, 중복을 제거하는 것이 매우 힘들어 오히려 중복되는 것이 효율적일 수 있음 |
웹 어플리케이션과 배치
중복된 코드를 바라보는 관점에서 배치의 코드와 웹 어플리케이션 코드가 중복될 수 있으나,
이는 Accident Duplicate일 가능성이 상당이 큼,
또한 같은 프로젝트 상에서 위와 같은 코드만 관리 되는 것이 아니라
환경 설정 정보( 멀티 DB리소스 설정, API 연동 등) 등에서
매우 다르게 적용될 가능 성 있으므로 하나 프로젝트에서 멀티 모듈로 관리하게 되면
다양한 관리 이슈가 발생할 수 있을 것으로 생각됨
멀티 모듈에 포함된 배치 | 단독으로 구성한 배치 | |
장점 |
|
|
단점 |
|
|