홈 어시스턴트의 런타임 상태와 영구 상태: 재시작 후에도 무엇이 유지되어야 할까요?

에바 왕기술 작가 그리고 이자 ZimaSpace의 상주 장인입니다. 평생을 기술에 열정을 가진 사람으로서 홈랩과 오픈소스 소프트웨어에 열정을 가지고 있으며,복잡한 기술 개념을 쉽게 이해할 수 있는 실습 가이드로 번역하는 데 전문성을 가지고 있습니다.에바는 셀프 호스팅이 어렵지 않고 재미있어야 한다고 믿습니다. 그녀의 튜토리얼을 통해 커뮤니티가 하드웨어 설정의 신비를 풀도록돕고 있습니다. 첫 NAS 구축부터 Docker 컨테이너 마스터링까지.

Home Assistant의 “상태”는 하나의 개념이 아닙니다. 실행 중인 프로세스에는 엔터티가 현재 보고하는 내용을 나타내는 메모리상의 상태 머신이 있으며, 영구 구성과 레지스트리는 재시작 후에도 무엇이 존재해야 하는지를 식별합니다. Recorder는 과거 관측값을 보관하고, 일부 엔터티 플랫폼은 나중에 값을 복원할 수 있도록 특정 값을 저장할 수 있습니다.

따라서 안정적인 배포에서는 메모리의 모든 일시적 객체를 직렬화하려고 하지 않습니다. 대신 지속 가능한 진실의 원천을 보존하고, 새 프로세스가 통합 구성 요소, 레지스트리, 복원된 값, 최신 장치 보고를 바탕으로 실행 중 상태를 다시 구축하도록 합니다.

상태 머신은 현재 세계를 보여 주는 실행 시점의 뷰입니다

Home Assistant Core는 상태 머신에 현재 엔터티 상태를 유지하고, 상태가 변경되면 이벤트를 발생시킵니다. 이 현재 뷰는 실행 중인 Core 프로세스에 속합니다.

Core 아키텍처 문서에서는 상태 머신을 현재 상태를 추적하고 state_changed 이벤트를 발생시키는 구성 요소로 설명합니다. 이벤트 버스, 서비스 레지스트리, 타이머는 이를 둘러싼 실행 시점 구성 요소입니다.

재시작 후에는 상태 머신이 다시 채워집니다. 따라서 장치가 아직 다시 연결되지 않았다면 이전 관측값이 Recorder에 안전하게 저장되어 있더라도 해당 장치는 사용할 수 없는 상태가 될 수 있습니다.

엔터티 레지스트리는 실시간 장치 정보가 아니라 식별 정보를 영구 저장합니다

Home Assistant는 통합 구성 요소가 다시 연결될 때마다 사용자 지정 설정, 엔터티 ID, 이름, 영역 및 기타 설정이 사라지지 않도록 재시작 후에도 동일한 엔터티를 식별해야 합니다.

엔터티 레지스트리가 존재하는 이유는 Home Assistant가 사용자 지정 설정을 유지하고 알려진 엔터티를 추적하려면 재시작 후에도 지속 가능한 엔터티 식별 정보가 필요하기 때문입니다. 레지스트리 항목이 존재한다고 해서 부팅 후 현재 센서 판독값까지 자동으로 최신 상태가 되는 것은 아닙니다.

식별 정보와 실시간 값을 별도의 기록으로 생각해 보세요. 레지스트리는 “이 엔터티는 무엇인가?”에 답하고, 통합 구성 요소는 “지금 무엇을 보고하고 있는가?”에 답합니다.

일부 엔터티 값은 복원을 위해 의도적으로 저장됩니다

특정 엔터티, 특히 헬퍼와 상태를 유지하는 소프트웨어 엔터티는 새로운 외부 관측값이 존재하기 전에 이전 값을 복원하면 유용합니다. Home Assistant에는 이러한 엔터티를 위한 전용 영구 상태 체크포인트가 있습니다.

