launchd

macOS 운영 체제는 뒷단에서 launchd라는 강력한 도구를 활용하여 다양한 작업을 자동화하고 관리합니다. 이 프로그램은 macOS 시스템의 핵심 역할을 하며, 시스템 초기화부터 작업 스케줄링, 백그라운드 프로세스 관리, 네트워크 서비스 활성화, 그리고 사용자 로그인 이벤트 처리와 같은 다양한 역할을 수행합니다.

macOS 시스템이 어떻게 부팅되고 작동하는지, 특정 시간에 어떤 작업이 실행되는지, 그리고 백그라운드에서 어떻게 프로세스가 관리되는지를 이해하기 위해서는 launchd를 알면 도움이 됩니다. 이 글에서는 launchd의 기본 개념부터 주요 기능까지 자세히 살펴보겠습니다. 이를 통해 macOS 시스템의 작동 원리를 더 깊게 이해할 수 있을 것입니다.

launchd

launchd는 macOS의 초기 부팅 프로세스로, 시스템 초기화 및 관리 역할을 담당합니다. 시스템 부팅 시, launchd는 다른 시스템 서비스 및 프로세스를 시작하고 관리하는 역할을 합니다. launchd는 Apple이 개발한, macOS와 iOS 등에서 사용되는 시스템 프레임워크입니다. 이 프레임워크는 시스템 및 애플리케이션 수준의 서비스를 관리하며, 다양한 종류의 데몬과 에이전트를 시작, 중지, 관리하는 역할을 합니다.

launchd는 애플리케이션 서비스부터 데몬까지 다양한 종류의 프로세서를 시작하거나 중지하는 역할도 합니다. 시스템 부팅, 사용자 로그인, 네트워크 상태 변경 등과 같은 특정 이벤트에 반응하여 작업을 자동으로 시작하거나 필요에 따라 자동으로 프로세서를 재시작하는 고급 기능도 제공합니다.

더불어 launchd가 제공하는 고급 기능에는 작업 스케줄링과 이벤트 기반 트리거링 등이 포함되어 있습니다. 이러한 기능들은 복잡한 작업 관리와 스케줄링 요구 사항을 충족시키기 위해 설계되었습니다. 따라서 launchd는 단순히 명령어를 순차적으로 실행하는 것보다 훨씬 복잡한 작업 관리와 스케줄링 기능을 제공한다고 할 수 있습니다.

vmware Virtualized Intel VT-x/EPT is not supported on this platform

launchd 장점과 단점

launchd의 장점은 고급 기능 제공과 이벤트 기반 실행을 통한 유연성이며, 단점은 초기 설정 복잡성 및 학습 곡선의 존재입니다. 이러한 장단점을 고려하여 시스템 관리 작업을 자동화할 때 launchd를 고려할 수 있습니다.

장점

launchd는 고급 기능을 제공하여 다양한 자동화 시나리오를 구현하고, 이벤트 기반 실행을 지원하여 특정 이벤트에 반응하는 작업을 트리거하며, 시스템 리소스를 효율적으로 관리하여 성능을 향상시킵니다.

  • launchd는 다른 작업 스케줄러인 cron과 비교했을 때 고급 기능을 제공합니다. 예를 들어, 특정 포트가 활성화되거나 파일이 변경되는 등 특정 이벤트가 발생할 때 자동으로 작업을 실행하도록 설정할 수 있습니다. 이로써 더 다양한 자동화 시나리오를 구현할 수 있습니다.
  • launchd는 시간 기반 작업 스케줄링 뿐만 아니라 이벤트 기반 실행을 지원합니다. 이것은 특정 이벤트가 발생했을 때 작업을 트리거하는 데 유용하며, 예를 들어 파일 변경, 네트워크 연결 등의 이벤트에 반응할 수 있습니다.
  • launchd는 시스템 리소스를 효율적으로 관리합니다. 필요하지 않은 데몬 프로세스를 중지하고 자원을 최적으로 활용하여 시스템의 성능을 향상시킵니다.
macOS 맥북에서 Launchpad로 이동하는 방법

단점

