LazarusCompleteGuide:4.6

From 흡혈양파의 번역工房
Jump to: navigation, search

서비스와 데몬

유닉스의 daemons 와 윈도우의 services 는 사용자와 직접 상호작용을 하지 않는 프로그램들이다. 그러한 애플리케이션들은 운영체제마다 다른 이름을 가진다. 데몬을 예로 들자면, http 와 ftp 서버가 되겠다. 사용자와 직접 통신하지 않기 때문에 시작 시 자신들의 stdin, stdout, stderr 채널을 닫는다. 라자루스 문서에서는 그러한 프로그램을 모두 데몬이라 부르며, 모든 플랫폼을 아우르는 용어로 사용한다.


라자루스에서 플랫폼 독립적 데몬을 생성할 때는 lazadaemon 패키지를 사용하라. 데몬의 개발을 시작하기 전에 우선 Package→Open package file (.lpk) 또는 Lazarus/components/daemon/lazadaemon.lpk 파일을 열어 패키지를 설치해야 한다. 해당 패키지는 IDE에 일부 새 컴포넌트와 메뉴 엔트리를 설치할 것이다. 설치가 끝나면 File ⇒ New 대화창이 나타나면서 Daemon (service) applications 라는 새 엔트리와 Daemon (service) application, Daemon Module, Daemon mapper 라는 하위 엔트리가 나타날 것이다.

그림 4.12: New... 대화창에 열린 데몬에 대한 새 엔트리


엔트리 기능
데몬 (서비스) 애플리케이션 해당 엔트리는 새 데몬 프로그램을 생성하고 그에 대해 TDaemon 과 TDaemonMapper 인스턴스를 자동으로 등록한다.
데몬 모듈 데몬 및 데몬 매퍼 클래스에 대한 등록 프로시저가 자동으로 추가될 것이다. 새 TDaemon 인스턴스를 생성한다.
데몬 매퍼(mapper) 새 TDaemonMapper 인스턴스를 생성한다. 이 옵션이 사용되는 경우가 드문 것은 각 데몬 프로그램은 하나의 매퍼만 가질 수 있는데 새 데몬 애플리케이션이 생성될 때마다 자동으로 하나가 추가되기 때문이다. 두 번째 매퍼가 등록되면 오류를 발생할 것이다.
표 4.8: File ⇒ New... 대화창에 표시되는 데몬 엔트리


클래스 설명
TCustomDaemon TDataModule 자손으로 모든 일을 처리한다. 다중 쓰레드(multi-threaded) 데몬과 관련해 동시에 같은 프로세스로TCustomDaemon 클래스와(또는) 인스턴스가 여러 개 실행될 수도 있다.
TCustomDaemonApplication TCustomApplication 자손으로, TCustomDaemons 를 생성한다. 변경할 필요 없다. 윈도우에서는 Stop 호출을 받을 때까지 실행되고, 리눅스에서는 TERM 신호를 받을 때까지 실행된다. 10.2 POSIX 신호 및 예외와 관련된 장을 참고하라.
TDaemonMapper 해당 컴포넌트는 서비스 등록을 처리한다. 각 인스턴스는 DaemonDefs 프로퍼티에 하나의 엔트리를 필요로 한다.
표 4.9: 라자루스의 데몬 클래스


리눅스에서 데몬은 주로 /etc/init.d/service 내 스크립트에 의해 시작된다. 이 스크립트는 시작, 중지, 일시정지 등 필요 시 파라미터를 전달한다. 하지만 BSD에서는 다른 방식으로 처리된다. 여기선 /etc/rc.d/ 또는 /usr/local/etc.d/ 내부의 스크립트와 /etc/rc.conf 내의 엔트리, 아니면 /etc/rc.local 내의 정의에 의하여 RC 메커니즘을 통해 로딩된다. 관리자는 어떤 메소드를 사용할 것인지 결정한다. 두 방법 중 어떤 방법이든 서비스는 사용자에게 연락할 수 없으며, 서비스의 구성은 /etc 또는 (BSD의 경우) /usr/local/etc 내 파일을 통해서만 설정될 수 있다. 윈도우의 경우, Apache HTTP 서버와 같이 많은 서비스들이 시스템 트레이에 아이콘을 위치시킨다. 윈도우에서 서비스를 제어하는 또 다른 방법은 제어판 애플릿을 통한 방법이다.


사용여부와 상관없이 시스템 트레이 아이콘은 매우 유용하다. 사용자가 서비스를 시작 및 중지하도록 해주며, 구성을 변경하거나 도움말 정보로 접근을 허용하기도 한다. 라자루스에서 데몬을 생성할 때는 창에 TTrayIcon 컴포넌트를 위치시켜 이러한 옵션들을 사용할 수 있다. TTrayIcon 은 컴포넌트 팔레트의 Additional 탭에서 찾을 수 있다. 서비스 구현은 주의를 기울여 처리해야 한다. 윈도우 비스타의 경우, 데몬은 더 이상 데스크톱과 직접 상호작용을 할 수 없다. 따라서 데몬과 제어 프로그램은 구분된 실행 파일에 위치해야 한다. 윈도우를 시작하기 전에 데몬을 등록해야 한다는 점도 중요하다. 라자루스 클래스 TCustomDaemonApplication 을 기반으로 한 데몬은 명령 행 옵션 -I 를 이용해 프로그램을 시작함으로써 등록할 수 있다. 등록을 해제할 때는 -u 를 이용해 호출한다. 보통 -i 를 이용한 호출은 설치 프로그램에 의해 실행되고, -u 를 이용한 호출은 제거 프로그램(de-installer)으로 이루어진다. 설치가 끝나면 -r 를 이용해 프로그램을 호출하여 서비스를 시작할 수 있다.