Daemon
🔶 데몬
데몬이란 시스템이 부팅될 때, 자동으로 시작되어 실행되는 프로그램입니다. 예를 들어, 웹 서버, 데이터베이스 서버, 메일 서버 등은 모두 데몬으로 구현되어 시스템이 부팅될 때 자동으로 실행되며 백그라운드에서 지속적으로 실행됩니다. 이러한 데몬들은 사용자 인터페이스를 제공하지 않고, 대부분은 설정 파일을 통해 동작을 제어합니다.
➡️ 즉, 메모리에 상주하면서 특정 요청이 오면 즉시 대응 할 수 있도록 대기중인 프로세스를 말합니다.
🔶 데몬의 특징
- 백그라운드에서 실행되는 프로그램
- 데몬은 사용자의 명령을 기다리지 않고, 시스템이 부팅될 때 자동으로 시작되어 백그라운드에서 계속해서 실행됩니다.
- 데몬은 사용자의 명령을 기다리지 않고, 시스템이 부팅될 때 자동으로 시작되어 백그라운드에서 계속해서 실행됩니다.
- 시스템 서비스나 백그라운드 작업을 담당
- 데몬은 시스템 서비스나 백그라운드 작업을 담당합니다.
- 예를 들어, 웹 서버, 데이터베이스 서버, 백업 서버 등을 데몬으로 구현할 수 있습니다.
- 이벤트를 처리
- 데몬은 시스템에서 발생하는 이벤트를 처리합니다.
- 예를 들어, 시스템 로그인, 네트워크 연결, 하드웨어 변경 등의 이벤트를 처리할 수 있습니다.
- init 프로세스가 관리
- 데몬은 init 프로세스가 관리합니다.
- init 프로세스는 시스템 부팅 시 가장 먼저 실행되며, 데몬을 포함한 모든 프로세스를 관리합니다.
- 데몬들의 명칭에는 보통
Daemon
을 뜻하는d
를 이름 끝에 달고 있는것이 특징입니다.
- 예를 들면
httpd
는 아파치의http
와 데몬의d
를 합친 이름의 웹서버 데몬을 뜻합니다.
- 예를 들면
🔶 데몬의 동작방식
데몬은 백그라운드에서 실행되는 프로그램으로, 일반적으로 다음과 같은 동작 방식을 가집니다.
- 데몬 프로세스의 시작 시스템이 부팅되거나, 데몬이 수동으로 실행되면, 데몬 프로세스가 시작됩니다. 데몬은 일반적으로 시스템 서비스를 제공하기 위해 설계되었으므로, 시스템의 다른 서비스와 함께 시작될 수 있습니다.
- 자원 할당 및 초기화 데몬 프로세스가 시작되면, 운영체제는 데몬에게 메모리, 파일, 포트 등의 자원을 할당합니다. 또한 데몬은 자신이 수행해야 할 작업을 위한 초기화 작업을 수행합니다.
- 백그라운드에서 대기 데몬은 일반적으로 백그라운드에서 대기합니다. 이때 데몬은 시스템 리소스를 최소한으로 사용하도록 노력합니다.
- 요청 처리 데몬이 실행 중일 때, 다른 프로그램이나 시스템에서 요청이 들어오면 데몬은 해당 요청을 처리합니다. 이때, 데몬은 대부분의 경우 요청을 비동기적으로 처리하며, 다른 작업도 동시에 수행될 수 있도록 합니다.
- 로깅 및 예외 처리 데몬은 작동 중에 로깅을 수행하여 로그 파일에 이벤트를 기록합니다. 또한 데몬은 예외 상황을 처리하기 위한 메커니즘을 구현하여, 예상치 못한 문제를 처리할 수 있도록 합니다.
- 종료 데몬이 종료되는 경우, 데몬은 할당된 자원을 반환하고, 실행 중인 작업을 완료한 후에 종료됩니다.
➡️ 위와 같은 방식으로 데몬은 백그라운드에서 실행되며, 다른 프로그램이나 시스템에서 요청을 처리하며, 시스템 서비스를 제공합니다.
🔶 데몬의 실행 방식
- standalone type daemon
Standalone type daemon은 운영체제가 부팅될 때 시스템의 background에서 시작됩니다. 일반적으로 시스템이 시작될 때 자동으로 시작되며, 특정 서비스 또는 응용 프로그램에 대한 요청을 처리하기 위해 항상 실행되어 있습니다. 대표적인 예로는 웹 서버 프로그램인 Apache나 데이터베이스 프로그램인 MySQL 등이 있습니다. 이러한 standalone type daemon은 서비스 요청이 있을 때마다 즉시 응답할 수 있기 때문에, 서비스 요청에 대한 대기 시간이 매우 적습니다.
- inetd type daemon
Inetd type daemon은 필요에 따라 운영체제에 의해 실행되며, 시스템 자원의 낭비를 줄이는 데 사용됩니다. Inetd는 대부분의 Unix 및 Linux 시스템에 내장된 인터넷 슈퍼서버인데, 서비스 요청이 발생하면 해당 서비스를 처리할 수 있는 데몬을 실행하는데 사용됩니다. 즉, inetd는 서비스 요청이 있을 때만 데몬을 실행하므로, 자원을 절약할 수 있습니다. 예를 들어, ftp, telnet, ssh, http와 같은 서비스를 수행하는 데몬은 각각의 서비스에 대한 요청이 들어올 때 inetd에 의해 시작됩니다.
➡️ 따라서, standalone type daemon은 항상 백그라운드에서 실행되며, 서비스 요청에 대한 대기 시간이 적지만, 시스템 자원을 계속 사용하게 됩니다. 반면, inetd type daemon은 필요에 따라 실행되며, 대기 시간이 있을 수 있지만, 시스템 자원의 낭비를 줄일 수 있습니다.
🔶 데몬과 서비스의 차이
“데몬(Daemon)”과 “서비스(Service)”는 모두 백그라운드에서 실행되는 프로그램이지만, 서로 다른 개념입니다.
데몬은 일반적으로 리눅스/유닉스 운영체제에서 사용되는 용어이며, 백그라운드에서 실행되는 프로그램을 의미합니다. 주로 서버 운영체제에서 시스템 서비스를 제공하기 위해 실행되는 백그라운드 프로세스를 가리키며, 특히 클라이언트 요청을 처리하는 등 서버의 핵심 기능을 담당합니다.
반면 서비스는 주로 윈도우 운영체제에서 사용되는 용어이며, 데몬과 비슷하게 백그라운드에서 실행되는 프로그램을 의미하지만, 주로 응용 프로그램을 제공하는 역할을 합니다. 예를 들어, 인터넷 브라우저를 서비스로 설치하면, 운영체제가 부팅될 때 함께 실행되며, 사용자가 인터넷 브라우저를 실행하기 전에 이미 실행되어 있습니다.
➡️ 즉, 데몬은 시스템의 핵심 기능을 담당하는 서버 프로그램을 가리키는 반면, 서비스는 주로 사용자가 인터페이스를 통해 접근하고 실행할 수 있는 응용 프로그램을 가리킵니다.
그러나 데몬과 서비스는 기능적으로 유사한 면이 있으며, 둘 다 백그라운드에서 실행되며, 시스템 자원을 최소한으로 사용하도록 설계되어 있습니다.