현재 영구 상태 저장 작업 설명에 따르면 일부 엔터티는 재시작 후 마지막 값을 복원하며, Home Assistant는 일반적으로 시작 시, 15분마다, 종료 시 해당 값을 체크포인트로 저장합니다.

이는 선택적인 영구 저장입니다. 모든 물리적 장치 상태를 영원히 권위 있는 값으로 취급하는 것과 혼동해서는 안 됩니다. 복원된 값은 시작 중에 유용할 수 있지만, 통합 구성 요소는 최신 장치 정보를 사용할 수 있게 되면 그 정보에 맞춰 상태를 수렴시켜야 합니다.

-15% OFF

Recorder 기록은 실행 중인 프로세스가 아니라 관측값을 영구 저장합니다

Recorder는 기록 화면, 분석, 통계를 위해 상태 변경과 이벤트를 저장합니다. 실행 시점의 상태 머신이 매번 새로 생성되는 동안에도 해당 데이터베이스는 여러 차례의 Home Assistant 재시작을 견딜 수 있습니다.

“오후 3시의 온도는 얼마였는가?”에 답하는 기록 조회는 과거 데이터의 영구 저장에 해당합니다. 반면 “지금 문이 열려 있는가?”를 묻는 실시간 자동화는 현재 실행 상태와 통합 구성 요소 경로에 의존합니다.

이 차이를 이해하면 Recorder를 삭제하거나 손상시켰을 때 자동화, 사용자, 통합 구성 요소 구성이 반드시 지워지는 것은 아니지만 기록은 사라질 수 있는 이유를 알 수 있습니다. 반대로 구성 디렉터리를 잃으면 오래된 기록 데이터베이스가 남아 있더라도 식별 정보와 설정이 손상될 수 있습니다.

배포 환경은 이러한 계층을 다시 만드는 파일을 영구 저장해야 합니다

컨테이너화된 Home Assistant에는 또 하나의 경계가 추가됩니다. 실행 이미지가 교체될 수 있으므로 구성 마운트와 외부 종속 요소는 컨테이너 외부에 보존되어야 합니다. 마운트에는 Home Assistant 구성, 레지스트리 저장소, 시크릿 참조, 그리고 Recorder가 로컬에서 실행되는 경우 데이터베이스가 보존되어야 합니다.

Home Assistant 영구 데이터 역할에 관한 ZimaSpace 글에서는 복구 범위를 다룹니다. 실행 시점 데이터와 영구 데이터의 차이를 이해하면 이러한 파일이 중요한 이유를 알 수 있습니다. 이 파일들이 다음 프로세스가 가정 환경을 다시 구성하는 데 필요한 입력이기 때문입니다.

상태의 역할에 맞는 영구 저장 계층을 사용하세요

상태 역할 저장 위치 재시작 후 동작
현재 엔터티 상태 실행 중인 상태 머신 통합 구성 요소 및 복원 기능을 통해 다시 구성됨
엔터티 식별 정보 및 사용자 지정 영구 레지스트리/구성 다시 로드됨
선택적으로 복원 가능한 값 영구 상태 체크포인트 새 값으로 갱신될 때까지 복원됨
기록/통계 Recorder 데이터베이스 과거 데이터로 유지됨
통합 구성 요소 연결 및 실행 객체 프로세스 메모리 다시 생성되고 재연결됨
컨테이너 이미지/실행 환경 교체 가능한 배포 계층 영구 데이터 주변에서 다시 생성 가능

안전한 원칙은 Home Assistant가 지속 가능한 것으로 의도한 식별 정보, 구성, 복구 데이터, 상태를 영구 저장하는 것입니다. 일시적인 실행 상태는 다시 구성되도록 두세요. 이렇게 하면 메모리의 모든 값이 변경 없이 유지되어야 한다고 가정하는 것보다 더 명확한 재시작 모델을 만들 수 있습니다.

기술 및 AI 허브

더 읽어보기

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.