개요
로컬 구성 관리자(LCM, Local Configuration Manager)는 모든 대상 노드에서 실행되며 MOF 구성을 실제로 파싱하고 적용하는 DSC의 엔진이다. 107장에서 Start-DscConfiguration으로 구성을 “밀어 넣었을” 때, 그 뒤에서 실제로 작업을 수행하는 것이 바로 이 LCM이다. Part 15(DSC)의 마지막 챕터로서, “DSC가 구성을 어떻게 적용하는가"뿐 아니라 “적용 후에도 그 상태를 계속 유지할 것인가"라는 지속성의 문제를 다룬다.
정신 모델은 “LCM은 각 노드에 상주하는 감독관이고, Settings 블록으로 그 감독관에게 ‘지시를 어떻게 받을지’(Push/Pull)와 ‘드리프트가 생기면 어떻게 할지’(ApplyOnly/ApplyAndMonitor/ApplyAndAutoCorrect)를 지시하는 것"이라는 것이다.
사용법
| |
종류
| Settings 속성 | 값 | 의미 |
|---|---|---|
RefreshMode | Disabled/Push(기본)/Pull | Push는 Start-DscConfiguration으로 수동 전달, Pull은 노드가 스스로 주기적으로 서버에서 구성을 가져옴 |
ConfigurationMode | ApplyOnly/ApplyAndMonitor(기본)/ApplyAndAutoCorrect | 적용 후 상태가 어긋나면(드리프트) 로그만 남길지, 스스로 다시 맞출지 |
ConfigurationModeFrequencyMins | 정수(기본 15) | ApplyAndMonitor/ApplyAndAutoCorrect에서 얼마나 자주 상태를 재확인할지 |
RefreshFrequencyMins | 정수(기본 30) | Pull 모드에서 서버로부터 새 구성을 얼마나 자주 확인할지 |
RebootNodeIfNeeded | $true/$false(기본) | 구성 적용에 재부팅이 필요하면 자동으로 재부팅할지 |
예시
| |
주의사항·함정
LCM 설정은 Start-DscConfiguration이 아니라 Set-DscLocalConfigurationManager로 적용한다: 107장의 일반 Configuration과 문법은 똑같아 보이지만, [DSCLocalConfigurationManager()] 특성이 붙은 메타 구성은 별도의 cmdlet으로 적용해야 한다. 이 둘을 혼동해 Start-DscConfiguration으로 LCM 설정을 적용하려 하면 오류가 난다.
ApplyOnly은 이름과 달리 “한 번만 적용하고 다시는 확인하지 않는다"는 뜻이 아니다: 정확히는, 최초 적용이 성공할 때까지는 재시도하지만 일단 성공적으로 적용된 이후에는 드리프트(상태 이탈)를 감시하지 않는다는 뜻이다. 지속적인 상태 유지가 필요하다면 ApplyAndMonitor나 ApplyAndAutoCorrect를 선택해야 한다.
ApplyAndAutoCorrect는 강력하지만 예기치 않은 변경을 계속 되돌릴 수 있다: 운영자가 긴급 상황에서 수동으로 임시 조치를 했는데, LCM이 ConfigurationModeFrequencyMins 주기마다 그 변경을 조용히 “정상"으로 되돌려 버릴 수 있다. 긴급 대응 중에는 LCM을 일시적으로 ApplyOnly나 Disabled로 전환하는 것도 고려해야 하는 이유다.
RefreshFrequencyMins와 ConfigurationModeFrequencyMins를 혼동하기 쉽다: 전자는 Pull 모드에서 “서버로부터 새 구성을 확인하는 주기"이고, 후자는 “로컬 상태의 드리프트를 재확인하는 주기"다. 원래 의도는 RefreshFrequencyMins를 ConfigurationModeFrequencyMins보다 길게 설정해, 구성 자체는 드물게 갱신하되 로컬 드리프트는 더 자주 감시하는 것이다 — 이 둘을 반대로 설정하면 의도한 감시 주기와 실제 동작이 어긋난다.
이식성: Puppet 에이전트의 --test/--noop 모드(변경 없이 드리프트만 보고)와 일반 적용 모드의 구분이 LCM의 ApplyAndMonitor/ApplyAndAutoCorrect 구분과 유사하다. Ansible은 기본적으로 지속적인 데몬 감시 없이 수동/예약 실행에 의존하는데(Ansible Tower/AWX 같은 별도 도구로 이를 보완), LCM처럼 각 노드에 상주하며 자율적으로 드리프트를 교정하는 에이전트 모델은 Puppet·Chef의 아키텍처에 더 가깝다.
![Featured image of post [PowerShell] 108. DSC 리소스와 로컬 구성 관리자(LCM)](/post/powershell/dsc-resource-lcm-powershell/wordcloud_hu_7bfa88d3de0aebf7.webp)
![[PowerShell] 106. DSC 개념과 아키텍처](/post/powershell/dsc-concept-architecture-powershell/wordcloud_hu_cac3a4999bb273a4.webp)
![[PowerShell] 107. DSC 구성(Configuration) 작성과 적용](/post/powershell/dsc-configuration-write-apply-powershell/wordcloud_hu_a3e68be2f0f53bee.webp)
![[PowerShell] 108. DSC 리소스와 로컬 구성 관리자(LCM)](/post/powershell/dsc-resource-lcm-powershell/wordcloud_hu_3a56f906dc3427ae.webp)
![[PowerShell] 109. Test-Connection — ping 대응](/post/powershell/test-connection-ping-powershell/wordcloud_hu_5dcd5e1b70095610.webp)
![[PowerShell] 110. Test-NetConnection — 포트·경로 진단](/post/powershell/test-netconnection-port-diagnostic-powershell/wordcloud_hu_4ef96a3f0e037e64.webp)
![[PowerShell] 00. 과정 개요와 커리큘럼](/post/powershell/getting-started-powershell/wordcloud_hu_15979a96cd2a594f.webp)
![[PowerShell] 100. Get-Credential과 PSCredential 객체](/post/powershell/get-credential-pscredential-object-powershell/wordcloud_hu_e8db052a57f9c242.webp)
![[PowerShell] 101. Get-Acl/Set-Acl — 접근 제어 목록](/post/powershell/get-set-acl-access-control-powershell/wordcloud_hu_ff2983faad053cab.webp)