글 목록으로 돌아가기
최오키 개발블로그 6분 읽기

️ 프로세스, 데몬, 서비스 완벽 구분하기 - 개발자가 알아야 할 핵심

개발을 하다 보면 "데몬이 뭐지?


개발을 하다 보면 “데몬이 뭐지?”, “서비스와 데몬은 뭐가 다르지?” 같은 질문에 자주 마주치게 돼요. 특히 리눅스 서버를 다루거나 시스템 아키텍처를 이해할 때 이 개념들이 자꾸만 헷갈리는데, 사실 명확한 구분만 해두면 훨씬 이해하기 쉬워집니다.

이 글에서는 프로세스, 데몬, 서비스의 차이를 명확하게 정리해드릴 거예요. 각각이 어떻게 동작하고, 언제 사용되며, 운영체제별로 어떻게 다르게 불리는지까지 실무에서 바로 쓸 수 있는 수준으로 설명하겠습니다.


⚙️ 프로세스(Process) - 모든 것의 시작

프로세스 는 메모리에 적재되어 CPU에 의해 실행되는 컴퓨터 프로그램을 말합니다. 쉽게 생각하면 “지금 실행 중인 프로그램”이라고 보면 돼요. 각 프로세스는 고유한 PID(Process ID) 를 가지며, 운영체제가 프로세스 간의 자원 공유를 관리합니다.

프로세스는 크게 두 가지로 구분돼요. 사용자와 상호작용하는 포그라운드 프로세스 와 백그라운드에서 조용히 일하는 백그라운드 프로세스 입니다. 인터넷 브라우저, 카카오톡, 메모장 같은 건 포그라운드 프로세스고, 백신 프로그램이나 그래픽 드라이버는 백그라운드 프로세스죠.

프로세스, 데몬, 서비스의 관계도

포그라운드 프로세스는 사용자가 직접 조작할 수 있어요. 창을 최소화해도 눈에 보이고, 키보드나 마우스로 제어할 수 있습니다. 반면 백그라운드 프로세스는 눈에 띄지 않지만 뒤에서 열심히 일하고 있어요. 사용자 입력을 기다리지 않고 자신의 일을 계속하죠.

윈도우 작업관리자에서 보이는 백그라운드 프로세스 카테고리

정리하자면, 프로세스는 모든 실행 프로그램의 기본 단위이고, 포그라운드/백그라운드로 나뉜다는 것만 기억하면 돼요.


👻 데몬(Daemon) - 백그라운드의 충직한 일꾼

데몬 은 백그라운드에서 실행되는 특수한 프로세스입니다. 사용자가 직접 제어하지 않지만, 시스템이 시작될 때 자동으로 실행되어 시스템이 종료될 때까지 계속 돌아가요. 마치 “항상 깨어있는 집사”처럼요.

데몬의 가장 큰 특징은 자동 실행 이라는 점입니다. 사용자가 매번 실행할 필요 없이, 시스템 부팅 시 자동으로 시작됩니다. 그리고 유닉스/리눅스 운영체제에서는 데몬의 이름 끝에 “d”가 붙어요. 예를 들어 웹 서버 데몬 httpd , SSH 서버 데몬 sshd , 정기 작업 관리 데몬 cron 같은 식이죠.

데몬은 항상 요청을 기다리고 있는 리스너 역할

데몬이 하는 일을 구체적으로 보면 이렇습니다. 웹 서버 데몬인 httpd는 포트 80번에서 계속 대기하다가 HTTP 요청이 들어오면 즉시 응답해줘요. SSH 데몬인 sshd는 포트 22번을 모니터링하다가 원격 접속 요청이 오면 처리합니다. 이렇게 데몬은 특정 요청이 올 때까지 대기했다가, 요청이 들어오면 즉각 대응하는 “리스너” 역할을 하는 거죠.

리눅스의 주요 데몬들 - 이름 끝에 ‘d’가 붙음

📋 주요 데몬의 역할

데몬의 중요한 특징 중 하나는 PPID(부모 프로세스 ID)가 1 이라는 거예요. 이는 데몬의 부모가 init 프로세스라는 뜻입니다. init은 시스템이 부팅될 때 가장 먼저 실행되는 프로세스(PID 1)로, 모든 다른 프로세스의 직간접 부모 역할을 합니다. 데몬이 이렇게 init을 부모로 두는 이유는 사용자 터미널과의 연결을 끊기 위해서예요.

데몬은 보통 “fork off and die” 과정을 거쳐 만들어집니다. 부모 프로세스가 자식 프로세스를 fork(복사)한 후, 부모는 종료되고 자식만 남아요. 이렇게 되면 자식 프로세스는 고아 프로세스가 되고, init이 이를 입양하게 되는 거죠. 결과적으로 데몬은 사용자 터미널과 무관하게 독립적으로 실행될 수 있게 됩니다.


🔧 데몬의 실행 방식 - 독자형 vs 슈퍼데몬

