본문 바로가기

Linux/systemd

systemd란 무엇인가

앞으로 티스토리 대신 blog.stackframe.dev에서 블로깅을 합니다. 이 블로그는 남겨 둘 예정입니다.

근 몇 년 안에 리눅스를 조금이라도 깊게 사용해봤다면 systemd라는 미지의 프로세스가 있다는 것을 눈치채셨을 겁니다. 오래전에 사용하셨던 분이라면 init이 사라져버리고 systemd가 떡하니 PID 1를 차지하고 있는 것을 보고 의아해 하였을 분도 계실겁니다.

systemd가 PID 1을 차지하는 것을 보면 init이 퇴출당하고 init이 하던 작업을 물려받은 더 대단한 systemd가 나타났다는 것을 쉽게 유추할 수 있습니다. 도대체 뭐가 그리 좋길래 상당수의 배포판들이 오래전부터 사용해오던 init을 버리고 systemd로 갈아탔는지 알아봅시다.


예전의 PID 1이었던 init은 현재로부터 수 십 년 전에 처음 소개된 프로그램인데 그 때의 구조를 거의 바꾸지 않고 계속 기능이 추가되며 날이 갈수록 복잡해지는 프로그램들로 인해 효율이 떨어졌습니다. 그리고 그 구조라는 것이 시작할 프로그램을 구동하는 쉘 스크립트를 특정 run-level의 rc 디렉토리에 추가하는 것이고, init은 부팅 과정에서 단계적으로 run-level을 올려가며 해당 run-level에 포함된 스크립트들을 순차적으로 실행시키니 설정의 난잡함 뿐만 아니라 속도마저 느렸습니다.

이런 문제들을 해결하기 위해 Red Hat에 근무하는 Lennart Poettering과 Kay Sievers란 사람들이  systemd를 만들기 시작했습니다. 이렇게 만들어진 systemd는 당연하지만 init보다 우월한 성능과 직관적인 설정을 가지게 되었습니다. 의존성을 해치지 않으며 가능한 한 병렬로 시작 프로그램들을 실행시키는 것으로 부팅 속도를 끌어올리고, 프로그램 실행을 위한 파일로는 쉘 스크립트가 아니라 .service라는 systemd만의 unit을 통해 체계적이면서 가독성이 좋게 설정이 가능해졌습니다.


게다가 systemd는 단지 init 뿐만 아니라 다른 프로그램들의 기능들마저 뺏어오기까지 합니다. 실제로 컴퓨터의 네임서버 주소를 설정하는 resolvconf의 자리를 systemd-resolved가, DHCP 서버에서 IP를 받아와서 네트위크 인터페이스에 설정하는 dhcpcd의 자리를 systemd-networkd가 대체할 수 있습니다. 이외에도 시스템 내부의 udev가 systemd에 포함되는 등 여러 방면에서 systemd의 존재가 강력해지고 있습니다. 이렇게 systemd가 여러 영역을 아우르는 것을 보고 혹자들은 하나만 잘하자 라는 UNIX의 철학에 어긋난다고 말하기도 합니다. 이건 제 개인적인 생각입니다만 UNIX 철학같은걸 따지기보다 실제 사용에 있어서 편리성과 앞으로의 발전 가능성을 보는 것이 더 바람직하다고 생각합니다. 그리고 systemd는 PID 1의 임무를 착실하게 수행하고 있으며 다른 부분에 대해서는 systemd-*의 이름으로 따로 존재하니 UNIX 철학에 너무 벗어나지 않는 것처럼 보이기도 합니다.


먼저 systemd 구성을 알아봅시다.


systemd : init 데몬

systemd-journald : 다른 데몬(프로세스)들의 출력(syslog, 표준, 에러 출력), 로그 저장 데몬

systemd-logind : 사용자 로그인, 세션 등 관리 데몬

systemd-udevd : 장치 관리자 데몬

systemd-networkd : 네트워크 관리 데몬. DHCP 뿐만 아니라 Virtual Lan 설정까지 가능

systemd-resolved : DNS 해석 데몬

systemd-timesyncd : NTP로 컴퓨터 시간 동기화 데몬

systemd-boot : UEFI 부트로더


몇몇 구성부분이 더 있지만 사용자가 어느정도 자주 접할 수 있는 것들은 위와 같습니다. 위에서부터 4개는 필수적으로 필요한 것이고, 나머지들은 대체할 다른 프로그램이 있다면 설정, 실행하지 않아도 괜찮은 것들입니다. 이러한 데몬이나 systemd의 사용자 설정파일은 /etc/systemd/ 에 존재합니다.

저 파일명을 man 페이지에 검색하면 자세한 옵션들의 설명을 볼 수 있으니 참고하시기 바랍니다.

한 예로 /etc/systemd/resolved.conf 파일을 가져와 보았습니다. systemd의 직관적인 설정을 잘 느낄 수 있을겁니다. 다른 systemd의 설정파일들도 모두 이런 형태로 만들어져 있기 때문에 man 페이지만 참고하시면 어떠한 설정이라도 금방 할 수 있다는 장점이 있습니다.


이렇게 systemd는 리눅스 시스템의 전반적인 부분을 관리하면서 이전의 init보다 더 다양한 기능들을 제공합니다. 현재 대부분의 배포판들이 systemd를 채용하였으니 앞으로 리눅스를 사용하시려면 systemd의 설정과 관리 방법을 알아두시는게 중요합니다.

'Linux > systemd' 카테고리의 다른 글

systemd 사용자 유닛 만들기  (0) 2019.01.09
리눅스 시스템 시간 동기화하기  (0) 2018.12.30
systemd timer로 cron 대체하기  (4) 2018.12.30
systemd로 서비스 관리하기  (0) 2018.12.27
systemd-resolved 사용하기  (2) 2018.12.23