launchd 설정은 복잡한 XML 형식이며, 고급 기능 활용은 학습 곡선이 존재하고, macOS 및 일부 Unix 계열 운영 체제에서만 사용 가능하여 호환성이 제한적입니다.

  • launchd 설정은 XML 형식으로 작성되며, 초기에는 다소 복잡할 수 있습니다. 특히 복잡한 스케줄링 및 이벤트 기반 작업을 설정할 때는 추가적인 노력이 필요할 수 있습니다.
  • 이벤트 기반 실행 및 고급 기능을 활용하려면 launchd의 작동 원리를 이해해야 합니다. 이러한 학습 곡선이 존재하며, 처음 사용자에게는 다소 어려울 수 있습니다.
  • launchd는 macOS 및 일부 Unix 계열 운영 체제에서 사용 가능합니다. 다른 운영 체제와는 호환성이 없으며, 이러한 한정성으로 인해 특정 환경에서는 사용할 수 없을 수 있습니다.

주요 기능

다양한 타입의 작업(예: 일회성 작업, 주기적인 작업)을 스케줄링하고 실행합니다.시스템 부팅 시나 사용자 로그인 시 등 특정 조건에서 자동으로 작업을 시작할 수 있습니다.필요에 따라 자동으로 데몬이나 에이전트를 재시작합니다.

  • 시스템 초기화 및 부팅 관리: launchd는 시스템 부팅 시 실행됩니다. 이를 통해 필요한 데몬 및 서비스가 자동으로 시작됩니다.
  • 유연한 작업 스케줄링: launchd를 사용하여 주기적 작업을 예약하고 실행할 수 있으며, 복잡한 스케줄링을 지원합니다.
  • 프로세스 관리: launchd는 시스템에서 실행되는 프로세스를 관리하며, 이를 통해 데몬 및 에이전트 프로세스를 시작, 중지 및 모니터링할 수 있습니다.
  • 소켓 및 포트 관리: launchd는 소켓 및 포트를 관리하여 네트워크 서비스와의 통신을 지원합니다.
  • 사용자 세션 관리: 사용자 세션과 관련된 작업을 처리하며, 사용자 로그인 및 로그아웃 시 이벤트를 캡처할 수 있습니다.
윈도우 11에 설치된 Figma 한글 마지막 글자 중복 입력 증상 해결 방법

launchd 구성 파일

launchd의 동작은 XML 형식의 구성 파일에 의해 정의됩니다. 이러한 구성 파일들은 주로 .plist 확장자를 가지며, Property List라는 이름에서 유래했습니다. 이 launchd 구성 파일을 통해 macOS에서 어떤 작업이 언제, 어떻게 수행될지 제어하고 관리할 수 있습니다.

구성 파일의 위치

구성 파일은 일반적으로 다음 세 가지 디렉터리 중 하나에 위치합니다.

  • /Library/LaunchDaemons/: 시스템 레벨에서 실행되는 서비스를 위한 구성 파일이 저장되는 위치입니다. 이 디렉터리에 있는 항목들은 컴퓨터가 시작될 때 자동으로 로드되며, 모든 사용자가 공유합니다.
  • /Library/LaunchAgents/~/Library/LaunchAgents/: 사용자 레벨에서 실행되는 서비스를 위한 구성 파일이 저장되는 위치입니다. 이들 항목은 각각 시스템 로그인 시와 사용자 로그인 시에 로드됩니다.

각 launchd 구성 파일은 다음과 같은 중요한 정보를 포함하고 있습니다.

  • Label: 각 작업을 고유하게 식별하는 이름입니다.
  • ProgramArguments: 실행할 프로그램과 그 프로그램에 전달할 인수 목록입니다.
  • RunAtLoad: 작업이 로드 될 때 즉시 실행할 지 여부를 결정합니다.
  • StartInterval 또는 StartCalendarInterval: 작업을 얼마나 자주 혹은 언제 실행할 지 결정하는 스케줄링 정보입니다.
  • EnvironmentVariables: 작업을 실행할 때 설정해야 하는 환경 변수입니다.
macOS 맥북 상단 메뉴 아이콘 정리 앱 Hidden Bar 설치 및 사용 방법

구성 파일 작성법

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.mytask</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/myprogram</string>
        <string>--option</string>
        <string>argument</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

launchd의 구성 파일은 XML 형식으로 위와 같은 형태로 이루어지며, 특정 디렉토리에 위치합니다. 이 파일들은 시스템 작업 및 사용자 작업을 정의하고 구성하는 데 사용됩니다. 아래는 launchd 구성 파일의 기본 형태와 구문을 설명한 것입니다.

참고: launchd의 구성 파일은 XML 형식으로 작성됩니다. 하지만 이 XML 파일들은 .plist (Property List) 파일의 한 종류입니다. 따라서 .plist 파일은 launchd 구성 파일의 하위 개념이며, launchd는 이러한 .plist 파일을 사용하여 시스템 작업 및 작업 스케줄링을 정의하고 구성합니다. 자세한 내용은 plist 파일 문서를 참고하세요.