리눅스에서 데몬을 실행하는 방식은 크게 두 가지가 있어요. 각각 장단점이 있으니 상황에 맞게 선택합니다.

🎯 독자형(Standalone) 방식

독자형 방식은 데몬이 항상 메모리에 상주하면서 독립적으로 동작하는 방식입니다. 시스템 부팅 시 자동으로 시작되어 시스템이 종료될 때까지 계속 실행돼요. 요청이 들어오면 즉시 응답할 수 있다는 장점이 있지만, 자주 사용되지 않는 서비스라도 계속 메모리를 점유한다는 단점이 있습니다.

독자형 방식의 데몬은 보통 /etc/init.d/ 또는 /etc/rc.d/init.d/ 디렉토리의 스크립트로 관리됩니다. 예를 들어 SSH 서비스는 다음과 같이 제어할 수 있어요.

독자형 방식은 웹 서버(httpd), 데이터베이스(mysqld), 메일 서버(sendmail) 같이 자주 사용되는 서비스에 적합해요. 요청이 많이 들어오기 때문에 항상 준비 상태로 있는 게 효율적이거든요.

⚡ 슈퍼데몬(Super Daemon) 방식

슈퍼데몬 방식은 좀 다릅니다. 평소에는 슈퍼데몬(xinetd)만 메모리에 상주하다가, 특정 서비스에 대한 요청이 들어오면 그때 해당 데몬을 실행시키는 방식이에요. 마치 “필요할 때만 직원을 출근시키는” 방식이라고 보면 됩니다.

이 방식의 장점은 메모리를 효율적으로 사용한다는 거예요. 자주 사용되지 않는 서비스는 필요할 때만 실행되니까요. 다만 요청이 들어왔을 때 데몬을 실행해야 하므로, 독자형 방식보다 응답 시간이 조금 더 걸릴 수 있습니다.

슈퍼데몬 방식은 Telnet, POP3, Finger 같이 자주 사용되지 않는 서비스에 적합합니다. 관리자가 서버를 켜고 끌 필요 없이 자동으로 관리되거든요.

정리하자면, 데몬은 시스템의 백그라운드에서 계속 일하는 프로세스이고, 자동 실행되며, 특정 요청을 기다리다가 즉시 대응하는 역할을 한다는 게 핵심입니다.


💼 서비스(Service) - 윈도우의 데몬

서비스 는 백그라운드에서 실행되는 응용 프로그램입니다. 윈도우 운영체제에서 사용되는 용어인데, 사실 개념적으로는 리눅스의 데몬과 거의 같아요. 사용자 인터페이스를 필요로 하지 않는 작업들, 예를 들어 네트워크 서비스, 데이터베이스 서버, 백업 서비스 같은 것들을 수행합니다.

윈도우의 서비스 - 데몬과 동일한 역할

윈도우 서비스의 특징을 보면:

  • 시스템이 부팅될 때 자동으로 시작됨
  • 사용자가 로그인하지 않아도 계속 실행됨
  • 보통 관리자 권한으로 실행됨
  • 서비스 관리자(Services.msc)를 통해 관리 가능

윈도우에서 서비스를 관리하려면 “서비스” 앱을 열거나, 명령 프롬프트에서 다음과 같이 할 수 있어요.

윈도우 서비스 매니저(상)와 리눅스의 init 프로세스 리스트()


🔍 프로세스 vs 데몬 vs 서비스 - 명확한 구분

🎲 데몬 vs 백그라운드 프로세스

여기서 많은 사람들이 헷갈려하는 부분이 있어요. 데몬과 백그라운드 프로세스가 뭐가 다른가 하는 거죠.

가장 큰 차이는 자동 실행 여부 입니다. 프로세스는 필요할 때 사용자가 직접 실행하는 반면, 데몬은 시스템이 부팅될 때 자동으로 시작돼요. 예를 들어 노트패드는 사용자가 직접 실행해야 하지만, 백신 프로그램은 컴퓨터를 재부팅해도 자동으로 실행됩니다.

또 다른 차이는 운영체제 차이 입니다. 데몬은 주로 유닉스/리눅스 운영체제에서 사용되는 용어이고, 백그라운드 프로세스는 윈도우에서 사용되는 용어예요. 리눅스에서는 init 프로세스를 통해 데몬을 관리하고, 윈도우에서는 서비스 매니저를 통해 서비스를 관리합니다.

🔗 데몬 vs 서비스

데몬과 서비스는 개념적으로 거의 같습니다. 다만 운영체제가 다를 뿐이에요. 리눅스에서는 “데몬”이라 부르고, 윈도우에서는 “서비스”라고 부르는 거죠.

하지만 사용처에서는 약간의 차이가 있어요. 데몬은 일반적으로 서버 에서 주로 사용되고, 서비스는 다른 프로그램이나 시스템을 지원 하기 위해 실행됩니다. 데몬은 시스템에서 독립적으로 실행되는 경향이 있고, 서비스는 시스템의 상태를 모니터링하고 다른 애플리케이션을 제어하는 데 초점이 맞춰져 있다고 보면 돼요.

