어트리뷰트와 커맨드와 이벤트
데이터 모델
어트리뷰트와 커맨드와 이벤트
데이터 모델 > 데이터 모델
- 셋이 담는 시제를 가른다
- 상호작용 모델 네 가지를 든다
지금과 시킴과 지나간 일
클러스터 안에 담기는 것이 셋이고 담는 시제가 다릅니다.
어트리뷰트는 지금입니다. 화구가 켜져 있다, 화력이 6단이다, 오븐 온도가 180도다 같은 현재 상태이지요. 커맨드(command)는 시킴입니다. 문을 잠가라, 세척을 시작해라처럼 무엇을 하라고 보내는 말입니다. 이벤트(event)는 지나간 일입니다. 상태가 바뀐 기록이 쌓이는 자리이고, 하나하나에 늘어나기만 하는 번호와 시각과 중요도가 붙습니다.
그것을 어떻게 주고받나
셋이 있다고 끝이 아닙니다. 그것을 어떻게 주고받을지가 상호작용 모델이고 네 가지가 정해져 있습니다.
읽기(Read)는 지금 값을 한 번 가져옵니다. 쓰기(Write)는 값을 바꿉니다. 부르기(Invoke)는 커맨드를 실행합니다. 그리고 구독(Subscribe)이 중요합니다 — 값이 바뀔 때 기기가 알아서 알려 주게 하는 것입니다.
구독이 왜 중요한지는 없다고 생각해 보면 압니다. 없으면 컨트롤러가 계속 물어봐야 하고, 그러면 배터리 기기가 잠들 수 없습니다. 구독에는 얼마나 자주 알릴지의 하한과 상한을 정하는 설정이 있어서, 「너무 자주 오지도 너무 뜸하지도 않게」를 맞춥니다.
지금만 보면 놓치는 것
이벤트가 왜 따로 있어야 하는지는 현재 상태만 볼 때 무엇을 못 보는지 생각하면 드러납니다. 도어록의 어트리뷰트를 읽으면 지금 잠겨 있다는 것만 압니다. 그사이에 열렸다 닫혔는지는 알 수 없습니다.
컨트롤러가 잠깐 꺼져 있었거나 망이 끊겼다가 돌아온 경우가 특히 그렇습니다. 이벤트에 번호가 붙어 있으므로 돌아온 뒤에 「몇 번까지 받았다」를 대조해 빠진 것을 받아 갈 수 있습니다.
어트리뷰트만 있는 기기는 자기가 지금 어떤지는 말해도 무슨 일이 있었는지는 말하지 못합니다.