본문 바로가기
Back-End/SpringBatch

Spring Batch를 진행하기위해서 만드는 작업들..(S3, ShellScript 등)

by hwan20c 2023. 7. 26.

기존에 이제 Spring Batch를 포스팅을 했었는데, 해당 파일을 읽어오기 위해서는 접근할 수 있는 디렉토리가 존재해야 한다.

 

그래서 aws S3를 sftp로만 접근할 수 있게 만들고, 그 담에 거기에 어느 착한 회사는 본인들의 배치를 따로 돌려서 해당되는 경로에 떨어뜨리게 끔 해줬지만,

 

그렇지 않은 회사들은 본인들의 ftp서버를 열어놓고 거기에서 가져오게끔 만들어 놓았다....

 

S3를 sftp로 만드는 건 여기저기 찾아보면 많이 있으니 이 부분은 생략하고,

 

일단 ftp서버에 허용되는 ip가 있었는데, 그 ip는 회사 ip가 아닌 EC2의 서버 ip로 접속을 하게끔 해줬다.(ShellScript를 돌리기 위함)

 

그래서 sh로 작성된 파일의 스크립트를 보면

 

#!/bin/bash

# FTP 접속 정보
ftp_server=""
ftp_username=""
ftp_password=""

# 다운로드할 파일 경로
remote_folder=""
local_folder=""

# 오늘의 날짜를 가져옴 (YYYYMMDD 형식)
today=$(date +%Y%m%d)

# FTP 접속
ftp -n $ftp_server <<END_SCRIPT
quote USER $ftp_username
quote PASS $ftp_password

# 이진 모드로 전환
binary

# 로컬 폴더로 이동
lcd $local_folder

# 파일 다운로드
cd $remote_folder

# 오늘 날짜가 포함된 파일 가져오기
mget *$today*

# 연결 종료
quit
END_SCRIPT

 

위와 같이 되어 있다. 위에 빈칸들은 적어주고 다운로드할 파일경로를 찾아서 로컬 경로로 다운을 받는 것이다.

 

기본적으로 S3를 EC2에 마운트 해서 해당 폴더에 떨어뜨려주는 개념으로 진행하면 되는 것이다.

 

그리고 쉘파일만 있다고 동작하는 건 아니고 리눅스의 crontab기능을 이용해서 등록하면 되는데,

 

crontab -e를 써서 들어가서 

         1                2                                           3

00 04 * * * /bin/bash /home/ec2-user/{쉘파일 위치 경로} 이런 식으로 저장하면 되는 것이다.

 

첫 번째는 04시에 매일매일 진행한다는 의미(분 시 일 요일(0부터 일요일))이다. 

 

두 번째 인자는 /bin/bash로 실행하라고 하는 거고(sh 파일이 배쉬로 실행돼야 함을 나타내는 것)

 

세 번째는 sh파일이 있는 경로를 뜻한다.

 

그래서 이렇게 등록을 하면 04시에 해당 sh파일을 사용해서 ftp로 파일을 가져올 수 있게 된다.

 

S3를 SFTP만 들어오게 바꾸거나, EC2에 S3를 마운트 하는 부분은 그렇게 어려운 부분이 아니니 인터넷을 조금만 찾아보면 나올 수 있으니 따로 포스팅은 하지 않겠다.

'Back-End > SpringBatch' 카테고리의 다른 글

Spring Batch 및 Scheduler 관련...  (0) 2023.07.25

댓글