실제로는 이 용어들이 종종 상호교환적으로 사용됩니다. 예를 들어 리눅스에도 /etc/services 파일이 있어서 포트와 프로토콜 정보를 정의하고 있거든요. 그래서 리눅스에서도 “서비스”라는 용어를 쓰기도 합니다.


🚀 초기화 프로세스(Init Process) - 모든 것의 시작

데몬을 이해하려면 초기화 프로세스(Init Process) 를 알아야 해요. 이건 운영체제가 부팅될 때 가장 먼저 실행되는 프로세스입니다.

초기화 프로세스의 가장 중요한 특징은 PID 1번 을 부여받는다는 거예요. 이는 시스템의 첫 번째 프로세스이며, 다른 모든 프로세스는 이 프로세스로부터 직간접적으로 생성됩니다. 마치 모든 프로세스의 “조상”이라고 보면 되죠.

초기화 프로세스는 다음과 같은 역할을 합니다:

  • 시스템 서비스와 데몬을 시작하고 관리
  • 시스템의 런레벨(runlevel)이나 타겟(target)을 설정
  • 고아 프로세스(부모가 없는 프로세스)를 입양
  • 시스템이 정상적으로 부팅되도록 조율

📌 초기화 시스템의 종류

시간이 지나면서 초기화 시스템도 여러 종류가 생겼어요. 각각의 특징을 알아두면 좋습니다.

1) SysVinit - 전통적인 방식입니다. 리눅스와 유닉스 계열에서 오래 사용되었어요. init 스크립트를 사용하여 서비스를 시작하고, 런레벨에 따라 어떤 서비스가 시작될지 결정합니다. /etc/init.d/ 디렉토리에 스크립트가 위치해요.

2) systemd - 현대 리눅스 배포판에서 널리 사용되는 초기화 시스템입니다. SysVinit보다 훨씬 빠르고 유연해요. systemctl 명령어로 서비스를 관리하고, 병렬 처리로 부팅 속도를 개선했습니다. 설정 파일은 /etc/systemd/system/에 위치해요.

3) Upstart - Ubuntu에서 사용되었던 초기화 시스템입니다. 이벤트 기반 시스템을 지원해서 특정 이벤트가 발생했을 때 서비스를 시작하거나 중지할 수 있었어요.

요즘은 대부분의 리눅스 배포판이 systemd를 사용하고 있어요. 그래서 다음과 같은 명령어를 자주 쓰게 됩니다.


💡 실무에서 알아두면 좋은 팁

1) 프로세스 상태 확인하기

리눅스에서 현재 실행 중인 프로세스를 확인하려면 ps 명령어를 사용해요.

이 명령어들로 데몬의 PPID가 1인지 확인할 수 있어요. 데몬이라면 PPID가 1(init)이어야 합니다.

2) 데몬 프로세스 만들기

직접 데몬을 만들 때는 다음 과정을 거쳐요:

3) 서비스 의존성 관리

systemd를 사용할 때는 서비스 간의 의존성을 설정할 수 있어요. 예를 들어 데이터베이스가 먼저 시작되어야 웹 서버가 제대로 동작하는 경우가 있죠. 이런 경우 systemd 설정 파일에서 After=나 Requires= 옵션을 사용해서 순서를 지정할 수 있습니다.

4) 로그 확인

데몬이 제대로 동작하지 않을 때는 로그를 확인하는 게 중요해요.


🎯 정리하며

프로세스, 데몬, 서비스는 모두 실행 중인 프로그램을 지칭하지만, 각각 다른 특징과 역할을 가지고 있어요.

프로세스 는 메모리에 적재되어 실행되는 모든 프로그램의 기본 단위이고, 포그라운드와 백그라운드로 나뉩니다. 데몬 은 리눅스에서 백그라운드에서 자동으로 실행되는 특수 프로세스이며, 특정 요청을 기다리다가 즉시 대응하는 역할을 합니다. 서비스 는 윈도우에서 데몬을 부르는 이름이고, 개념적으로는 거의 같습니다.

이 개념들을 명확히 이해하면 시스템 아키텍처를 설계할 때, 서버를 관리할 때, 또는 문제를 디버깅할 때 훨씬 수월해져요. 특히 리눅스 서버를 다루는 개발자라면 이 개념들이 정말 중요하니까, 이번 글을 통해 확실히 정리해두시길 바랍니다!


#프로세스 #데몬 #서비스 #리눅스 #윈도우 #systemd #백그라운드 #시스템아키텍처 #개발자 #운영체제

원문 보기

Related posts

Other Git push 시 발생하는 non-fast-forward 오류 해결 방법 Other HTTP 504 Gateway Timeout 오류의 원인과 해결 방법 Other Git에서 Detached HEAD 상태 발생 원인과 해결 방법