배민이 원하는 인재 - 자기보다 경험이 적은 사람한테 설득당할 수 있어야하고 자신보다 경험이 많은 사람을 설득할 수 있어야한다. <- 이거 완전 나
배치 애플리케이션은 우리가 흔히 말하는 API를 말하는 것이 아니고, 배치 처리는 컴퓨터에서 사람과 상호 작용 없이 이어지는 프로그램 작업들의 실행이다.
사람과 상호 작용 없이라는 것이 웹 애플리케이션과의 가장 큰 차이다. (요청 후 응답 없음 -> 요청 하나만으로 모든 작업이 처리되고 끝)
- Web: 실시간 처리 / 상대적인 속도 / QA 용이성
- Batch: 후속처리 / 절대적인 속도 / QA 복잡성
둘 중에 뭐가 더 좋나요? 스프링 스케쥴러가 더 좋나요? 와 같은 질문이 매우 많음..
Queartz는 스케줄링 프레임워크다. 배치의 여러가지 실행 방법 중 하나인 스케쥴링 프레임워크.. 배치를 대체한다 막 이런거는 말이 안된다. 스프링 배치의 보안제 역할이지 대체제가 아니다.
- 일정 주기로 실행되어야 할 때
- 실시간 처리가 어려운 대량의 데이터를 처리해야 할 때
- 메인 테이블 데이터가 정산시스템은 5억건의 이런 대량 데이터들은 API보단 배치로 하는 것이 훨신 좋음
- 어떤 배치는 집계, 통계, 캐시 등 여러 배치 작업들을 진행중
일정 주기? 쿼츠? 배치? 한달에 한 번 실행이 된다는 의미는 한달 동안 쌓인 모든 데이터가 대상이라는 의미
즉, 대용량 데이터 처리가 절대적인 요구 사항이다.
스프링 배치에서는 모든 데이터를 메모리에 쌓지 않는 조회 방식이 기본 방식 (findAll 절대 x) { commit 사이즈를 chunk 라는 단위로 프레임워크 레벨에서 지정할 수 있음, stream으로 읽는 방식이 기본으로 지원 }
Job 이라는 큰 개념 안에 진행 프로세스 단위 Step이 있고 스텝 안에 Tasklet이 있음
Tasklet과 Reader Writer(ChunkOrientedTasklet)는 따로 작동한다는 오해가 있는데 아니다. 까보면 사실은 ChunkOrientedTasklet은 Tasklet의 구현체로 볼 수 있다.'
- 스프링배치는 LocalDate를 지원하지 않는다. -> 솔루션 @Value의 특성을 이용하자, setter 메소드에 @Value를 선언 문자열로 받은 뒤 원하는 타입으로 세팅한다. -> @JobScope Bean 생성 후 생성자를 DI 받는다.