배치 작업 .txt 파일을 저장하고, 이메일로 보내는 것까지 오케이. 그런데, Docker 환경에서 띄우게 된다면 50000% 오류가 날 것 같다. 내 루트 디렉토리와 도커 환경 내에서의 디렉토리를 한번 맞춰보자!
이전에 스프링부트에서 프로젝트 파일 이미지화 하는 것을 벨로그로 정리했다.
위 링크를 보고 진행하면 되는데, 중요한 부분은 여기다 Docker를 run 시킬 때
-v 명령어를 통해 "볼륨마운트(호스트의 디렉토리나 파일을 컨테이너 내부에 마운트하여 데이터를 공유하거나 영구적으로 보관하는 것)" 를 가능케 해야 한다.
명령어는 다음과 같다.
docker run -v "호스트의 디렉토리":"컨테이너 경로"
예를 들어,
docker run -p 8080:8080 -v /Users/host/Directory:/app/output my_image:tag
-p 8080:8080 호스트 포트:컨테이너 포트
-v /Users/host/Directory:/app/output
= 호스트의 /Users/host/Directory 디렉토리를 컨테이너 내부의 /app/output 디렉토리에 마운트 한다.
이렇게 하면 컨테이너 내부에서 /app/output 디렉토리를 사용하여 호스트의 Downloads 디렉토리에 접근 가능!
자, 이제 디렉토리 설정 잘 했다. 한번 띄워보자구~
도커를 띄워도 h2 console 설정이 안되면 무슨 소용인고...이러면 스키마를 어떻게 푸쉬해줘야 할까...
당연히, h2의 배치 스키마 설정이 불가하므로 오류가 난다.
Spring Batch 스키마를 넣는 방법은 크게 두가진데
SQL(DDL 직접 밀어넣기)
application.yml 에서 기본 설정하기
batch:
jdbc:
initialize-schema: always
그런데 이거 두개 다 안돼서 h2 DB에서 DDL 계속 했었자너!!?? 어찌할꼬...
직접 resource에다가 .sql 파일을 만들어서 SPRINGBOOT 프로젝트 빌드 시 이 DDL이 설정되도록 하자!
schema.sql 파일에 위의 DDL을 복사 후 파일로 넣어준다.
++ data.sql 은 DML 가능!
잘 떠서, 작동중인 모습. hibernate 쿼리 설정 해놨더니 잘 찍히고 있다
이제, 새벽 4시에 실제 오는지 확인 해보면 됨! (사실 이미 해봄)
Docker로 띄워놓아도 아아~주 잘 받는 모씁!
어떤 시도를 해볼까...Ci/CD 실습? 고민 좀 해봐야겠다!