Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
실용주의 프로그래머 : 연습문제 풀어보기
#pragmatic
2년 전
678

오늘 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가지 요청을 병렬적으로 받아서 처리하여 엮어 결과를 알린다.

✅ 참고 링크



💡 책에 있는 해답

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님 연습문제와 같은 문제를 풀게되어서 읽어보았다.

역시 나와는 차원이 다른 논리를 갖고 계시는 것 같다... 나도 저렇게 성장 해야겠다는 생각이 든다.