기존 코드 방식
직원이 바로 주방에 달려가가지고 요리까지 하기 시작
ClientSession이라는 애가 뭔가 요청을 하면은 그거를 우리가 이제 PacketHandler 쪽에서 어떤 함수(C_ChatHandler)를 하나 만들어가지고 거기서 직접적으로 뭔가 코드를 실행하고 있었죠. 이전 예에서는 GameRoom에 접근해 가지고 Broadcast하는 거를 이제 그대로 실행하고 있었는데, 그게 결국에는 주방에 들어가 가지고 직접 요청한 것을 만들어 준다는 비유를 할 수가 있다.
기존 코드 방식의 문제점
규모가 커진다고 하면, 여러 명의 손님들이 동시다발적으로 주문을 하기 시작을 하면은 주방은 워낙 작아가지고. 한 번에 한 명씩밖에 못 들어가 가지고 이제 요리를 하는 공간은 굉장히 한정적인데도 불구하고, 이런 식으로 직원들이 지금 따닥따닥 붙어가지고 주방이 비기만을 자기 차례가 오기만을 기다리고 있는 상태가 된 거다.
직원이 부족한가 보다 하고 이런 식으로 직원을 더 투자해 가지고 밀어넣고 있는 상황
break point를 잡아서 보니까, thread가 그냥 어마어마하게 늘어났다
주문을 받은 사람이 주방 까지 가가지고 요리를 하니까 이런 문제가 발생
해결책
커멘트 패턴으로 이거를 딱 끊어가지고 주문서를 만드는 역할과 나중에 주방장이 주문서를 받아가지고. 걔가 이제 여유가 되면은 나중에 음식을 만들기 시작하는 부분을 이렇게 분리
유일하게 있는 주방장이 주문서를 받은 순서대로 순차적으로 쭉 처리를 하게 되는 거고. 실제로 여기 주문을 받는 직원들 입장에서는 주문서만 만들고 주방장한테 건내준 다음에 다음 주문을 받으러 뿅 넘어가면 된다.
주요 장점
1. 주문과 처리 시점 분리: 주문 받은 후 처리를 나중에 할 수 있어 주문과 처리 시점이 분리됨
2. 주문 취소 및 변경 용이성: 주문이 처리되기 전에 주문을 취소하거나 변경할 수 있음
3. Undo 기능 구현 용이: 게임이나 편집기 등에서 undo 기능 구현 시 커맨드 패턴이 편리
코드에 적용
이 개념을 그대로 코드에 옮겨가지고 주문을 받은 사람이 굳이 모든 음식을 만드는 게 아니라, 이렇게 그냥 툭 던지고 나갈 수 있는 시스템을 이어서 만들어보도록 할거다.
'Server programming' 카테고리의 다른 글
04_05_Job Queue_JobQuene#2 (0) | 2023.05.16 |
---|---|
04_04_JobQueue_JobQuene#1 (0) | 2023.05.07 |
04_02_Job Queue_채팅 테스트 #2_클라 (0) | 2023.05.05 |
04_01_Job Queue_채팅 테스트 #1_서버 (0) | 2023.04.25 |
03_11_패킷 직렬화_PacketGenerator #6_PacketManager 코드 생성을 자동화, 패킷 분리 (0) | 2023.04.20 |
댓글