Server programming

04_03_Job Queue_Command 패턴

devRiripong 2023. 5. 5.
반응형

기존 코드 방식

직원이 바로 주방에 달려가가지고 요리까지 하기 시작

ClientSession이라는 애가 뭔가 요청을 하면은 그거를 우리가 이제 PacketHandler 쪽에서 어떤 함수(C_ChatHandler)를 하나 만들어가지고 거기서 직접적으로 뭔가 코드를 실행하고 있었죠. 이전 예에서는 GameRoom에 접근해 가지고 Broadcast하는 거를 이제 그대로 실행하고 있었는데, 그게 결국에는 주방에 들어가 가지고 직접 요청한 것을 만들어 준다는 비유를 할 수가 있다.

 

기존 코드 방식의 문제점

규모가 커진다고 하면, 여러 명의 손님들이 동시다발적으로 주문을 하기 시작을 하면은 주방은 워낙 작아가지고. 한 번에 한 명씩밖에 못 들어가 가지고 이제 요리를 하는 공간은 굉장히 한정적인데도 불구하고, 이런 식으로 직원들이 지금 따닥따닥 붙어가지고 주방이 비기만을 자기 차례가 오기만을 기다리고 있는 상태가 된 거다.

직원이 부족한가 보다 하고 이런 식으로 직원을 더 투자해 가지고 밀어넣고 있는 상황

break point를 잡아서 보니까, thread가 그냥 어마어마하게 늘어났다

주문을 받은 사람이 주방 까지 가가지고 요리를 하니까 이런 문제가 발생

 

해결책

커멘트 패턴으로 이거를 딱 끊어가지고 주문서를 만드는 역할과 나중에 주방장이 주문서를 받아가지고. 걔가 이제 여유가 되면은 나중에 음식을 만들기 시작하는 부분을 이렇게 분리

유일하게 있는 주방장이 주문서를 받은 순서대로 순차적으로 쭉 처리를 하게 되는 거고. 실제로 여기 주문을 받는 직원들 입장에서는 주문서만 만들고 주방장한테 건내준 다음에 다음 주문을 받으러 뿅 넘어가면 된다.

 

주요 장점

1. 주문과 처리 시점 분리: 주문 받은 후 처리를 나중에 할 수 있어 주문과 처리 시점이 분리됨

2. 주문 취소 및 변경 용이성: 주문이 처리되기 전에 주문을 취소하거나 변경할 수 있음

3. Undo 기능 구현 용이: 게임이나 편집기 등에서 undo 기능 구현 시 커맨드 패턴이 편리

 

코드에 적용

이 개념을 그대로 코드에 옮겨가지고 주문을 받은 사람이 굳이 모든 음식을 만드는 게 아니라, 이렇게 그냥 툭 던지고 나갈 수 있는 시스템을 이어서 만들어보도록 할거다.

반응형

댓글