리눅스 - 데몬(서비스), 프로세스 차이 (feat.systemd)
윈도우에서 주로 사용하는 개념인 서비스와 리눅스 등 유닉스 계열에서 사용하는 데몬은 완전히 같지는 않지만 유사하게 생각하면 될 것이다. 그래서 리눅스에서 service라는 단어가 보인다면, demon과 유사하게 생각해도 좋을것. 이 글은 개발자들을 위한 것이므로 리눅스를 기준으로 설명하도록 하겠다.
데몬 VS 프로세스
둘다 process는 프로세스이나, 데몬은 사용자가 아닌 시스템에서 제어하는 프로세스이고 보통은 시스템 기동과 함께 항상 백그라운드에서 수행되고 있는 프로세스라고 보면 된다. 다만, 사용자가 특정 프로세스를 데몬으로 등록하여 사용하겠다 하면 이 프로세스 또한 사용자등록 데몬이 된다.
이에 반해 프로세스는 사용자가 제어하는 실행단위이고, 시스템 기동과 함께 동시에 기동되지 않기 때문에 사용자가 필요에 따라 자유롭게 실행/중지를 하는 프로세스라고 보면 될 것이다.
그렇다면 데몬만 알면 그외에는 전부 일반 프로세스라고 보면 될것이니, 데몬에 대해서 더 살펴보자.
demon(데몬)
systemd 프로세스
데몬이 되는가 일반 프로세스가 되는가를 가르는 큰 차이는 해당 프로세스를 systemd라는 프로세스가 관리를 하느냐 안하느냐라고 보면 될 것 같다. 데몬은 systemd 프로세스가 관리를 한다. 그 방법으로는, syetemd 프로세스가 .service로 끝나는 서비스 파일을 실행/중지 함으로서 해당 파일로 이루어진 프로세스를 데몬으로 만들고 관리하게 된다.
systemctl이란
많이들 봤을 systemctl 명령어는 systemd 프로세스의 cli명령어이다. systemd 프로세스를 컨트롤하기 위한 명령어이고, 이를 통해 데몬들을 관리하는 것.
service파일 위치
service파일의 경우 생성해야 하는 위치가 /usr/lib/systemd/system/ 이 경로로 정해져있다.
예를 들어 아파치 httpd.service 와 같이 demon으로 기동시키는 걸로 되어 있는 프로세스 같은 경우에 설치파일을 통해 설치를 하게 되면, 자동으로 위 경로에 .service파일을 생성한다. 이 파일들이 실행가능한 enable상태가 되면, /etc/systemd/system 이 경로로 심볼릭 링크들이 생성이 됨을 알수가 있다. 이 폴더로 가보면 target.wants 이러한 디렉토리를 볼수 있는데 이는 앞서 생성한 service유닛의 집합이라고 보면 될것이다.
service명령어 vs systemctl 명령어
service명령어는 리눅스 old 버전에서 주로 사용하던 명령어 이고, systemctl은 그 이후에 나온 명령어로서 사용법은 다소 다르지만, 둘다 systemd프로세스를 컨트롤하고, 데몬을 관리하는 명령어라는점에서는 다를바는 없다. 자세한 명령어는 여기서 다루지 않을테니, 별도로 검색하면 쉽게 찾을 수 있을것.