boostcamp-challenge

[7/25] 롤 서버로 알아보는 옵저버와 펍섭 디자인 패턴

blopz 2024. 7. 25. 12:07

롤을 구현해본다고 생각하자

야스오가 이동해서 "move" event가 발생하면,

 

다른 챔피언들의 컴퓨터에 "move" event를 보내서

야스오가 이동했다는것을 그 챔피언의 컴퓨터들이 알 수 있도록 해야한다.

 

그래야 컴퓨터에서 야스오의 위치를 제대로 동기화 할 수 있으니까.

 

image

 

그래서 이 "move" event에 관심있는 애들이 listener로써 등록을 해놨다가 실제 "move" event가 발생하면 관심이 있다고 해놨던 애들한테 "move" event를 보내게 된다.

 

이렇게 객체와 객체간 loose한 연결을 가지는 패턴을 Observer 디자인 패턴이라고 한다.

 

해당 방식은 단순히 보내는 사람과 받는 사람의 관계로 이루어져 있기에 중간자 없이 나타낼수 있다. (더 빠를것으로 예상된다)

 

image

 

객체가 많고 관계가 많아지면 무슨 인체연성진같이 복잡해진다.

 

다양한 객체끼리의 관계를 나타내면 객체가 스스로 여러번 Event를 push 해줘야하고,

 

동기도 지원하지 못하는 문제가 있다.

 

image

 

중간자를 두면 훨씬 깔끔해지는데 이를 Pub/Sub 디자인 패턴이라고 하는것 같다.

 

따라서 중간자를 두고 중간자가 pushEvent를 해주면 객체 자체는 한번만 Event를 보내도 되고,

 

중간자가 받아온 Event를 동기나 비동기식으로 처리해서 둘을 구현할수도 있게 된다.

 

다만 중간자가 사이에 끼어있기에 느려질것으로 예상된다.

 

https://velog.io/@dongjun187/Redux-Store%EC%9D%98-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4%EC%9D%80-pubsub%EA%B3%BC-observer

 

Redux Store의 디자인 패턴은? pub/sub과 observer

리덕스 스토어 자체의 상태 변화를 감지하기 위한 패턴으로는 발행/구독 패턴(Publish-Subscribe Pattern)을 따른다. 줄여서 펍섭패턴은 어떤 이벤트를 발생시키는 subject 객체와, 그 이벤트에 대한 알림

velog.io

 

동기와 비동기

image

왜 동기가 동기일까?

 

동기는 입력시 그 결과값이 동시에 발생한다. 입력한 자리에서 결과값을 받아올 수 있다.

 

비동기는 입력시 일단 eventQueue에 넣어놓고 다른 event를 처리하다가 결과값을 발생하면 받아오게된다. 입력한 자리에서 바로 처리하지 않아도, 그 대기시간동안 다른 요청에 대해 처리할 수 있다.

 

https://dev-coco.tistory.com/46

 

동기와 비동기의 개념과 차이

1. 동기(Synchronous: 동시에 일어나는) - 동기는 말 그대로 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어난다는 약속이다. 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서

dev-coco.tistory.com