맨위로가기

데몬 (컴퓨팅)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

데몬(daemon)은 컴퓨터 운영 체제에서 사용자와 직접 상호 작용하지 않고 백그라운드에서 실행되며 시스템의 다양한 작업을 처리하는 프로세스를 의미한다. 이 용어는 MIT의 MAC 프로젝트 프로그래머들이 맥스웰의 도깨비 사고 실험에서 영감을 얻어 처음 사용했으며, 유닉스 계열 시스템에서 널리 사용되었다. 데몬은 시스템 관리, 작업 스케줄링, 네트워크 서비스 등 다양한 역할을 수행하며, 윈도우 NT에서는 '서비스'라는 용어로, macOS에서는 유닉스 데몬과 '서비스 메뉴'의 기능을 수행하는 소프트웨어로 구현된다.

더 읽어볼만한 페이지

  • 프로세스 - 문맥 교환
    문맥 교환은 운영 체제에서 CPU가 여러 프로세스나 스레드를 번갈아 실행하기 위해 현재 작업 상태를 저장하고 다른 작업 상태를 복원하는 과정으로, 멀티태스킹 환경에서 필수적인 기술이며 프로세스 제어 블록을 통해 관리된다.
  • 프로세스 - 윈도우 서비스
    윈도우 서비스는 윈도우 운영체제에서 사용자 인터페이스 없이 백그라운드로 실행되어 시스템 기능을 제공하는 응용 프로그램으로, 다양한 도구를 통해 시작 유형 설정, 계정 변경, 오류 복구 옵션 구성 등 관리가 가능하다.
  • 서버 - 슈퍼 서버
    슈퍼 서버는 TCP 래퍼를 통해 접근 권한을 확인하고 필요에 따라 다른 서버 프로그램을 시작하여 메모리 사용량 감소 및 시스템 관리 효율성을 높이지만, 높은 연결 요청 빈도에서는 성능 저하를 유발할 수 있으며, inetd, launchd, systemd, ucspi-tcp, xinetd 등이 대표적인 구현체이다.
  • 서버 - 씨마이크로
    씨마이크로는 2007년 설립되어 투자 유치 후 AMD에 인수된 서버 개발 회사로, SM10000, SM15000 시리즈 등의 제품을 개발하고 버라이즌과의 협력 및 여러 수상 경력을 보유하고 있다.
데몬 (컴퓨팅)
기본 정보
유형컴퓨터 프로그램
실행 형태백그라운드 프로세스
기능특정 작업 자동 수행, 서비스 제공
상세 정보
정의사용자의 직접적인 제어 없이 백그라운드에서 실행되는 컴퓨터 프로그램
역할네트워크 서비스 관리
하드웨어 관리
시스템 유지 보수
특징일반적으로 사용자 인터페이스를 가지지 않음
시스템 시작 시 자동으로 실행되거나 특정 이벤트 발생 시 실행됨
낮은 우선 순위로 실행되어 시스템 자원 사용 최소화
예시HTTP 서버 (Apache, nginx)
SMTP 서버 (Sendmail, Postfix)
SSH 서버 (sshd)
DNS 서버 (BIND)
시스템 로깅 데몬 (syslogd)
어원MIT의 프로젝트 MAC에서 유래, 맥스웰의 데몬에서 영감을 받음
용어 유래에 대한 추가 설명데몬은 사용자를 위해 작업을 수행한다는 점에서 맥스웰의 데몬과 유사함
다른 이름서비스 (Windows 운영체제)
구현
구현 방식fork() 시스템 호출을 사용하여 부모 프로세스를 종료하고 자식 프로세스를 백그라운드에서 실행
setsid() 시스템 호출을 사용하여 새로운 세션을 생성하고 프로세스를 세션 리더로 만듦
표준 입력, 표준 출력, 표준 에러를 `/dev/null`로 리디렉션
작업 디렉토리를 루트 디렉토리 (`/`) 로 변경
파일 모드 생성 마스크를 0으로 설정
관련 용어
관련 용어유닉스 철학

