-
웹 솔루션에서 외부 프로세스 실행하고 제어하자초급 개발자 이야기/노하우 쌓아가기 2008. 8. 12. 19:09
이 카테고리에는 더 이상 글이 올라오지 않습니다.
별도의 개발 블로그를 열어 개발에 관련된 이야기는 블로그를 분리하였습니다.
만약 더 많은 개발 이야기가 보고 싶으시다면 아래 링크로 이동해 주세요.
link : Digital Blue Eye's dev-ops
#######################################################################################################
이번 프로젝트에서 마지막으로 남은 과제는 외부 데몬 프로그램 실행과 종료였습니다.
간단히 정의하자면...
외부 데몬 프로그램 :
서버단에서 백그라운드로 실행되면서 데이터를 수집합니다.
대량의 데이터를 처리하기 때문에 실행에 많은 시간이 소요되구요.
실행 조건 :
1. 실무 관리자가 실행합니다.
2. 웹 솔루션을 종료(브라우져 종료)를 시켜도 데몬 프로그램은 계속 실행되어야 합니다.
3. 데몬 프로그램의 데이터 수집 상태를 확인할 수 있어야 합니다.
4. 실무 관리자가 강제 종료할 수 있어야 합니다.
5. 실무 관리자는 컴퓨터 프로그램에 약한 일반 사무직 직원입니다.
일단 방향은 java의 Runtime 클래스를 이용하는 것으로 잡았습니다.
별도의 프로그램을 만들고 이 프로그램을 Runtime 클래스를 이용해서 원격 실행합니다.
중간 중간에 별도의 Status DB 테이블에 상태를 기록함으로써 관리자는 현재 진행상태를 확인할 수 있구요.
개발 초기에 실행도 잘되고 데이터 수집도 잘 되었습니다.
그.런.데!!!
종료 프로세스를 작성하다 큰 문제에 봉착;;;
스트러츠의 Action을 이용해 구현하다보니 Action 단을 넘어가면 Runtime 프로세스를 잡아둘 방법이 없었습니다.
그래서 생각한게 세션!
Runtime으로 외부 프로그램을 실행시키고 반환되는 Process를 세션에 담았습니다.
그리고 종료 명령을 주면 세션에서 Process를 받아 Process에 destroy 명령을 내립니다.
문제는....
Runtime으로 외부 프로그램을 실행하고 Process를 받아 세션에 담으면, 외부 프로그램이 멈춰버린다는 겁니다!
별별 생각을 다하고 거의 하루를 투자해서 결국 세션이 문제라는 것을 확인했습니다. 세션에만 올리면 멈춰버리더라는 거죠.
혼자 고민하다 과장님께 여쭤봤습니다..
'그럼 Process를 세션에 담고 외부 프로그램을 실행해봐요'
컥!
생각도 안하고 있던 방법;;;;
해보니... 잘 돌아갑니다... (아놔... 내 하루... ㅜㅜ)
이 자리를 빌어 회사 이모 과장님께 감사의 말씀을 전하며...
한건 해결!'초급 개발자 이야기 > 노하우 쌓아가기' 카테고리의 다른 글