배치 애플리케이션

배치를 적용한 애플리케이션

  • 매출 데이터를 이용한 일매출 집계
  • 매우 큰 데이터를 활용한 보험급여 결정
  • 트랜잭션 방식으로 포맷, 유효성 확인 및 처리가 필요한 내부 및 외부 시스템에서 수신한 정보를 기록 시스템으로 통합

 

 

배치(Batch)란 일괄처리 란 뜻을 가지고 있다.

시사점
웹 어플리케이션 = Tomcat + Spring MVC 라고 떠올리면 큰 데이터를 읽고, 가공하고, 저장한다면 해당 서버는 순식간에 CPU, I/O, 등을 다 써버려서 Request처리를 하지 못하게 됩니다.집계기능은 하루에 1번 수행하게 됩니다. 이를 위해 API를 구성하는 것은 너무 낭비이다. 여기서 추가로 데이터가 너무 많아서 처리가 실패하면 비효율적이게 된다.(끝판왕)또한, 누군가 집계 함수를 실행시켰는데 다른 누군가 또 실행시켜 집계 데이터가 2배로 뻥튀기 될 수도 있다. 

따라서 같은 파라미터로 같은 함수를 실행할 경우 이미 실행한 적이 있어 실패하는 기능을 지원하면 좋을 것 같음.

바로 이런 단발성으로 대용량의 데이터를 처리하는 어플리케이션을 배치 어플리케이션이라고 합니다.

Spring MVC를 사용하기 때문에 비즈니스 로직에 최대한 집중 할 수 있다.

Spring 진영에선 Spring Batch가 있다.

대용량 데이터 - 배치 어플리케이션은 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리

자동화 - 심각한 문제 해결을 제외하고는 사용자의 개입 없이 실행
견고성 - 잘못된 데이터를 충돌/중단 없이 처리할 수 있어야한다.

신뢰성 - ?

성능 - 지정한 시간 안에 처리를 완료하거나 동시에 실행하는 다른 App을 방해하지 않도록 수행

 

Spring의 3대요소 : 1) DI, 2)AOP, 3)서비스추상화

현재 Spring Batch 4.0 (Spring Boot 2.0) 에서 지원하는 Reader & Writer 

DataSource 기술 설명
DB JDBC 페이징, 커서 ,일괄 업데이트 등 사용
DB Hibernate 페이징, 커서
DB JPA 페이징 사용 가능
File Flat file 지정한 구분자로 파싱 지원
File XML XML파싱 지원

 

 

일매출 집계

많은 거래가 이루어지는 커머스 사이트의 경우 하루 거래건이 50만~100만까지 나옵니다. 이럴 경우 이와 관련된 데이터는 최소 100만~200만 row 이상입니다. 한달이면 5000만 ~1억까지 될수도 있습니다. 이를 실시간으로 집계 쿼리로 해결하기엔 조회시간이나 서버 부하가 심합니다. 그래서 매일 새벽에 전날 매출 집계 데이터를 만들어서 외부 요청이 올 경우 미리 만들어준 집계 데이터를 바로 전달하면 성능과 부하를 모두 잡을 수 잇습니다. 

Spring Batch 프로젝트 개발 환경

  • IntelliJ IDEA
  • Spring Boot
  • Java 8
  • Gradle

lombok 기능을 많이 사용한다. lombok 플러그인을 본인의 IDE에 맞게 설치하면 좋다.

 

배치의 도메인 용어

JobLaucncher <-> jobRepository

Job <-> jobRepository

Stop <-> jobRepository

  • ItemReader
  • ItemProcessor
  • ItemWirter

+ Recent posts