2. 용어의 유래

도깨비유령을 뜻하는 데몬(daemon)이라는 이름은 MIT의 MAC 프로젝트 프로그래머들이 처음 사용했다.[2] 이들은 맥스웰이 언급한 맥스웰의 도깨비 사고 실험에서 영감을 얻었다. 맥스웰의 도깨비는 보이지 않는 곳에서 분자들을 골라주는 일을 하는 유령을 가리킨다.[2] 이후 유닉스 시스템이 이 용어를 받아들여 사용했다.

그리스 신화에서도 신들이 관여하지 않는 일을 처리하는 데몬이 등장하는데, 이는 사용자가 직접 신경 쓰지 않도록 백그라운드에서 일을 처리해 주는 데몬의 역할과 비슷하다. BSD 계열 운영 체제는 BSD 데몬마스코트로 삼았는데, 이는 기독교에서 묘사되는 악마의 모습을 귀엽게 만든 것이다. 원래 daemon은 두문자어가 아니지만, Disk And Execution MONitor로 두문자어처럼 뜻을 맞추어 말하기도 한다.[6][1]

2. 1. 어원

daemon영어이라는 용어는 MIT 프로젝트 MAC의 프로그래머들이 맥스웰의 도깨비 사고 실험에서 영감을 받아 만들었다. 페르난도 J. 코르바토에 따르면, 1963년경 프로젝트 MAC에서 이 용어를 처음 사용했는데, 이는 분자를 분류하는 데 도움을 주는 물리학 및 열역학의 가상 에이전트에서 유래했다고 한다.[2] 그는 "우리는 시스템 작업을 끊임없이 수행하는 백그라운드 프로세스를 설명하기 위해 데몬이라는 단어를 재미있게 사용하기 시작했다"라고 말했다.[2]

이후 유닉스 시스템이 이 용어를 받아들였다. 그리스 신화에서 데몬은 신들이 관여하지 않는 일을 처리하는 초자연적인 존재로 묘사되는데, 이는 사용자가 직접 신경 쓰지 않아도 백그라운드에서 작업을 처리하는 데몬의 역할과 일치한다. BSD 계열 운영 체제는 BSD 데몬을 마스코트로 사용하는데, 이는 기독교에서 묘사되는 악마의 모습을 귀엽게 만든 것이다.

''데몬''의 대체 용어로는 서비스 (윈도우 NT 이후의 윈도우와 나중에 리눅스에서도 사용), ''시작된 태스크''(IBM z/OS),[4] 및 ''고스트 잡''(XDS UTS)이 있다.

일반적인 의미에서 데몬은 "악마"라는 단어의 더 오래된 형태이며, 그리스어 δαίμωνgrc에서 유래되었다. ''유닉스 시스템 관리 핸드북''에서 에비 네메스는 데몬에 대해 다음과 같이 언급했다.[3]

이 용어가 컴퓨터 사용에 채택된 후에는 Disk And Execution MONitor의 두문자어로 합리화되었다.[6][1]

2. 2. BSD 데몬

