4. 구 배치 수집 현황
• 스케쥴링 : RAC XML에 명시된 Quart JOB 을 수행
• 마샬링 : Xstream
• 일 수집 데이터 평균 건수 : 10만건
• 배치 JOB 건수 : 9 건
• JOB 이력 관리 단일 테이블을 통해 전체 JOB 이 수행 여부 체크
• (조건 : 완료가 안되었거나 작업 완료후 4시간 지난경우)
5. 문제점
• 특정 시간 혹은 작업 이력테이블상에선 알수 없는
이유로 인해 배치가 동작이 안됨
• 특정 JOb 구동시 3시간 30 분 이상 소요
가 되며
시간이 지날수록 점차 증대
• 재 구동시에도 반복적인 현상 발생되며 톰켓상 오류로는
배치 상세 문제 확인이 어렵고 테스트가 불가능
.
6. 장애 및 지연 원인
• 1건 처리시마다 Sleep 구간을 두어 시간이 지연
• 대량의 데이타 등록후 데이타 미삭제로 인해
인덱스 단편화 발생되어 성능 하락
• 특정 JOB 실패시 작업 이력 테이블 삭제가 되며
해당 JOB 재시도가 아닌 전체 배치 재 구동되어 시간 지연
• 데이터 한건마다 트랜잭션을 수행하며 대량 데이터 일괄 처리를
위한 ORM BATCH 기능 부재
7. 조치 사항
• 시간 체크주기를 3 시간에서 4 시간 으로 임시 증가
• 배치를 재 구동후 전체가 완료될때까지 수동 모니터링
• JOB 별로 하나씩 처리후 Tomcat Restart 후 반복 확인
8. 근본적인 문제
• 로깅 및 메세지 , 예외 처리 문제
– 특정 배치 JOB 에 대한 실행, 시작, 종료, 성공 여부, 오류 사항에 대한 로그가
없어서 명확한 원인 파악이 불가능
• 모니터링 시스템에 대한 부재
– 배치 오류시 개발자에 의한 확인보다는 장애 확인요청에 의한 대응
• 일괄 처리 정책 미흡
– 대량의 데이터 처리시 DB 에 영향을 최소화 하며 일정 단위로 나누어 한꺼번에
처리하는 방법이 필요함
• 부분 처리에 대한 고려 필요
– 실행 중인 작업이 중간에 에러 발생시 전체 작업을 재시도하기때문에 진행 부분에
대한 파악이 어려움
• 테스트 환경의 어려움 :
– 처리되는 전체작업을 하나의 단위로 처리하는 경우가 많기 때문에 에러 발생시 디
버깅에 어렵다.
9. OVERVIEW
• 배치 소개
• 개선 방향
• 솔류션 평가 및 선정
• 추진 계획
• 개선 결과
11. 사용자와의 상호 작용
• 일반적인 온라인 Application 과 달리 사용자에 의해
실행이 결정되지 않는다 .
• 주어진 시간외에 독립적으로 배치를 실행 지원
• 실시간 동작되는 배치를 업무 필요상 중단 혹은 재
시작을 손쉽게 할수 있어야 한다.
12. 정해진 시간내에 실행이 완료
• 사업 및 기획 요구 특성에 따라 수집 데이터 증가되고
있으며 전형적인 CNP 패턴으로 유사 코드 반복으로
인해 정책 반영이 느림
• WAS 위에 동작되는 어플리케이션으로 서로 다른 배치
가
영향을 주고 받아 성능 문제 발생
• 업무 로직 개선과 배치 분리 개선 병행
13. 대량의 데이터를 다루기 위한
성능 최적화
• 배치 처리 에러 발생시 전체가 롤백됨
• 트랜잭션 단위가 껀별로 진행되어 성능지연
• 전체 ( 성공 &실패) 단위로 배치가 구성되어 부분 처
리 미흡
• FILE 및 DB I/O 최소화 및 프로그램 최적화
• 병렬 처리
14. 관리 시스템 구축과 기반 설계
• 모듈 활용의 부족
• ORM BATCH 기능 부재
• 장애 관련 모니터링 시스템 부족
• 배치 상세 모니터링 시스템 구성
• 아키텍처 모듈 최적화
• 배치 정책 (재시도, 재시작,건너뛰기) 수립
• SPRING 및 오픈 소스 최대 활용
• Jenkins 활용한 배치 모니터링 시스템 구성
15. 배치 서비스 표준화
• 배치에서의 정보 항목등이 명확하지 않음
– 작업주기, 작업 유형 , 작업 현황 정의
• 배치 기술 유형이 불분명하고 , 기술 유형별로 구현 방
법이 상이
– 입출력 리소스 추상화 , 사용 도구 , 처리 흐름 , 적
용 기술
16. 배치 서비스 표준화
• 개인역량에 따라 각기 배치 어플리케이션의 보안 , 성
능,
자원관리 개발이 이루어지고 품질 확보가 어려움
• 기존 Batch SYSTEM
– Linux 의 Crontab을 이용한 Shell Script
– Windows 의 작업스케쥴러를 이용한 batch script
– Web Service 안에 Web Call 호출 방식
– Web Service 안에 QuartzJob 이용
– 자체 배치 플랫폼 개발
– Legacy (C, C++, php, ETL, rsync, perl, python, Pure Java)
17. 배치 서비스 표준화
• 트랜잭션에 대한 깊은 고민 부족
– 지나치게 긴 트랜잭션은 DB 자원 (Rollback
Segement)
한계 부딪칠 가능성 높다
– 짧은 트랜잭션은 좋은 성능 보장이 어려움
DB 및 운영 특성에 맞게 일정 사이즈로 데이터
를
균일하게 Fetch 하여 적정횟수 만큼 Commit
문서 참고 : http://helloworld.naver.com/helloworld/1247
18. 배치 서비스 표준화 개선 절차
• 비즈니스 변화에 대한 빠른 대응과 저 비용으로
고품질을 만들수 있어야 한다.
• 유형별로 빨리 만들어 낼수 있어야 한다.
• 반복되는 로깅, 보안, 예외처리, 신경 끄기
• 개발자에게 노출이 필요한 부분 최소화
• 배치 기반 특성이 충분히 반영되어야 한다
19. OVERVIEW
• 배치 소개
• 개선 방향
• 솔류션 평가 및 선정
• 추진 계획
• 개선 결과
20. 솔류션 평가 및 선정
• SPRING BATCH
• SPRING DATA JPA
• SPRING BOOT
• JdbcTemplate
• Java Configuration
21. SPRING BATCH + ALPHA
• Run Tier : 실행과 스케쥴링 담당 ( Spring Boot, Jenkins)
• Job Tier : 전체적인 JOB 수행 책임 (Spring Batch)
• Application Tier : JOB 을 수행하는 필요한 컴포넌트
(Spring Data Jpa, Java Configuration)
• Data Tier : DataBase, Flat, XML 등 물리적 데이터 리소스
22. SPRING BATCH
• Spring 의 기술력과 컨설팅 회사인 Accenture 의
대형 금융권 배치 기술 아키텍처의 경험이 녹여듬
• 자바 환경에서 사실상 표준인 Spring 활용
• 국내 및 해외 유수 보험 및 금융기관에서 채택되어
전사 표준 배치로 사용중
• Spring 추상화 기술로 특정 기술에 종속적이지 않음
24. SPRING BATCH
문서 참고 : http://docs.spring.io/spring-batch-old/1.1.x/spring-batch-docs/reference/html-single/index.html
25. SPRING BATCH
• 혼자 이해하던 복잡한 Legacy 배치를 배치 프
레임워크 변환후 동료들과 공유 가능
• JOB 문제시 추적 범위가 좁혀져 오류 발생시
원인파악이 쉬움
• 코딩량이 이전에 비해 ½로 줄어듬
• 배치 로직 구현이 단일건 대상으로 이해가 쉬
움
26. SPRING DATA JPA
• 도메인 클래스에 대한 투명한 감시 및 관리
• 페이징 지원, 다이나믹 쿼리 수행, 데이터 엑세스 코드를 도메인에 통합
• ANNOTATION 으로 테이블 매핑
28. SPRING DATA JPA
• 반복적인 쿼리 노가다 삽질 작업 제거
• 엔티티 기반 도메인 설계에 집중
• 비즈니스 로직 구현 최소화
• 인터페이스 정의만 하면 알아서 구현체 생성
• 변경 사항에 대한 개발 기간 단축
• 코딩량이 이전의 ½ 로 줄어듬
• 손쉬운 테스트 코드 작성
29. SPRING BOOT
• Spring 프로젝트 개발을 빠르고 다양한 방법으로
시작할수 있도록 한다.
• 설정을 위해 별도의 코드 구현이 없으며 XML 이
필요치 않다.
• Tomcat 과 Jetty가 내장됨
• 임베디드서버, 시큐리티, 헬스체크, 외부 설정 연
계등 개발의 모든 사이클을 제공한다.
31. SPRING BOOT
Endpoints
ID 설명
Autoconfig 자동 설정되거나 설정되지 않는 목록들과 그 이유
Bean 어플리케이션에서 선언한 Bean 목록들
Configprops Properties 로 선언된 목록들
Dump Thread Dump
Env 시스템 환경 및 어플리케이션 환경 목록
Health 어플리케이션 상태 체크
Info 어플리케이션 정보
metrics 어플리케이션의 메트릭스 정보
mappings @RequestMapping 에 매핑된 경로 정보
shutdown 어플리케이션 종료
trace Http 요청 정보
36. OVERVIEW
• 배치 소개
• 개선 방향
• 솔류션 평가 및 선정
• 추진 계획
• 개선 결과
37. 추진 계획
2014
3월 4월 5월
13 19 03 30 08 20 28
Start With GitHub
1차 Prototype 구현
성능 테스트
Major JOB 완료
및 모듈 구성
2차 Prototype
Spring Data JPA 연동
Spring Boot 연동
망별 성능 테스트
End With Live Deploy
Jenkins 을 활용한 스케쥴링
Timeline
38. OVERVIEW
• 배치 소개
• 개선 방향
• 솔류션 평가 및 선정
• 추진 계획
• 개선 결과
43. 운영 및 모니터링 개선
• Spring Batch Listener 를 활용한 배치 상세 로그 관리
– Job 별 수행건수, 수행시간, 에러메세지, 배치 상태,
커밋, 롤백, 파라미터 관리, Skip, 에외 처리 기록…
44. 운영 및 모니터링 개선
Spring Boot 를 활용한 어플리케이션 생성 , JOB 손쉬운 관리
#SPRING BATCH
Spring.batch.job.names=armorItemXmlToDbJob
Spring.batch.job.enabled=true
Spring.batch.initalizer.enabled=false
• spring.batch.job.names : Context 에 등록된 Bean 중 해당하는 JOB 만 명시적으로 선
언하여 사용할지 선택하며 comma 로 구분
• spring,batch.job.enabled : Spring Ruuner 가 구동시 모든 JOB 을 수행할지 여부
• spring,batch.initializer.enable : 데이타베이스 플랫폼에 해당하는 SQL 초기화 스크립
트를 수행 여부
45. 테스트 및 유지보수 개선
• 망별 환경설정을 통해 XML , URL Resource 자동 분기
– Spring.profiles.active, spring.core.io.resource
46. 테스트 및 유지보수 개선
• 단계별 JOB 수행 및 테스트 코드를 통해 빠른 테스트
진행 및 선택적 확인 가능
– Full Test Code Support
47. 테스트 및 유지보수 개선
• SPRING DATA JPA를 통한 반복적 쿼리 작업 제거
NO
48. 테스트 및 유지보수 개선
• Web Project에서 배치를 제거하여 관심 분리
• 유지보수 집중화
WEB WEB
BATCH
BATCH
49. 로직 개선
• 쿼리 및 비즈니스 로직 최소화
MVC
패턴
SPRING
DATA
SPRING
BATCH
SPRING
DATA
Domain -> Service -> ServiceImpl -> DAO -> DaoImpl -> 쿼리
Domain -> Service -> Repository
Domain -> Processor
51. 고려사항
• 코드양은 줄어드는 반면 개념이해는 필수
• SPRING 프로젝트들은 계속 진화중
• SPRING-BATCH 는 동일 JOB Repository 에 동일한 JOB-NAME 과
JOB-PARAMETER 로 JOB Instance 생성 불가
• BATCH JOB 은 성격이 다양하기 때문에 SPRING에서 다양한 해결
방법을 지원한다
• 바퀴를 재 개발하지 말고 오픈 소스를 찾아서 사용하자
• 장애 발생을 최소화 하고 TestCase를 통해 사전에 문제를 예방
• 테스트가 어느 자리, 어느 망에서도 쉽게 재현되도록 준비