본문 바로가기
TALEND

[TALEND] 탈렌드로 간단 배치 프로그램 생성

by escaper101 2020. 12. 30.

이번 포스팅에서는 탈렌드로 만든 job을 특정 시간에 주기적으로 자동 실행하는 배치 프로그램을 생성하는 방법을 소개하겠다. 

 

우선 실용적인 예시를 들자면 개인정보보호법에 따라 모든 기업이 가진 고객 정보는 특정 기간이 지나면 모두 삭제되어야 한다. 이때, 고객 주문 정보를 가지고 있는 테이블에서 expire_date가 지난 데이터를 삭제하고 삭제된 데이터를 history 테이블에 옮기는 작업이 필요하다고 가정하자. 

 

이 작업을 수행하는 Job을 Talend로 먼저 만들어볼 것이다. 

 

order_m 테이블과 order_history 테이블

 

우선 작업 대상 테이블의 데이터를 확인해보자. order_m 테이블의 expire_date 칼럼을 주목하자. 이 칼럼을 기준으로 order_m 데이터를 삭제할 것이다. 그리고 삭제된 데이터의 order_no와 product_no 그리고 삭제 작업을 진행한 날짜를 order_history에 쌓아둘 것이다. 

 

order_m 테이블 가져오기

우선 schedule_job이라는 이름으로 새로운 job을 생성한다. 작업 대상인 order_m 테이블을 생성한 job에 가져와 추출쿼리를 위와 같이 변경한다. expire_date을 기준으로 오늘 작업 당일 이전의 데이터만 가져오고 있다. 

 

order_history와 연결 

order_m 테이블로부터 추출한 데이터는 order_history에 쌓아둘 것이므로 order_history 테이블을 tDBOutput으로 가져와 tMap으로 연결한다. 

 

tMap 설정 

tMap을 더블클릭하면 위와 같은 창이 뜬다. 오른쪽 상단의 AutoMap을 눌러주면 자동으로 동일한 이름의 칼럼을 매핑해준다. 타겟 테이블의 스키마를 주목하자. PK인 order_history_no는 동일한 이름을 가진 칼럼이 소스 테이블에 없어서 매핑되지 않은 상태이나 auto_increment 로 설정되어 있기 때문에 굳이 매핑해주지 않아도 새로운 데이터가 INSERT될 때 자동으로 값이 입력된다. 그렇다면 deleted_date 칼럼은 어떨까? 이 칼럼 역시 소스 테이블과 매핑할 칼럼이 없다. deleted_date는 이 job이 실행되는 당일 날짜가 입력되어야 한다. 이때 사용하는 Talend의 내장함수가 있다. deleted_date 칼럼 왼쪽에 빨간색 네모로 표기된 상자를 클릭해보자. 

 

expression builder 창 

위와 같은 창이 뜬다. 이때 왼쪽 하단의 category 영역에서 TalendDate를 클릭하면 여러가지 Date 관련 내장함수들이 있다. 이 중 getCurrentDate() 함수는 현재 날짜를 리턴한다. 각 함수들이 어떤 기능을 하는지 오른쪽 하단 help 영역에 간략히 표기된다. 원하는 함수를 더블클릭하면 왼쪽 상단 expression 영역에 추가된다. getCurrentDate() 함수를 통해 deleted_date 칼럼에 현재 날짜 데이터가 입력되게 한다. 이제 order_m 테이블에서 expire_date가 지난 데이터를 order_history 테이블에 옮기는 작업을 수행하는 job까지 완성했다. 

tDBRow 컴포넌트

두번째 작업인 order_m 테이블에서 데이터를 삭제하는 subjob을 만들어보자. 이 작업은 단순히 테이블의 데이터를 읽어오는 작업이 아닌 데이터를 삭제하는 작업이므로 tDBInput이 아닌 tDBRow 컴포넌트를 사용한다. tDBRow 컴포넌트를 팔레트에 가져와 DB Type과 Version등 기본 연결정보를 세팅해주고 추출 쿼리에 DELETE 조건을 추가한다. expire_date에 대한 조건은 위에서 만든 첫번째 subjob의 조건과 동일하다. 이렇게 하나의 Job에 두 개의 subjob을 생성하였다. 

 

첫번째 수행할 작업은 order_m 테이블에서 데이터를 삭제하기 전 대상 데이터를 order_history에 저장하는 것이다. 이를 위해 tPrejob 컴포넌트를 생성한다. 이 컴포넌트를 우클릭하여 트리거를 만들어 order_m 테이블에 연결해준다. 

완성된 job의 모습은 위와 같다. 실행 버튼을 누름과 동시에 tPrejob 컴포넌트에 연결된 subjob이 먼저 실행되고 이 작업의 실행이 완료되면 나머지 subjob이 실행된다. 

 

이제 이 job을 특정 시간에 정기적으로 실행되는 배치 프로그램으로 만들어보자. Community version에서는 job에 스케줄러를 추가하는 것이 불가능하다. 이는 TAC (Talend Administration Center)라는 서비스를 구독해야 제공되는 기능이다. 하지만 윈도우의 작업 스케줄러를 통해 구현할 수 있다. 

Build Job 수행 

 우선 왼쪽 프로젝트 리포지토리 영역에서 만들어둔 job을 우클릭 -> Build Job 을 선택한다. 원하는 경로를 지정해주고 Extract the zip file 체크박스를 체크해준다. 그리고 Finish를 누르면 job이 빌드된다. 

 

경로 확인 

앞서 Build Job 창에서 지정한 경로에 job 명으로 별도에 폴더가 생성된 것을 확인할 수 있다. 이 폴더에 들어가보면 .bat 확장자로 배치 파일이 생성되어 있다. 이제 이 프로그램을 윈도우에서 제공하는 작업 스케줄러에 추가한다. 

새 작업 생성 

윈도우 탐색기에서 작업 스케줄러를 검색하여 실행하면 위와 같은 화면을 볼 수 있다. 오른쪽에 위치한 작업 만들기를 클릭하고 새로 만들 작업의 이름을 입력한다. 

동작 설정 

동작 탭을 열어 새로만들기 버튼을 클릭한다. 새 동작 만들기 창이 뜨면 찾아보기를 클릭하여 이전에 build 한 job이 존재하는 경로에서 .bat 프로그램을 선택한다. 

 

트리거 설정

트리거 탭으로 이동한 후 새로 만들기를 클릭한다. 새 트리거 만들기 창이 뜨면 설정 영역에서 작업 진행 시간을 설정해준다. 시간까지 설정한 후 확인 버튼을 클릭하면 새 작업이 작업 스케줄러에 추가된다. 

예정된 작업 리스트 

 

앞서 talend job으로 만든 delete_customer_data 작업이 작업 스테줄러에 추가된 것을 확인할 수 있다. 이렇게 talend로 만든 job을 배치 프로그램으로 만들어 특정 시간에 정기적으로 실행되게 하는 방법을 알아보았다.