페르난도 J. 코르바토에 따르면, MIT의 Project MAC에서 일하던 1963년에 그의 팀이 데몬(daemon)이라는 용어를 처음 사용했다고 한다. 분자를 나누어주는 물리, 열역학의 상상 속 존재인 맥스웰의 악마 (Maxwell's demon)가 발상의 근원이 되었다고 한다.[13][14]

UNIX 시스템이 이 용어를 계승했다. BSD와 그 파생 OS는 데몬을 마스코트로 삼고 있다. 이 마스코트는 기독교에서 흔히 보이는 악마 (demon)의 모습을 하고 있다. 서양에서는 "demon"으로 표기하는 경우도 많다.[15] 두 단어 모두 발음은 같으며, 한국어 표기로는 "데몬"이 가깝다.

일반적인 의미에서의 daemon은 demon의 옛 표기이며, 그리스어 δαίμων|다이몬grc에서 유래되었다. ''Unix System Administration Handbook''에서 Evi Nemeth는 다음과 같이 기록하고 있다.[16]

신화적 상징으로서의 부연 설명을 하자면, daemon은 눈에 보이지 않지만 항상 곁에 있으며 그 의지를 발휘하는 존재이다. 플라톤의 저작에서 소크라테스는 자신의 개인적인 daemon을 현대적인 도덕적 양심과 같은 개념으로 설명하고 있다.

3. 데몬의 종류

기술적으로 엄밀히 말하자면, 유닉스에서 부모 프로세스가 PID 1(init)이고 제어하는 터미널이 없을 때 그 프로세스를 데몬이라 할 수 있다. 부모 프로세스가 종료되면 init 프로세스가 그 프로세스를 받아들인다.

일반적으로 데몬을 만드는 과정은 다음과 같다.


  • 프로세스를 제어하고 있는 터미널로부터 분리한다. (fork호출, 부모 프로세스는 exit호출)
  • 프로세스를 세션 리더로 만든다.
  • 프로세스를 프로세스 그룹의 리더로 만든다. (setsid() 호출)
  • (한 번이나 두 번) 포크한 뒤 프로세스를 종료하여 자식 프로세스가 백그라운드에 남게 한다. 이 방법은 세션 리더를 만드는 데도 쓰이며, 부모 프로세스를 종료하지 않고 일반적인 작업을 수행할 수도 있다. 이 방법을 요약하여 ‘fork off and die’라고 한다.
  • 루트 디렉터리("/")를 현재 작업 디렉터리로 만든다. (chdir("/") 호출)
  • umask를 0으로 변경해서 호출한 쪽의 umask와 상관 없이 open(), creat() 등의 호출을 수행할 수 있도록 한다. (umask(0)호출)
  • 상속받았으며, 부모 프로세스가 열고 있는 파일들을 자식 프로세스에서 모두 닫는다. 여기에는 0, 1, 2번 파일 서술자(각각 stdin, stdout, stderr)도 포함된다.
  • 로그 파일이나 콘솔, 또는 /dev/null을 stdin, stdout, stderr로 설정한다.


MS-DOS 환경에서 이러한 프로그램은 종료 후 상주 프로그램(TSR)의 형태를 취했다. 마이크로소프트 윈도우에서는 데몬과 같은 역할을 하는 프로그램을 '''서비스'''라고 부르지만, 유닉스 계열의 영향을 받아 데몬이라고 부르는 경우도 있다. 클래식 맥 OS에서는 이러한 프로그램을 '''시스템 확장'''이라 불렀으며, 유닉스 계열 운영 체제인 OS X에서는 데몬이 존재한다. (서비스도 존재하긴 하지만 전혀 다른 개념이다.)

데몬의 종류는 다음과 같다.

  • 작업 스케줄러(Crontab, at) 계열 데몬 - anacron, atd, crond
  • 시스템 관리 계열 데몬 - apmd, init, klogd[19], launchd(macOS), syslogd, webmin
  • Network File System 관련 데몬 - nfsd, mountd, rquotad
  • 주변 기기 관련 데몬 - blued(macOS), cupsd, kerneld(LKM용 데몬), mpd, pcmcia
  • 통신 프로토콜서버
  • bootparamd, dhcpd, fingerd, ftpd, httpd, inetd, isdn, named, ntpd, portmap, routed, rpcbind, snmpd, squid, sshd, tcpd, telnetd, xfsd(X 폰트 서버), xinetd, ypbind
  • 전자 메일 - fetchmail, imapd, postfix, sendmail, smtpd
  • Samba - nmbd, smbd
  • 분산 메모리 캐시 - memcached
  • 데이터베이스 서버 - mysql, postgresql

4. 구현

유닉스 계열 시스템에서 프로세스가 데몬이 되는 일반적인 방법은 다음과 같다.[18]


  • fork 후 exit하여 백그라운드 작업으로 실행한다(fork의 부모 "반쪽"에서). 이렇게 하면 데몬의 부모(셸 또는 시작 프로세스)가 종료 알림을 받고 정상적인 실행을 계속할 수 있다.
  • 일반적으로 `setsid()`라는 단일 작업으로 호출 세션에서 분리한다.
  • 제어 tty에서 연결을 해제한다.
  • 새 세션을 만들고 해당 세션의 세션 리더가 된다.
  • process group 리더가 된다.
  • 데몬이 실수로라도 새로운 제어 tty를 획득하지 않도록 하려는 경우(제어 tty가 없는 세션 리더가 자유 tty를 열 때 발생함) 다시 fork하고 종료할 수 있다. 이는 새 세션에서 더 이상 세션 리더가 아니며 제어 tty를 획득할 수 없음을 의미한다.
  • root directory (/)를 현재 working directory로 설정하여 프로세스가 마운트된 파일 시스템에 있을 수 있는 사용 중인 디렉토리를 유지하지 않도록 한다(마운트 해제 가능).
  • umask를 0으로 변경하여 `open()`, `creat()` 및 기타 운영 체제 호출이 자체 권한 마스크를 제공하고 호출자의 umask에 의존하지 않도록 한다.
  • file descriptor 0, 1 및 2를 표준 스트림(stdin, stdout 및 stderr)에 대해 /dev/null 또는 로그 파일로 리디렉션하고 부모 프로세스에서 상속된 다른 모든 파일 디스크립터를 닫는다.


MS-DOS 환경에서는 이러한 프로그램을 종료 후 상주 프로그램(TSR) 형태로 작성했다. 마이크로소프트 윈도우에서는 데몬과 같은 역할을 하는 프로그램을 '''서비스'''라고 부르지만, 유닉스 계열의 영향을 받아 데몬이라고 부르는 경우도 있다. 초기 맥 OS에서는 이러한 프로그램을 '''시스템 확장'''이라 불렀으며, 유닉스 계열 운영 체제인 macOS에서는 데몬이 존재한다. (서비스도 존재하지만 전혀 다른 개념이다.)

4. 1. 유닉스 계열 시스템

엄밀한 기술적 의미에서 유닉스 계열 시스템 프로세스는 부모 프로세스가 종료되고 해당 데몬이 init 프로세스(프로세스 번호 1)를 부모 프로세스로 할당받고 제어 터미널이 없는 경우 데몬이다. 그러나 더 일반적으로, 데몬은 init 프로세스의 자식 프로세스이든 아니든, 모든 백그라운드 프로세스일 수 있다.

유닉스 계열 시스템에서 프로세스가 데몬이 되는 일반적인 방법은 다음과 같다.

  • fork하고 exit하여 백그라운드 작업으로 실행한다(fork의 부모 "반쪽"에서). 이렇게 하면 데몬의 부모(셸 또는 시작 프로세스)가 종료 알림을 받고 정상적인 실행을 계속할 수 있다.
  • 일반적으로 `setsid()`라는 단일 작업으로 호출 세션에서 분리한다.
  • 제어 tty에서 연결을 해제한다.
  • 새 세션을 만들고 해당 세션의 세션 리더가 된다.
  • process group 리더가 된다.
  • 데몬이 실수로라도 새로운 제어 tty를 획득하지 않도록 하려는 경우(제어 tty가 없는 세션 리더가 자유 tty를 열 때 발생함) 다시 fork하고 종료할 수 있다. 이는 새 세션에서 더 이상 세션 리더가 아니며 제어 tty를 획득할 수 없음을 의미한다.
  • root directory (/)를 현재 working directory로 설정하여 프로세스가 마운트된 파일 시스템에 있을 수 있는 사용 중인 디렉토리를 유지하지 않도록 한다(마운트 해제 가능).
  • umask를 0으로 변경하여 `open()`, `creat()` 및 기타 운영 체제 호출이 자체 권한 마스크를 제공하고 호출자의 umask에 의존하지 않도록 한다.
  • file descriptor 0, 1 및 2를 표준 스트림(stdin, stdout 및 stderr)에 대해 /dev/null 또는 로그 파일로 리디렉션하고 부모 프로세스에서 상속된 다른 모든 파일 디스크립터를 닫는다.


POSIX 준수 OS에서의 프로세스 관리 하에서, 데몬 프로세스는 다음의 성질을 가진다.

  • 독립적인 세션에 소속된다. 이로 인해, 부모 프로세스의 세션 리더가 종료되어도 영향을 받지 않고 실행을 계속한다.
  • 제어 터미널을 갖지 않는다. 이것은 쉘이나 제어 터미널에 의한 작업 제어의 대상이 되지 않음을 의미한다.


POSIX 준수 OS에서, 데몬을 기동하는 일반적인 수법은 다음과 같다.

  • fork를 실행한다. POSIX에서는 프로세스 그룹의 리더가 되어 있는 프로세스가 새롭게 세션을 시작하는 것을 금지하고 있다[18] 때문에 필요한 처리이다. 이 처리는 부모 프로세스가 정상적으로 실행을 계속하고 있어도 가능하다. 이 단계에서 부모 프로세스가 즉시 종료되는 구현의 경우, 이 처리를 "fork off and die"라고 부른다.
  • setsid를 실행한다. 이로 인해, 위에 언급한 자식 프로세스는 새로운 세션에 소속되어, 부모 프로세스 측의 세션 제어 대상에서 벗어난다. 또한, POSIX의 사양에 따라, 이 프로세스는 새로운 프로세스 그룹에 소속되며, 제어 터미널을 가지고 있었을 경우 이를 잃는다. 이로 인해, 부모 프로세스 및 제어 터미널에 의한 작업 제어 대상에서도 벗어난다.
  • 프로세스의 현재 디렉토리를 루트 디렉토리 ("/")로 함으로써, 프로세스가 다른 디렉토리를 사용 중이지 않도록 한다.
  • umask를 0으로 변경한다. 이것은 open(), creat(), 그 외의 호출에, 그들 자신의 퍼미션 마스크를 주어, 호출 측의 umask에 영향을 받지 않도록 하기 위함이다.
  • 실행 시에 부모 프로세스가 열어 놓은, 부모 프로세스로부터 상속된 모든 오픈 파일을 닫는다(필요한 파일은 나중에 오픈한다). 닫는 파일에는 파일 디스크립터 0, 1, 2 (stdin 표준 입력, stdout 표준 출력, stderr 표준 에러 출력)도 포함된다.
  • 표준 스트림 (stdin, stdout, stderr)을 로그 파일 또는 콘솔 또는 /dev/null로 리다이렉션한다.
  • 시그널 핸들러를 설치한다. 이것은 데몬을 외부에서 제어하는 수단으로 종종 사용된다.


최근의 유닉스 계열 시스템에는, 상술한 처리를 수행하는 함수 daemon()이 준비되어 있으며, 그 함수를 사용하는 것만으로 자 프로세스를 데몬으로 변경할 수 있다.

유닉스 계열 시스템의 데몬 종류는 다음과 같다.

종류설명
작업 스케줄러(Crontab, at) 계열 데몬anacron, atd, crond
시스템 관리 계열 데몬apmd, init, klogd[19], launchd(macOS), syslogd, webmin
Network File System 관련 데몬nfsd, mountd, rquotad
주변 기기 관련 데몬blued(macOS), cupsd, kerneld(LKM용 데몬), mpd, pcmcia
통신 프로토콜서버bootparamd, dhcpd, fingerd, ftpd, httpd, inetd, isdn, named, ntpd, portmap, routed, rpcbind, snmpd, squid, sshd, tcpd, telnetd, xfsd(X 폰트 서버), xinetd, ypbind
전자 메일fetchmail, imapd, postfix, sendmail, smtpd
Sambanmbd, smbd
분산 메모리 캐시memcached
데이터베이스 서버mysql, postgresql


4. 2. 윈도우 NT

마이크로소프트 윈도우 NT 시스템에서, 윈도우 서비스라고 불리는 프로그램이 데몬의 기능을 수행한다.[1] 이들은 프로세스로 실행되며, 일반적으로 모니터, 키보드 및 마우스와 상호 작용하지 않으며, 부팅 시 운영 체제에 의해 시작될 수 있다.[1] 윈도우 2000 및 이후 버전에서는 Windows 서비스는 제어판, 전용 제어/구성 프로그램, 서비스 제어 관리자의 서비스 컨트롤러 구성 요소 (sc 명령), net start 및 net stop 명령 또는 PowerShell 스크립팅 시스템을 사용하여 구성하고 수동으로 시작하고 중지한다.[1]

그러나 모든 Windows 응용 프로그램은 서비스뿐만 아니라 데몬의 역할을 수행할 수 있으며, 일부 Windows 데몬은 일반 프로세스로 실행하는 옵션이 있다.[1]

4. 3. macOS

macOS는 유닉스 시스템으로 데몬을 사용하지만, 서비스 메뉴에서 선택된 기능을 수행하는 소프트웨어를 지정하기 위해 "서비스"라는 용어를 사용하며, 윈도우가 사용하는 데몬에 해당 용어를 사용하지 않는다.[1] 초기 Mac OS에서는 옵션 기능이나 서비스를 시작 시 파일로 로드하여 OS에 패치하는 기능이 있었다.[1] 그것들을 시스템 확장 및 제어판이라고 불렀다.[1] 그 후의 Mac OS에서는, 그것들이 윈도우 표시되지 않는 백그라운드에서 동작하는 보통의 애플리케이션으로 발전해 갔다.[1] 사용자에게는 그것들을 여전히 시스템 확장이라고 설명했다.[1]

참조

[1] 웹사이트 daemon http://catb.org/~esr[...] 2008-10-22
[2] 웹사이트 The Origin of the word Daemon http://ei.cs.vt.edu/[...]
[3] 웹사이트 The BSD Daemon http://www.freebsd.o[...] Freebsd.org 2008-11-15
[4] 웹사이트 Glossary of z/OS terms and abbreviations https://www.ibm.com/[...] IBM 2006-01-31
[5] 웹사이트 sshd: OpenSSH server process {{!}} SSH Academy https://www.ssh.com/[...] 2023-12-04
[6] 웹사이트 Daemon Definition http://www.linfo.org[...]
[7] 문서 inetd FreeBSD
[8] 문서 launchd.plist Darwin
[9] 웹사이트 systemd.service http://www.freedeskt[...] freedesktop.org 2012-08-25
[10] 웹사이트 daemon http://catb.org/~esr[...] 2008-10-22
[11] 웹사이트 タスクモニタを用いてのシステムツールの開発実習 https://www.toppers.[...]
[12] 문서 出典 http://hp.vector.co.[...]
[13] 웹사이트 The Origin of the word Daemon http://ei.cs.vt.edu/[...] 2012-07-05
[14] 웹사이트 Take Our Word for It http://www.takeourwo[...] 2006-08-20
[15] 웹사이트 Merriam-Webster definition of daemon http://www.merriam-w[...] 2009-08-05
[16] 웹사이트 The BSD Daemon http://www.freebsd.o[...] Freebsd.org 2008-11-15
[17] 문서 テアゲス
[18] 문서 프로세스 그룹
[19] 웹사이트 klogd http://unixhelp.ed.a[...]
[20] 웹인용 Jargon File에 수록된 daemon 항목 http://foldoc.org/in[...] 2007-07-18



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com