위 게시물과 비슷한 맥락의 질문이라고 생각되는데요.
결국 구현하고자 하는 기능이 어떤 동작을 하는지를 생각하는 훈련을 하다 보면, 그 기능이 어느 계층에 위치해야 할지 결정하는 데 도움이 될 것이라고 생각합니다.
다음과 같은 질문을 던져볼 수 있을 것 같습니다.
타이머나 스레드를 사용해서 업데이트 해야 하는 게 모델의 상태인가? 혹은 UI의 상태인가?
얼핏 생각하기에 색상을 변경하는 것이니까 UI의 상태를 변경하는 것이라고 생각할 수 있지만, 더 깊이 생각해 보면 본질적으로 모델의 상태를 UI 계층에서 색상으로 반영하는 것이지, 모델과 무관하게 UI의 상태를 변경하는 것이라고 보기에는 어렵습니다.
즉, Model에 정상인지 여부를 판정하는 bool이나 열거형이 있고, 그 값에 따라 View의 색상이 변경되는 것이라고 볼 수 있겠죠.
그렇다면 주기적으로 갱신해야 하는 것은 View가 아닌 Model이고, 타이머나 스레드를 가져야 하는 건 그 Model의 값을 변경시킬 책임이 있는 곳에서 갖고 있는 게 적절하다는 생각이 들 수 있습니다.
이런 식의 훈련을 하다 보면 계층 관리에 도움이 될 것 같습니다.
사견을 덧붙이면, 제 생각에는 MVVM 말고 Service에 존재하는 게 맞지 않을까 생각합니다 ㅎㅎ
대략적으로 1) View에서 모니터링 시작
버튼을 클릭하면 2) ViewModel에서 MonitoringService.Start()
메서드를 호출하고, 3) Service에서 Model의 값을 변경하면, 4) Model이 값 변경을 ViewModel->View 순서로 통지하거나 ViewModel에서 Model의 값이 변경된 것을 감지해 View에 알리는 식의 흐름이 떠오르네요.
P.S. 스레드 등을 이용해 UI에 반영되는 Model/ViewModel의 값을 변경하는 경우, 값 갱신을 UI 스레드에 Invoke하는 처리가 필요할 수 있습니다.