개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL
💡 연습문제 20번 : 4 가지 전략 중 상황에 맞는 것이 각각 무엇일까? 전략을 조합해야 할 수도 있다.
[ 유한 상태 기계, 감시자 패턴, Pub-Sub, 반응형 프로그래밍과 스트림]
A. 5분 동안 '네트워크 인터페이스가 꺼짐' 이벤트를 세 번 받으면 운영 직원에게 알리기
B. 일몰 후 층계 밑에서 동작이 감지된 다음 층계 위에서 동작이 감지되면 위층의 전등을 켜라.
C. 다양한 보고 시스템에 주문이 완료 되었음을 알리고 싶다.
D. 고객에게 자동차 대출을 집행할 수 있는지 평가하기 위해 애플리케이션이 3 가지 다른 서비스에 요청을 보내고 응답을 기다려야만 한다.
A) A는 전형적인 감시자 패턴이다. 말 그대로 '네트워크 인터페이스'를 꾸준히 감시하다가 일정 횟수가 넘으면 곧바로 alert을 날리는 상황이기 때문이다.
감시 대상 : 네트워크 인터페이스 OFF 발생 여부
감시자 : 5분 동안 세 번 발생하는지 이벤트 감시
간단히 함수 참조를 리스트에 추가하고 이벤트 제한치를 넘을 시 호출하는 방식으로 구현한다.
상호 작용이 일어났다는 것을 콜백으로 알려주는 방식이다.
B) 약간 헷갈리는데 FSM(유한 상태 기계)가 맞는 전략인 것 같다.
왜 그렇게 생각했냐면 일단 초기 상태에서 대기를 하다가 일몰이라는 이벤트가 발생하면 그 때 부터 다음 상태를 받을 준비를 한다.
↓-----⎡ (위 층계 감지) ---> '위층 전등 ON'
(초기 상태) --- 일몰 ---> (아래 층계 감지 중...) --⎜ ↑
⎣ (아래 층계 감지)
그래프가 좀 이상하긴한데... 암튼 감지 상태에 따라 처리할 방법이 달라지게 된다.
C) 주문이 완료된 것을 여러 시스템에 알려야 한다.
로보틱스에서 주로 쓰는 ROS(Robot Operating System) 처럼 Pub-Sub 구조를 택해야 한다.
모든 보고 시스템이 주문이 되었는지 안되었는지를 보고 있기도 힘든 노릇이고(감시자), 주문 완료를 상태로 알리는 것은 좋지만(FSM) 이걸 몇개가 되는지도 모르는 보고 시스템에 다 알리기도 어려운 노릇이다.
따라서 가장 효율적인 방법은 바로 주문 완료 상태를 Publish 하는 것이다. 이 주문 완료 상태가 필요한 node라면 알아서 subscribe하여 이벤트를 처리하면 될 것이다.
D) 마지막 항목이라 왠지 전략을 조합해야만 할 것 같다.
일단 합리적 의심으로 스트림이 분명하다. 왜냐면 대출 판정 시스템이 원격에 있는 사용자 정보에 대한 요청을 해야 하기 때문이다. 총 3가지 요청을 병렬적으로 받아서 처리하여 엮어 결과를 알린다.
ROS 공식 튜토리얼
A) FSM으로 구현 가능하기도 한데... 5분이라는 시간 때문에 까다롭다, 따라서 이벤트 스트림을 사용해야 한다. size와 offset 파라미터를 받는 buffer라는 반응형 함수로 이벤트 마다 최근 이벤트 3개를 묶어서 받는다.
B) FSM과 Pub-Sub을 조합하여 구현한다. 각각 상태 기계에 Pub-Sub을 이용하여 이벤트를 퍼뜨리고 이를 상태 기계가 어떻게 할지 판단한다.
C) Pub-Sub을 이용한다. 스트림을 쓸 수도 있지만 보고 시스템도 스트림 기반이어야 한다.
D) 사용자 데이터를 받아 오기 위한 스트림을 이용한다.
..ㅋㅋㅋ 50% 맞고 50% 틀렸다. 다시 한 번 정독해봐야 할 것 같다.
오늘 읽은 다른사람의 TIL
pksl님의 TIL (url 링크)
오옷.. 가끔 slack 채널에서 유익한 도움을 주시는 pksl님 연습문제와 같은 문제를 풀게되어서 읽어보았다.
역시 나와는 차원이 다른 논리를 갖고 계시는 것 같다... 나도 저렇게 성장 해야겠다는 생각이 든다.