실시간 처리 - 명령에 대한 처리가 그 즉시 돌아오는 것
배치처리-명령을 모아놨다가 특정 시점이 되면 한꺼번에 처리
배치처리 - 멀티스레드, 스케줄러 포함
//시스템에 따라 최대 만들어낼 수 있는 스레드 갯수 다름.
->스레드 풀링
이거 쓰면 스레드 안봐도됨. 스레드 풀링 api가 다 만들어주고 관리해서
톰캣 요청 들어오면 어플리케이션 만들지 않고 스레드풀링으로 스레드 만듦. 확장 cgi방식 - 어지간해서 서버 죽지 않게 하기 위해.
최대 50개로 운영중
배치 처리 위해 알아야할것
1. 멀티스레딩
2. 스케줄링
task:scheduler - timer하고 비슷한 역할
fixedDelay. 마지막 작업이 끝난시점을 시작시점으로 - 5초에서 끝났으면 다음번 15초가 시작지점
fixedRate. 시간 간격을 시작 시점으로
0, 10, 20들이 시작시점
탈퇴 명령이 어느시점에 내려질지를 모름 - @scheduled의 cron표현식 사용
스프링에서는 스케줄보다 콰츠를 더 많이 씀
스프링 4점대는 quartz 2점대 쓰는데 스프링 3점대는 콰츠 1점대 써야됨.
작업정보만 정의되있음. 얘 혼자 실행 못함
작업을 생성하는 애랑 실행해주는애 있어야됨.
실행해주는 애가 트리거
트리거는 단독으로 동작 못하고 바닥에 필요한 환경구성애주는애 필요-스케줄러
콰츠는 리스너같은거 사용가능해서 중간중간 모니터링 가능. 그래서 콰츠를 더 많이 씀
탈퇴처리
자식들 먼저 지우고 지워야 - 프로시저 필요.
프로시저 만들고 mem_del이 y인 애들 조회해서 for문 돌리면서 자식테이블 지우고 mem_del 레코드 지움
프로시저와 fn의 차이 - 리턴값이 있냐 없냐.
탈퇴처리라 리턴값 굳이 필요x. fn실행하려면 일반적으로 쿼리문 안에서 실행해야되서 프로시저 사용.
스프링 코어만 가지고도 스케줄링 가능한데 리스너 구조가 없어서 확인이 어려워서 콰츠랑 연동하는것.
배치작업은 대부분 웹하고 연관없어서 보통 상위에 등록
간단한 예제
spring.io사이트 예제
일괄처리작업을 하는데 대용량일때 이 프레임웤 사용.
한전 고지서 발금
계측기 사용량 조회
20일이 되면 0시0분0초에 천만명 대상으로 요금계산 이루어져야됨
그 요금에 대해 고지서 발급
-한번에 끝나는게 아니라 단계적으로
하나의 배치작업이 세부적인 단계로 구성될때
잡, 세부-스탭
단계적으로 여러작업이 끝나야 하나의 일괄작업이 끝날때. 배치작업
하나 스탭
reader-계측값 읽어오기
processor-계측값에 따라 요금계산
writer-최종요금 어딘가에 저장해놓는것.
하나스탭-고지서발부
읽어와서 고지서 폼만들기(프로세서)-완성된폼 디비 넣거나 메일발송하기.
작업안에 여러개 스텝이 들어갈 수 있고 각 스텝은 읽고 처리하고 쓰기로구성.
배치 잡은 반드시 백그라운드 형태로 돌아가야, 멀티스레드로
이 작업을 실행할 수 있는 누군가 필요-job launcher
천만명 한번에 처리 못하고 조금씩 나눠서 처리-청크단위.
청크 처리하고 있는데 100개까지 처리하다가 중간에 정전남. - 현재 어디까지 작업이 됬고 이런거 작업됬다 저장되는애-jobrepository
임베디드디비-어플리케이션에 디비 내장되있는것
csv 컴마 세퍼레이트
다섯줄 읽은 다음 컴마로 구분해서 앞에있는거는 firstname, 뒤에 있는거는 lastname