개나소나고생
6k
2020-04-27 22:27:26
1
186

스프링 부트 배치 기술 문의


안녕하세요. 스프링 부트 환경에서 배치 프로세스 개발 하는데 있어서 궁금한 사항이 있어서 글을 올립니다.

환경 : Spring Boot + Quartz

문의사항

1.대체적으로 JOB을 수동으로 실행하려는 경우 인터페이스를 어떤식으로 제공하고 계신지 궁금합니다.

예: REST API / 제킨스 /  그외 제공 방식

2.서버가N대(최소2대이상) 존재하는 경우 JOB을 관리하면서 분산처리를 해야 하는데 Quartz 자료를 찾아보니 기본적인 DB스키마 테이블을 이용해 관리하는듯 한데..2대이상서버에서 관리하는 케이스는 Spring Boot Batch에서 각 JOB을 제어하거나 분산 처리가 가능한지 궁금합니다.

참고 자료 : https://github.com/elventear/quartz-scheduler/blob/master/distribution/src/main/assembly/root/docs/dbTables/tables_mysql.sql

0
  • 답변 1

  • 초무쿤
    5k
    2020-04-28 06:35:59 작성 2020-04-28 07:04:03 수정됨

    Control-M이라는 외산 배치솔루션이 있습니다.

    일단 배치쪽은 이게 거의 표준이라고 봐도 무방할정도라..자료 한번 참조해보시면 되실거 같구요.

    1)

    각배치 프로그램은 CLI로 구동가능해서 quartz 쪽에서 실행할때는 CLI명령어로 프로세스로 실행하여야 됩니다. 안그럼 배치에서 문제 생기면 스케줄러까지 내려가는 사태가 발생하구요.

    spring-boot deamon + quartz => CLI로 배치프로그램 Process 실행.

    (배치에서 문제 생겨서 프로세스가 내려가도 스케줄러 데몬프로그램은 정상)

    2)

    spring-batch 자체적으로도 분산 처리가 가능하나 하나의 배치에서 task를 분산처리하는 정도는 가능한것으로 알고 있으나

    배치프로그램을 개발하는 개발자가 분산처리까지 고려해서 개발해야되는 문제가 있어서

    실무에 적용하기는 힘들어 보이구요.


    만약 A,B,C,D...Z 까지의 배치프로그램이 스케줄링 되어있다고 가정할 경우...


    A) 보통 플랫폼 자체가 분산처리를 지원 못하고 배치서버가 N대가 있을 경우 부하에 따라서 

    A는 1번서버, B는 2번서버 이런식으로 스케줄링을 따로해서 운용하던지..(개발여건이 안될경우)


    B) 분산처리 시스템을 직접 개발을 하실꺼면 

    Control 서버 1대 ======> A서버,B서버 ...N개 서버로 라운드로빈 방식으로 Job을 요청하는 방식으로 개발하시면 될거 같습니다. (저같은 경우는 각서버별 pool capacity를 정해놓고 한가한넘 한테 먼저 던지는 식으로 구현했었는데..)

    인터페이스는 RMI통신이나 RESTful API로 하셔도 되구요.

    근데 분산 배치플랫폼은 개발하시는거 만만치 않으실겁니다. 시간도 많이 들어가구요.

    여건이 않되시면 A)방식으로 개발해서 사용하시는게 좋으실듯 합니다.

    사용하다 여건이 되면 클러스터링 기능만 확장해서 개발하면 되니깐요.


    ps. https://nexcore.skcc.com/ko/solution/bs/         <=== SK C&C에서 사용하는 배치스케줄러인데... 그나마 참조하실만 할겁니다.

    (PDF메뉴얼 한번 받아보시면...)

    헬지쪽꺼는 실제 쓰기 좀 그렇고요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.