-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
멀티게임 websocket API구현 #53
Conversation
…into feat/taggame
Test Results20 tests 20 ✅ 11s ⏱️ Results for commit 4b5f1f7. ♻️ This comment has been updated with latest results. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
쭉 코드를 보는데 사실 전체적으로 구조 자체를 이해를 못한거 같습니다. 즉, 어떤 구조로 상속 받아서 핸들러들이 동작하는지 이해하기 어려운데 간단한 다이어그램으로 보여주실 수 있을까요?
public class CustomHandlerMapping { | ||
|
||
private static final Map<TagGameStatus, CustomHandler> map=new HashMap<>(); | ||
private static final Map<TagGameStatus, Class<? extends CustomHandler>> map=new HashMap<>(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 해주어야하는 이유가 무엇인가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 해주어야하는 이유가 무엇인가요?
- 기존에는 스프링 컨텍스트 없이 static 영역에 있는 handler 객체를 사용했다면 스프링 컨텍스트에 있는 빈을 가져오기 위해서 입니다.
- 다만 모든 handler는 customhandler타입으로 사용해야한다는 점과 스프링 컨텍스트에서는 해당 구현타입을 빈으로 등록하기 위해 제네릭 ? 와일드 카드를 사용했습니다.
- 정리하면 CustomHandlerMapping에서는 CustomHandler으로 존재하고 실제로 등록된 빈은 구현타입으로 존재해야 해야해서 그렇습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그럼 static이 아닌 스프링 컨텍스트에서 관리해야하는 이유는 무엇인가요?
handlerMapping 시 의존성 주입 문제가 있었습니다.
이슈에는 위와 같이 나와있는데 어떤 상황에서 의존성 주입이 필요했었나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- matchQueue와 같이 내부 자료구조를 사용하는 경우 무방하지만, repository, service와 같이 빈 객체를 사용해야하는 경우 static으로 접근 불가합니다.
- 지금 코드로 반영되어 있지않지만 handler들은 service layer를 거쳐야한다고 생각해서 나중을 생각해보면 의존성주입이 필요하다고 생각합니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
결국 service layer를 위해 모든 것들을 component로 등록한 것이군요. 이해하였습니다.
|
||
private final ApplicationContext applicationContext; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이건 어떤건가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 스프링컨텍스트의 빈을 가져오기 위함입니다.
추가로 궁금한게 술래를 정하는 기준은 무엇일까요? 코드를 보는데 그 부분은 찾지 못했습니다.... |
위의 그림의 형태를 가지고 public class TagGameRequest<T> {
private TagGameStatus tagGameStatus;
private T request;
} 각 request 등록된 status마다 request의 class가 달라진다. 라고 이해하면 될까요? |
이전 매칭 PR에 포함되어 있습니다 #41 /**
* 술래를 정한다
* @param players
* @return
*/
private Map.Entry<String, WebSocketSession> selectTagger(List<Map.Entry<String, WebSocketSession>> players) {
int randomIndex = random.nextInt(players.size()); // 4는 상한값으로, 0~3 사이의 값이 생성됩니다.
return players.get(randomIndex);
} |
전체적인 로직들은 다 이해가 된거 같습니다. 괜찮은 방법이라 생각해서 한 번 다른 로직들과 통합해보면 좋을거 같은데 현재 taggame에 있는 custom을 전역으로 옮겨주실 수 있나요? 머지 후 저도 제꺼에 한 번 반영해보고 싶습니다. |
API 명세내용이 달라질텐데 클라이언트에게 허락을 구해야하지 않을까요? |
전역으로 옮긴다면 이번 PR이 아닌 다른 PR로 분리하겠습니다 |
클라에서의 반영은 진짜 몇분 걸리지 않는다라고 판단하여 전역으로 옮겨놓고 확장성을 열어둘려고 했는데 그러면 다음 회의에 한 번 논의를 해봅시다. |
/쿠타버스 배포 |
🌎 배포하였습니다. |
✏️ 작업 개요
⛳ 작업 분류
🔨 작업 상세 내용
💡 생각해볼 문제