배치관리 및 실행 구현시 고려할 것.
1. 배치들 간의 의존성
배치들 사이에도 dependency가 존재할 수 있다. 먼저 특정 배치가 돌아야 그 다음 배치를 돌릴 수 있는 그런 관계의 배치 작업. 선행하는 배치가 먼저 실행되었는지, 그 결과는 어떤지에 따라 현재 배치 작업을 실행해야 하는지 패스해야 하는지 알 수 있다.
2. 배치 실행
배치 실행은 쿼츠를 사용하여 주기적으로 배치가 실행되어야 하는 시간을 확인하여 실행한다. Ant로 빌드 스크립트 짜고 리눅스의 클론좝인가로 돌릴 수도 있고, 독립적으로 쿼츠를 실행할 수도 있는데, 스프링을 사용하면 applicationContext.xml에 간단한 빈 설정을 통해 애플리케이션 구동시 쿼츠 스케쥴러를 가동할 수 있다.
3. 배치 결과
배치 결과, 배치 시작 시간, 종료 시간, 시도 횟수, 에러 로그 정보를 기록한다. 이 때 배치작업이 예외를 던지고 뻗어도 배치 결과는 DB에 저장이 되어야하기 때문에, 두 개의 작업은 별도의 트랜잭션으로 다뤄져야 한다. 스프링을 사용한다면, REQUIRED_NEW 를 사용하면 현재 트랜잭션은 잠깐 멈춰두고 새로운 트랜잭션을 만든다. 그리고 그걸 끝내든 롤백하든 마무리하고 기존에 대기해뒀던 트랜잭션을 다시 사용하게 됨으로 이런 경우에 매우 적절하다.
4. 로그 메시지
일관되어 보기 좋은 형태로 로그 메시지를 출력해야 하며, 필요한 지점에 효율적으로 로깅을 해야한다. 로깅의 레벨을 조정하여 info, debug, error 등을 잘 구분하여 메시지를 남기도록하자.
5. 테스트하기
어렵다.