Batch 작업의 경우 코드 상에서 cron으로 Job 스케줄링을 진행하고 있음.
이 스케줄에 따라 수행된 Job과 Step을 모니터링 할 수 있는 배치 관리 도구를 리서치하여 사용하고자 함.
결론: Jenkins / Spring Cloud Data Flow / TeamCity 중 선택
Jenkins
- 장점
- 대시보드 / 이력관리 등 관리를 위한 도구가 기본으로 제공됨 >> 모니터링 용도로 적합
- Email, Slack 등 여러 소프트웨어와 통합해 알림 설정 가능 >> 모니터링 용도로 적합
- 다양한 Job 실행 방법을 제공 >> 모니터링으로만 사용한다면 중요하지 않음
- cron 스케줄링
- 직접 수동 실행
- HTTP API
- Job Trigger : 현재 Job 실행 후 지정된 배치를 후속 실행시키는 것도 가능
- 풍부한 레퍼런스
- 오래되고 인기 있는 소프트웨어라, 관련 커뮤니티/자료/플러그인이 활성화 되어 있어 다양한 기능을 쓸 수 있고 정보를 얻기 쉬움
- Monitoring >> 모니터링 용도로 적합
- Jenkins HTTP API 응답시간, 메모리, CPU 등을 모니터링 해주는 플러그인
- Monitoring >> 모니터링 용도로 적합
- 오래되고 인기 있는 소프트웨어라, 관련 커뮤니티/자료/플러그인이 활성화 되어 있어 다양한 기능을 쓸 수 있고 정보를 얻기 쉬움
- 파이프라인 >> 모니터링으로만 사용한다면 중요하지 않음
- Step이 아닌 Job을 최소 단위로 사용한 파이프라인을 만들어 순차 실행, 병렬 실행, 병렬+순차 실행 등으로 실행 순서를 다양하게 설정할 수 있음
- 파이프라인에서 간단히 반복문으로 날짜를 변경해 Loop 실행이 가능
- Master-Slave Node 환경을 이용한 배치의 분산 실행 (본래 용도는 분산 빌드) >> 모니터링으로만 사용한다면 중요하지 않음
- 여분의 서버가 있고 SSH로 연결이 가능하다면, Master 젠킨스가 별도의 실행 환경을 구성해 Slave Node로 batch 분산 처리를 해 줌
- 예를 들어, Slave Node로 특정 일자를 4등분하여 처리하는 것도 가능
- 예를 들어, Slave Node로 특정 일자를 4등분하여 처리하는 것도 가능
- 여분의 서버가 있고 SSH로 연결이 가능하다면, Master 젠킨스가 별도의 실행 환경을 구성해 Slave Node로 batch 분산 처리를 해 줌
- 단점
- 검색 기능/페이징 기능이 빈약해, 원하는 실행 기록을 찾는 것이 어려움
- 모니터링을 위해 배치 실행 기록을 검색하는 데 구현할 것이 많다 (초기 설정이 많이 필요)
- Jenkins API를 이용해 배치 실행 기록을 검색하는 데 API호출이 많이 필요하므로, 이것을 좋은 성능으로 보여주기 위해 내부에 코드로 작성할 부분이 있음
- Jenkins API를 이용해 배치 실행 기록을 검색하는 데 API호출이 많이 필요하므로, 이것을 좋은 성능으로 보여주기 위해 내부에 코드로 작성할 부분이 있음
[참고 자료] https://jojoldu.tistory.com/489 https://wbluke.tistory.com/61 |
Spring Cloud Data Flow
- 장점
- Spring Framework와 매우 밀접하게 사용할 수 있음
- 배치 프로젝트에 @EnableTask를 붙여 Spring Cloud Data Flow에 Task로 쉽게 등록하는 등 => 스프링 클라우드 테스크와 스프링 배치를 통합시켜 테이블을 연결해 모니터링이 가능
- Batch 모니터링이 수월하다는 평가 (대시보드와 UI가 잘 되어 있고 활용이 편리)
- 필요하면 GUI를 이용해 배치를 설정하는 것도 가능
- 세부 상태 리포트 조회, 실패 잡 재시작 기능 제공
- Cloud Foundry와 Kubernetes 환경에서 스트리밍(Streaming) 및 일괄 처리(Batch Data Processing) 파이프라인을 구축하기 위한 툴킷 >> 배치 모니터링에는 배치 관련 기능만 사용
- Docker와 Kubernetes 연동이 가능
- Spring Framework와 매우 밀접하게 사용할 수 있음
- 단점
- 국내에서 사용하기 시작한지 얼마 되지 않아서, 사용 방법에 대한 레퍼런스가 많지 않음
- 구축에 시간이 얼마나 걸리는지 알 수 없음
- 문제가 생겼을 때 해결에 시간이 걸릴 수 있음
- 국내에서 사용하기 시작한지 얼마 되지 않아서, 사용 방법에 대한 레퍼런스가 많지 않음
TeamCity
- 장점
- IntelliJ와 통합되어 모니터링이 원활
- 친절한 UI/UX, 인텔리제이에서 바로 확인이 가능한 UI
- Docker와 연동이 쉬움
- Job, Step 실행 순서의 제약 없이 원하는 부분만 외부에서 실행시킬 수 있음
- 운영 환경에서도 잘 동작하는지 확인하는 테스트를 로컬에서 원격으로 실행시킬 수 있어, 동작 확인을 위한 배포가 필요하지 않음
- remote로 테스트하면서 관련 로그를 인텔리제이를 통해 알려줌
- 무중단 배포가 가능
- IntelliJ와 통합되어 모니터링이 원활
- 단점
- 유료이다.
- 하지만 무료 버전으로도 기능이 충분하다고 함
- 유료이다.
[참고 자료] https://songkg7.tistory.com/98 https://jojoldu.tistory.com/448 https://www.jetbrains.com/help/teamcity/teamcity-documentation.html |
GitLab CI/CD
- 장점
- 소스 코드와 CI/CD 파이프라인을 한 곳에서 관리하는 통합된 환경
- .gitlab-ci.yml 파일 사용으로 파이프라인을 정의. 이 파일은 프로젝트 소스 코드에 포함되어 있으므로 개발자들이 별도의 화면 전환 없이 코드와 함께 파이프라인을 설정하고 업데이트 할 수 있음
- 설정 파일 자체를 검증할 수 있고, 잘못 설정하더라도 이전 상태로 돌아가기 쉬움
- GitLab 설치 즉시 사용할 수 있는 간편함
- 다양한 러너 지원
- Docker 러너를 사용해 수많은 기능을 바로 사용
- 젠킨스와 달리 셀프 호스팅이나 SaaS 제공이 됨
- 소스 코드와 CI/CD 파이프라인을 한 곳에서 관리하는 통합된 환경
- 단점
- Jenkins에 비해 플러그인 생태계가 좁다. = 원하는 기능을 사용하기 어려운 경우들이 있어 작은 프로젝트에 적용하는 것이 좋다는 의견이 있음
[참고 자료] https://insight.infograb.net/blog/2023/08/10/gitlab-jenkins-comparision/ https://sunrise-min.tistory.com/entry/Gitlab%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-CICD https://somaz.tistory.com/202 |
AWS CodePipeline + AWS Batch
- 장점
- AWS 서비스인 Batch를 사용해, Batch 작업을 GUI를 이용해 만들 수 있음
- AWS Batch를 CodePipeline 서비스와 연결하면 Batch 작업 모니터링이 가능
- AWS Batch는 추가 비용이 없고 무료, Batch가 돌아갈 때 사용한 AWS 리소스에 대한 가격만 지불(EC2 등)
- 단점
- Batch 코드상에 있는 내용을 AWS UI로 옮겨서 작성이 필요. 이 때 이미 작성한 Batch 코드를 삭제하고 AWS의 서비스 상에 세팅을 해야하는데, 이미 batch 코드를 작성해 둔 프로젝트의 진행 상황 상 시간이 걸리고 불필요한 작업이 될 것이라 예상