검수요청.png검수요청.png

"데몬"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(커널 스레드 데몬)
잔글
29번째 줄: 29번째 줄:
 
* 윈도우에서는 실행 파일 뿐 아니라 DLL도 서비스로 구동할 수 있다.DLL을 바로 프로세스로 만들 수는 없으므로 svchost.exe 라는 실행 파일에서 해당 DLL의 entry point 를 호출하는 방식으로 서비스를 구동한다. 반면 리눅스에서 데몬으로 구동될 수 있는 것은 실행 파일뿐이다.
 
* 윈도우에서는 실행 파일 뿐 아니라 DLL도 서비스로 구동할 수 있다.DLL을 바로 프로세스로 만들 수는 없으므로 svchost.exe 라는 실행 파일에서 해당 DLL의 entry point 를 호출하는 방식으로 서비스를 구동한다. 반면 리눅스에서 데몬으로 구동될 수 있는 것은 실행 파일뿐이다.
 
* 윈도우에는 서비스 실행만을 위해 존재하는 계정들이 존재한다.리눅스에서는 데몬 실행만을 위한 계정은 존재하지 않는다.<ref> 민영기TD, 〈[https://blog.ifunfactory.com/2018/02/27/windows-service%EC%99%80-linux-daemon%EC%9D%98-%EB%B9%84%EA%B5%90/ (기술컬럼) Windows service와 Linux daemon의 비교]〉, 《아이펀팩토리 블로그》, 2018-02-27</ref>
 
* 윈도우에는 서비스 실행만을 위해 존재하는 계정들이 존재한다.리눅스에서는 데몬 실행만을 위한 계정은 존재하지 않는다.<ref> 민영기TD, 〈[https://blog.ifunfactory.com/2018/02/27/windows-service%EC%99%80-linux-daemon%EC%9D%98-%EB%B9%84%EA%B5%90/ (기술컬럼) Windows service와 Linux daemon의 비교]〉, 《아이펀팩토리 블로그》, 2018-02-27</ref>
 
  
 
{{각주}}
 
{{각주}}

2020년 7월 28일 (화) 12:07 판

데몬(daemon)은 멀티태스킹 운영체제에서 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다. 시스템 로그를 남기는 syslogd처럼 보통 데몬을 뜻하는 ‘d’를 이름 끝에 달고 있으며, 일반적으로 프로세스로 실행된다.[1]

개요

데몬은 주기적인 서비스 요청을 처리하기 위해 계속 실행되는 프로그램을 말한다. 영어 발음은 데이먼(deɪmən) 또는 디먼(dimən)에 가깝다. 데몬은 수집된 요구들을 또다른 프로그램이나 프로세스들이 처리할 수 있도록 적절히 전달한다. 사전적 의미에 따르면, 신화에 나오는 디먼은 "신들과 사람들 중간에 위치하고 있는 일종의 수호신"이라고 되어 있다. 데몬은 대개 부모 프로세스를 갖지 않으며, 즉 PPID가 1이며, 따라서 프로세스 트리에서 init 바로 아래에 위치한다. 데몬이 되는 방법은 일반적으로 자식 프로세스를 포크(fork)하여 생성하고 자식을 분기한 자신을 죽이면서 init이 고아가 된 자식 프로세스를 자기 밑으로 데려가도록 하는 방식이다. 이러한 방법을 ‘fork off and die’라 부르기도 한다. 시스템은 시동할 때 데몬을 시작하는 경우가 많으며, 이런 데몬들은 네트워크 요청, 하드웨어 동작, 여타 프로그램에 반응하는 기능을 담당하게 된다. 그 밖에도 몇몇 리눅스에 있는 devfsd처럼 하드웨어 설정이나, cron처럼 주기적인 작업을 실행하는 등 기타 다양한 목적으로 사용된다. CD나 DVD에 대한 각종 CD 이미지 파일을 에뮬레이션하여 가상의 CD-ROM 드라이브의 역할을 하게 하는 프로그램. 시디스페이스와 비슷하며, 보통 그냥 "데몬"이라고 부른다.

데몬이란 리눅스 시스템이 처음 가동될 때 실행되는 백그라운드 프로세스의 일종이다. 사용자의 요청을 기다리고 있다가 요청이 발생하면 이에 적절히 대응하는 리스너와 같은 역할을 한다. 즉, 메모리에 상주하면서 특정 요청이 오면 즉시 대응할 수 있도록 대기 중인 프로세스를 말한다. 일반적인 서비스는 각각의 서비스가 사용하는 port를 관리하는 데몬이 존재한다. 다른 데몬들에게 할당된 port를 관리하는 특별한 용도의 데몬도 존재한다. 데몬은 부팅 중에 메모리에 로딩되어 컴퓨터가 종료될 때까지 유지된다. MS윈도우의 서비스(Service)와 유사하고 실제로 '서비스'라고 부르기도 한다. 보통 리눅스 시스템의 1번 프로세스인 init(PID=1)이 실행하고, 데몬 프로그램의 명령어는 'd'로 끝난다.(예시 : ftpd, mysqld, httpd 등)[2]

데몬은 특별한 일이 없는 한 사용자와 상호 대화할 필요 없이 아무도 모르게 실행되어야 하기 때문에 터미널을 가지지 않는다. 또한 모든 데몬 프로세스는 부모 프로세스(PPID)가 1번으로 세팅된다. 이는 데몬 프로세스는 다른 어떤 프로세스의 영향도 받지 않음을 의미한다.

용어의 유래

도깨비나 유령을 뜻하는 데몬이란 이름은 MIT의 MAC 프로젝트 프로그래머들이 만든 것이다. 처음 만들어질 때는 맥스웰의 도깨비 사고 실험에서 맥스웰이 언급한, 보이지 않는 곳에서 분자들을 골라주는 일을 하고 있는 유령에서 영감을 얻은 것이었다. 이후 유닉스 시스템은 이 용어를 받아들여 사용했다. 그리스 신화에서도 신들이 관여하지 않는 일을 처리하는 데몬이 등장하는데, 이는 사용자가 직접 신경쓰지 않도록 하면서 백그라운드에서 일을 처리해 주는 데몬의 역할과 맞아 떨어진다. BSD 계열의 운영 체제는 BSD 데몬을 마스코트로 삼았으나, 실제로 BSD의 마스코트는 기독교적 세계에서 그리는 악마의 모습을 귀엽게 만든 것이다. 또한 원래 daemon은 두문자어가 아니지만, disk and execution monitor로 두문자어처럼 뜻을 맞추어 말하기도 한다.

실행 방법

리눅스에서 데몬을 실행하는 방법은 크게 두가지가 있다. 혼자 스스로 동작하는 독자형(Standalone)방식과 데몬을 관리하는 슈퍼 데몬(super daemon)에 의해 동작하는 방식이 있다. 일반적으로 자주 사용하는 데몬을 독자형 방식으로, 자주 사용하지 않는 데몬을 슈퍼 데몬을 이용한 방식으로 실행한다. 독자형의 경우 시스템의 백그라운드에서 항상 동작하는데, 자주 호출되는 데몬이 아니라면 시스템의 자원을 낭비할 우려가 있다. 슈퍼 데몬에 의한 동작 방식은 평소에는 슈퍼 데몬만 동작하다가 서비스 요청이 오면 슈퍼 데몬이 해당 데몬을 동작시키는 것이다. 따라서 독자형보다는 서비스에 응답하는데 시간이 좀 더 걸릴 수 있지만 자원을 효율적으로 사용한다는 장점이 있다. 만약 리눅스 서버를 웹서버로 사용한다면, 사용자의 웹 서비스 요청이 매우 빈번히 일어날 것이고, 따라서 httpd와 같은 웹서버 데몬은 독자형 방식으로 실행된다. 독자형이든 슈퍼 데몬에 의해 동작하는 형태든 데몬이 제대로 동작하지 않으면 시스템이 서비스를 제공할 수 없다.[2]

데몬의 종류

슈퍼 데몬

데몬의 종류가 늘어나자 이를 관리하기 위한 슈퍼 데몬이 등장했다. 유닉스에서 슈퍼 데몬의 이름은 inetd 였으나 우분투에서는 보안 기능이 포함된 xinetd를 사용하고 있다. 슈퍼 데몬은 네트워크 서비스를 제공하는 데몬만 관리한다. 간단히 말해 사용자가 네트워크 서비스를 요청하면 슈퍼 데몬이 이를 받아서 해당하는 서비스 데몬을 동작시키는 것이다.

inint 데몬

inint 데몬은 1번 프로세스이며 프로세스 대부분의 조상 프로세스이다. pstree 명령으로 프로세스들의 실행 구조를 확인해보면 init가 다른 데몬의 조상임을 다시 한 번 더 알 수 있다.

커널 스레드 데몬

커널의 일부분을 프로세스처럼 관리하는 데몬을 커널 데몬이라고 한다. 이는 ps 명령으로 확인했을 때 대괄호로 둘러싸여 있는 프로세스들이다. 예전에는 대부분 k로 시작했으나, 요즘은 이를 반드시 준수하지 않는다. 커널 데몬은 대부분 입출력이나 메모리 관리, 디스크 동기화 등을 수행하며, 대체로 PID가 낮은 번호로 할당되어 있다. 일반 프로세스의 조상 데몬이 init라면 커널 데몬을 동작시키는 조상 데몬은 커널 스레드 데몬(kthreadd)이다. ps 명령으로 확인해보면 모든 커널 데몬의 PPID가 2번임을 알 수 있다.[3]

서비스와 데몬 구분

윈도우에서는 서비스, 리눅스에서는 데몬이라는 용어로 불린다. 사용자와의 직접적인 상호작용이 없는 백그라운드에서 동작하는 기능을 관리한다. 필요하면 사용자가 명시적으로 시작하지 않아도 부팅 등 특정 상황에서 자동으로 실행하도록 설정할 수 있다. 작업 실행이 실패했을 때의 재시도 정책 등, 실패 시의 정책을 지정할 수 있으며 이를 위한 기능들을 지원하기도 한다.

  • 윈도우에서 서비스로 실행될 바이너리 파일을 작성하려면, 프로그래밍 단계에서부터 RegisterServiceCtrlHandler등의 몇몇 서비스 구현을 위한 전용 윈도우 API 함수를 이용한 연동 작업이 필요하다. 리눅스에서는 이러한 별도 작업이 없어도, 실행 파일이라면 무엇이든 데몬으로 동작할 수 있다. 데몬으로 동작할 바이너리를 작성하는 경우 대부분 shell 등으로부터 데몬 프로세스를 분리하기 위해 fork를 호출하지만, nohup 등의 다른 선택지도 있고 fork는 일반적인 system call일 뿐 데몬만을 지원하기 위한 것도 아니다.
  • 윈도우에서는 실행 파일 뿐 아니라 DLL도 서비스로 구동할 수 있다.DLL을 바로 프로세스로 만들 수는 없으므로 svchost.exe 라는 실행 파일에서 해당 DLL의 entry point 를 호출하는 방식으로 서비스를 구동한다. 반면 리눅스에서 데몬으로 구동될 수 있는 것은 실행 파일뿐이다.
  • 윈도우에는 서비스 실행만을 위해 존재하는 계정들이 존재한다.리눅스에서는 데몬 실행만을 위한 계정은 존재하지 않는다.[4]

각주

  1. 데몬 (컴퓨팅) 위키백과 - https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%AA%AC_(%EC%BB%B4%ED%93%A8%ED%8C%85)
  2. 2.0 2.1 powerhan, 〈daemon 이란 무엇인가?〉, 《티스토리》, 2009-01-04
  3. 카르 kaelina, 〈( 기본정리 ) 데몬 프로세스〉, 《티스토리》, 2016-05-10
  4. 민영기TD, 〈(기술컬럼) Windows service와 Linux daemon의 비교〉, 《아이펀팩토리 블로그》, 2018-02-27

참고자료

같이 보기


  검수요청.png검수요청.png 이 데몬 문서는 인터넷에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.