얼마전 지인이 물어보길래 알려준 방법인데
인터넷으로 찾아봤는데 정보를 찾기 힘든것 같아 나에게 물어봤을듯..ㅠㅠ
그런 분들을 위해 너무나도 알고나면 쉬운 개념이지만 이렇게 정리를 해본다.
배치(Batch)프로그램이란?
보통은 특정 시간마다 수행이 되는 일괄처리 프로그램을 의미하고 있다.
배치프로그램의 종류!?
프로그램 이라는게 한가지 방법만 있는게 아니니.. 방법은 여러가지가 있다.
1. 데몬형식 (Deamon Type)
- 프로세스가 계속 띄워져 있으며 특정 시간이 되면 로직이 구동된다.
2. 크론형식 (Cron Type)
- OS에서 주기적으로 작동시키는 명령어를 이용 (Linux 에서는 Cron 이라고 말한다)
- Web에서 많이 사용하는 Spring 에서도 Quartz 라는 크론 모듈이 있다. (해당 모듈은 OS와는 별도로 Java 프로그램으로 되어있다.)
뭐,, 다른 방법으로 더 있을 수 있다;;
어떤 형식으로 만들어 볼까?
빠르고 간편하게 만들 수 있는 방식이 JSP 페이지에 비지니스 로직을 구현하고 OS에서 사용하는 Cron을 이용하여 주기적으로 호출을 하는 방법이 아닐까 싶다.
어떻게 만들어야 할까!?
1. JSP 페이지에 특정 시간마다 수행되어야 하는 비즈니스 로직을 구현한다.
- http://test.com/test.jsp 라고 웹브라우저에 입력하면 수행이 되도록..
2. OS의 Cron 을 이용해 해당 페이지를 주기적으로 호출시킨다.
1) cron 을 편집한다.
1004lucifer:~ 1004lucifer$ crontab -e
2) cron 형식에 맞게 명령어를 입력한다. (사용방법은 vi 와 같다.)
- 소문자 i 를 누르면 입력모드로 전환이 되어 글자 입력이 가능해 진다.
- 커맨드에서 curl 을 입력하여 해당 유틸이 설치되어있는지 확인 후 알맞게 선택한다.
# 작성방법: 분 시 일 월 년 요일 명령어
# 매 시(한시간에 한번씩) 페이지를 호출한다.
0 * * * * * curl http://test.com/test.jsp
# curl 명령어가 없다면 wget 명령어를 이용한다.
# wget 명령어는 인자에 있는 주소의 리소스를 다운로드 한다.
# 때문에 jsp 파일이 지속적으로 쌓이지 않게 파일이 있다면 같이 삭제시켜준다.
0 * * * * * wget http://test.com/test.jsp0 * * * * * rm -rf test.jsp*
3) cron 을 저장 후 종료한다.
- 입력이 끝났으면 esc 입력 후 ':wq' 입력하여 저장하고 종료한다.
PS.
테스트 할 때에는 아래와 같이 1분마다 수행이 되도록 하면 편하다.
# 일분에 한번씩 페이지를 호출한다.
* * * * * * curl http://test.com/test.jsp
OS 에서 Cron 의 수행로그는 보통 다음과 같이 확인이 가능하다.
(리눅스의 버전이나 유닉스의 여부에 따라 달라질 수 있다.)
1004lucifer:~ 1004lucifer$ tail -f /var/log/cron
이렇게만 만들면 되는걸까!?
급하게 만들어야 하는 경우에는 빠르고 쉽게 만들 수 있기 때문에 만들때에는 편리하겠지만 유지보수 하는 입장에서는 이런 배치는 정말 난감하다.
어떤 권한의 계정이던지 보통은 ps 명령어 권한이 있어서 데몬형식의 배치를 만들게 된다면 새로 유지보수를 받는 사람 입장에서는 누가 알려주지 않더라도 배치의 존재를 쉽게 파악 할 수가 있다.
하지만 이런 OS의 Cron 을 이용한 배치의 경우 계정의 cron 을 뒤져봐야 알 수 있으며 주로 사용하는 계정과 배치가 수행되는 계정이 다르다면 모든 계정을 뒤져봐야 알 수가 있고 유지보수 메뉴얼 조차 없다면 배치의 존재를 인지하지 못하고 유지보수를 하게 될 수 있다.
각각의 장단점이 있지만 유지보수적인 측면만 보면 좋은 순서는 다음과 같다고 생각한다.
(개발의 난이도는 역순이다.)
데몬형식 > 크론형식(Web Spring) > 크론형식(OS Cron)
데몬형식이 리소스를 적게 차지하면서 자기의 할일을 빠르게 수행할 수 있다는 장점이 있지만 쓰레드를 적절히 사용하기 힘들다면 만들기 힘들 수 있다.
Spring 의 Quartz 를 이용한 방법은 꼭 웹이 아니어도 상관은 없지만 보통 Web 어플리케이션의 Spring 에서 그냥 많이들 사용하는 것 같다.
기본적으로 WAS 가 필요하니 서버의 리소스 사용량이 높아지는 단점이 있다.
OS Cron 을 이용한 방법은 만들기는 쉽지만 그리 깔끔하지 못하다는 느낌??
왠지 다음 유지보수 담당자에게 미안해 질 것 같다.
댓글
댓글 쓰기