Label 엘리먼트

Label 엘리먼트는 작업의 고유한 식별자를 나타냅니다. 이 식별자는 작업을 고유하게 식별하는 데 사용되며, 작업의 이름 또는 레이블로 생각할 수 있습니다.

<key>Label</key>
<string>com.example.mytask</string>

ProgramArguments 엘리먼트

ProgramArguments 엘리먼트는 실행할 명령 또는 스크립트와 해당 옵션을 정의합니다. 이 부분에 작업이 실행될 실행 파일과 옵션을 설정합니다.

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/python</string>
    <string>/path/to/myscript.py</string>
</array>

RunAtLoad 엘리먼트

RunAtLoad 엘리먼트는 시스템 부팅 시 작업을 실행할 지 여부를 나타냅니다. true로 설정하면 시스템 부팅 시 자동으로 작업이 실행됩니다.

<key>RunAtLoad</key>
<true/>

StartCalendarInterval 엘리먼트

StartCalendarInterval 엘리먼트는 시간 기반 작업 스케줄을 정의합니다. 원하는 시간과 날짜를 설정하여 작업을 예약할 수 있습니다.

<key>StartCalendarInterval</key>
<dict>
    <key>Hour</key>
    <integer>4</integer>
    <key>Minute</key>
    <integer>30</integer>
</dict>

KeepAlive 엘리먼트

KeepAlive 엘리먼트는 작업이 중단되거나 실패할 경우 다시 실행할 지 여부를 설정합니다.

<key>KeepAlive</key>
<true/>

StandardOutPathStandardErrorPath 엘리먼트

StandardOutPathStandardErrorPath 엘리먼트는 작업의 표준 출력과 표준 에러 출력을 저장할 파일 경로를 정의합니다.

<key>StandardOutPath</key>
<string>/path/to/output.log</string>
<key>StandardErrorPath</key>
<string>/path/to/error.log</string>

이러한 엘리먼트들을 조합하여 launchd 구성 파일을 작성하면 작업을 정의하고 구성할 수 있습니다. 이러한 구성 파일을 사용하여 macOS 시스템에서 다양한 작업을 자동화하고 관리할 수 있습니다.

launchd에 등록

launchd는 macOS에서 시스템 레벨과 사용자 레벨의 서비스를 관리하는 데 사용되는 통합된 서비스 관리 프레임워크라는 것을 설명했습니다. 이 launchd에 등록하려면, .plist 파일을 작성하여 해당 파일을 적절한 디렉토리에 위치시켜야 합니다.

launchd가 관리하는 서비스는 앞서 안내한 세 가지 디렉토리 중 하나에 있는 .plist 파일들로부터 로드됩니다.

  • /Library/LaunchDaemons/: 이 디렉토리의 .plist파일들은 시스템 시작 시 로드되며, root 권한으로 실행됩니다.
  • /Library/LaunchAgents/: 이 디렉토리의 .plist파일들은 사용자 로그인 시 로드되며, 해당 사용자 권한으로 실행됩니다. 일반적으로 macOS의 사용 패턴 상 이 경로에 등록하는 것이 보편적입니다.
  • ~/Library/LaunchAgents/: 이 디렉토리의 .plist파일들은 특정 사용자 로그인 시 그 사용자의 권한으로 실행됩니다.

이러한 경로 중 하나에 적절하게 .plist 파일을 위치시킨 후, launchctl load <.plist file path> 명령을 통해 launchd에 해당 서비스를 등록할 수 있습니다. 예를 들어, /Library/LaunchDaemons/com.example.mydaemon.plist라는 plist 파일이 있다면, 다음과 같이 명령합니다:

sudo launchctl load /Library/LaunchDaemons/com.example.mydaemon.plist

위 명령을 통해 해당 plist가 정상적으로 등록되면 launchd가 그 설정대로 서비스를 해당 경로의 조건에 따라 자동으로 시작하거나 중지하는 등 관리하게 됩니다. launchctl 더 알아보기

Chrome 비밀번호가 정보 유출로 인해 노출된 것으로 확인됩니다 경고 해제

관련 글

댓글로 남기기 어려운 내용은 Contact Form 에서 개별적으로 문의 할 수 있습니다. 해당 글과 연관 된 내용은 Copy를 이용해 현재 페이지의 주소를 복사 후 문의 폼에 입력시 보다 정확한 답을 얻을 수 있습니다.

Leave a Comment