본문 바로가기

Others

Batch이란 무엇일까?

Batch란?

Batch는 한글로 집단, (일괄 처리를 위해) 함께 묶다"일괄이란 단어를 공통적으로 사용한다.

 

IT용어로는

"클라이언트와 상호작용 없이 일련의 작업을 단위별로 묶어 정기적으로 반복수행 하는 것"
"정해진 규칙에 따라 일괄처리 하는 것"

이라고 한다.

 

즉, "한번에 처리하기 위해 개별적인 여러 가지 것들을 한번에 묶어 '처리'하겠다" 라는 말이다.

 

그려면 Batch(일괄처리)에 대해서 알아보자.

 

Batch 특징

  • 대량 데이터 처리

Batch는 그래도 정말 많은 정보를 일괄적으로 처리할 수 있지 않을까 싶다. 예를들어 금융권은 아주 많은 데이터의 처리가 주기에 맞게 자동적으로 처리되야 할텐데 대용량 처리가 안된다면 사람이 죽어나갈 것 같다..

아마도 그런 입장에 놓인 사람들이 만들었지 않을까 싶다

 

 

  • 특정 시간에 실행 및 자동화

위와 같이 금융권에서는 정산을 위해 대용량 데이터를 처리해야 하는데.. 1초 2초정도 걸리는 것도 아닌 무려 30분 정도가 소요되는 것을 볼 수 있다. 그런데 이렇게 오랜 시간 걸리는 것을 사람들이 많이 사용하는 오전/오후 시간대에 처리하는 것은 미친짓이 아닌가? 그렇기 때문에 밤 12시경 처리하는 것이 가장 좋은데.. 이걸 사람이 매일마다 밤에 남아 처리할 수 없지 않나 싶다. 그렇기 때문에 특정시간에 자동으로 처리할 수 있도록 한다. 

 

+ 주어진 시간 내에 처리, 동시에 동작하는 Application을 방해하지 않도록 한다.

 

 

  • 안정적이고 견고하게 일괄적으로 처리

또 금융권 얘기를 하는 것 같다. 사람들 돈을 관리하는 은행에서 무언가가 누락되거나 중간에 오류가 발생해 처리가 되지 않는다면 그 은행은 하루만에 사라질 것이다. 이러한 상황을 방지하기 위해 안정적이고 오류가 발생하여 비정상적인 처리가 되지 않도록 해야하며 같은 작업을 여러번 반복하는 것이 아니라 같은 작업은 한번에 처리하는 것이 최고의 처리방법이기 때문에 Batch는 가장 중요하다고 생각한다.

 

Batch의 사용

JAVA의 Spring Batch를 예로 들어보자.

@Scheduled(cron = "1 * * * * *", zone = "Asia/Seoul")
public void scheduleProgramCron() {
	// Batch처리 할 Logic
}

or 

@Scheduled(fixedDelay = 1000)
public void scheduleProgramfixedDelay() {
	// Batch처리 할 Logic
}

위 코드를 살펴보면 @Schedule 어노테이션을 사용해 파라미터를 주어 언제 해당 작업을 실행할지 코드를 작성하였다.

파라미터는

  • cron : 작동 시간 지정(초 / 분 / 시 / 일 / 달 / 요일, * 은 "매번"과 같은 뜻)
  • fixedDelay : 작동 시간 지정(해당 메소드 종류 이후 다음 메소드 실행까지의 주기 / 단위 : ms)
  • zone : 기준 시간(지역 : "Asia/Seoul")

로 이루어져 있다.

 

+ Job / Step 등등.. 여러가지도 있다... 간단한 API를 만들때 함께 블로그에 올려보도록 노력해보겠다!

 

배치 주기의 변화

현재 배치의 주기는 변화되고 있다.

일 / 월 / 주 단위마다 배치 프로그램이 정기적으로 수행되는 정기배치가 평균적이였다. 하지만, 최근들어 주기가 짧아지고 실시간으로 요구되는 상황들이 다수 발생하고 있다.

 

카드사로 예를 들어보자. 카드사는 월마다 카드값을 청구하기 위해 매일 정해진 날짜의 늦은 시간에 배치 작업을 돌려놓는다. 이는 Batch 프로그램으로 설정하여 미리 정해놓은 날짜에 해당 작업을 처리할 수 있도록 한다. 

하지만, 자신의 청구 금액을 지속적으로 확인하고 명세서에 나와있는 전액 혹은 내가 선택한 건의 액수만큼 즉시 결제할 수 있는 시스템을 사용하는 사람들이 점점 늘어나고 있다.

 

이와 같은 상황들 뿐만 아닌 여러 상황이 발생하기 시작하여 배치도 정해진 시간 뿐만 아닌 특정 조건 혹은 특정 시간에 실행할 수 있도록 한다.

 

이 상황을 해결하기 위해 배치 주기는 3가지로 구분한다.

  1. 정기 배치 : 정해진 주기에 실행
  2. 이벤트성 배치 : 사전에 정의한 조건 충족 시 실행
  3. On-demand 배치 : 사용자의 명시적인 요구가 있을 경우 실행

 

결론

결론은, 현재 여러 상황에도 대비할 수 있는 시스템이 많다. 하지만, 이 배치 프로그램을 더욱 효율적이게 데이터를 활용할 수 있는지 생각해 볼 필요가 있다. SQL이든 뭐든... 다양한 방법으로 더욱 효율적이게 만들 수 있지 않을까? 라는 생각을 한다. 예전 멋쟁이 사자처럼에서 Batch 프로그램을 공부했지만, 다시한번 공부해야 겠다.. Batch 프로그램을 사용하는 사이드 프로젝트를 한번 만들어 봐야겠다. 

 

끝!

'Others' 카테고리의 다른 글

SSO란 무엇일까?  (0) 2023.07.05
URL Prefix  (0) 2022.08.16
타임리프(Thymeleaf)란?  (0) 2022.08.16