커맨드 패턴의 이해
372
작성한 질문수 59
커맨드 패턴을 정확히 이해하고 싶은 학생입니다. 강의를 정말 많이 돌려보고 구글링도 해본 결과 저는 다음과 같이 커맨드 패턴을 이해했고 적용해봤습니다.
기존의 방식은 클라이언트에서 요청이 들어오면 서버의 쓰레드들이 일을 처리하기 위해 쓰레드들이 락에 의한 대기를 함으로써 대기 시간이 길어져 메모리 낭비가 됐지만
커맨드 패턴을 활용하여 클라이언트의 요청을 캡슐화하여 서버에 전해줌으로써 기존에 락에 의해 대기만 하던 쓰레드들이 대기하는 시간이 줄어들게 됩니다.
단점으로는 2가지가 있습니다.
플레이어의 죽음과 종료가 거의 동시에 일어났다고 가정해보겠습니다. 종료가 됨으로써 플레이어의 room이 null로 밀렸는데 잡큐에서 실행된 죽음 함수에서 플레이어의 room에 관한 정보로 접근하려 하니 null 크래쉬가 나게됩니다. 따라서 null 체크를 꼼꼼히 해줘야 합니다.
또 다른 문제는 로직 동작 순서의 불명확함입니다..
코드의 순서가
1번. 잡큐로 밀어넣은 함수 1
2번. 잡큐와 상관 없는 코드
3번. 잡큐로 밀어넣은 함수 2
이런 상태에서 로직이 존재한다고 가정할 때
큐에 넣은 일이 바로 실행되는 것이 아니기 때문에 1번과 3번이 밀려 2번이 먼저 실행되는 일이 발생될 수도 있습니다. 따라서 이런 문제를 해결하기 위해선 잡큐에 넣는 커맨드 패턴 방식이 아닌 기존의 락으로 잡아가던 방식으로 함수를 사용하는 것이 좋습니다.
이 정도로 정리해봤는데 혹시 다른 점 있을까요? 커맨드 패턴 부분의 이해가 정말 안됐어서 질문 드립니다!
답변 1
1
[제가 이해한 것이 맞나요?] 와 같은 질문을 하는 분을이 최근 들어 너무 많아진 것 같네요.
늘 말씀드리지만 이런 질문은 할 필요가 없습니다.
스스로 생각한 바를 정리해서 이해하고 있다가
그게 잘못 되었으면 언젠가 모순이 발생하여 크게 깨우침을 얻기 때문입니다.
커맨드 패턴 또한 어려운 개념이 아니라서
너무 많은 생각을 할 필요 없습니다.
그냥 어떠한 행동을 캡슐화해서 보관했다가, 나중에 사용할 수 있는 것이고
대표적으로 키보드 매핑이나 서버 Job 등에서 응용이 가능한 것이죠.
MessagePack
0
87
1
본인 플레이어 이동 관련 질문
0
53
1
Part7 Part9 질문이 있습니다.
0
77
1
.
0
117
1
.
0
108
2
게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제
0
94
1
타일 팔레트 깔았는데도 안돼요
0
124
2
2D로 그냥 만들어도 되나요?
0
86
2
지난 강의와 이어지는게 맞을까요?
0
86
2
순환참조 문제로 인해 발생하는 문제는 없을까요?
0
162
2
유니티 클라와 C++서버연동
0
278
2
멀티플레이 테스트 환경 관련 질문입니다
0
208
3
강의 후반부에 순서 동기화를 위해 잡큐를 사용 안 한 부분 질문입니다!
0
150
2
코드 관련한 몇 가지 질문입니다!
0
153
2
3d 프로젝트 이동 동기화 관련
0
325
4
파트 7 스트레스 테스트 질문 드립니다.
1
190
2
맵 이동 방식
0
134
0
맵 이동 관련해서 질문드립니다.
0
91
1
안녕하세요 도저히 알 수 없는 오류가 나와서 질문드려요,,
0
205
2
안녕하세요. 일전에 질문 드린 포폴 준비 관련 질문의 추가 질문입니다!
0
161
1
[팁] 2024년 기준 버전 이슈?
0
458
1
SendBuffer.cs 삭제 후 대체 되는 부분의 장단점?
1
204
1
지금 강의의 유니티 클라를 IOCP 서버와 연동하는 것
0
337
2
PushAfter 사용 질문
0
193
1





