-
Notifications
You must be signed in to change notification settings - Fork 0
[feat] 대기방 생성/삭제/업데이트/입장 로직 추가 #20
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
Conversation
(현재는 묘묘를 속여라/토선생의 미대입시란 이름 외 간단 명명)
[add] 유효하지 않은 채널 시 Exception 코드 추가 [add] 유효하지 않은 메시지 dto 형태 Exception 코드 추가
- Redis Pub/Sub 메시지 처리 entrypoint onMessage(topic, payload)로 구체화 - DTO 내 DTO로 인한 @Class 제거 처리 추가
- Redis Pub/Sub 메시지 수신 방식으로 DSL 기반 RedisInboundChannelAdapter로 전환 - 기존 RedisMessageListenerContainer, MessageListenerAdapter 기반 메시지 수신 코드 제거 - STOMP 메시지 직렬화를 위한 MappingJackson2MessageConverter 제거
- roomMessageFlow에서 errorHandlingAdvice 제거 및 기본 핸들러 구조로 환원 - RedisInboundAdapter의 topic 패턴 정비 및 채널별 Flow 구성 명확화
add: 테스트로 검증 안된 로직들(방 삭제, 업데이트, 입장) 주석 처리
modify : map의 key에 고유 prefix 부여
chore : 테스트 검증 안된 방 업데이트, 삭제, 입장 로직 주석처리
- 유효하지 않은 방 코드 경우 - 사용 가능한 방 코드가 없는 경우
Uralauah
left a comment
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.
전체적으로 잘 작성된 것 같습니다.
기존 서버와 합친다면 없애야할 코드들도 여럿 보이네요..
처음부터 합치고 시작할 걸 그랬습니다..
그리고 방 목록은 SSE로 전달하는거 아니었나요??
아 저번에 게임 완료 이전까지는 모두 소켓에서 관리하는 걸로 이야기가 된 줄 알았습니다. 그리고 이미 소켓 연결을 기반으로 유저 상태, 채팅 등을 처리하고 있으므로, 같은 연결을 통해 방 목록까지 처리하는 것이 리소스 측면에서도 효율적인 것 같습니담 |
음 그렇다면 좀 생각을 해봤는데 프론트에서 방 생성 요청을 보낼 때, 요청ID(UUID와 같은 식별용 ID)와 같이 보낸다면 |
좋은 아이디어입니다! 다음 구현에서 반영하여 pr 올리겠습니다. |
1. 사용자 인증 및 예외 처리 전
1.1 헤더
모든 로직에 다음과 같이 핸드쉐이킹 때 생성한 principal 객체로 유저 정보를 가져올 예정입니다.
1.2 예외 처리
예외 코드는 restFul 서버의 예외처리를 최대한 따라, 추후 합쳐질 때 로직 혼동이 없도록 구성하였습니다.
그 외 소켓의 예외 처리 로직은 다음과 같습니다.
2. 레디스 구조
2.1 레디스 수신 채널 (RedisIntegrationConfig.java)
현재는 비즈니스 로직에 따라 Redis 수신 채널을 도메인 단위(게임, 채팅, 대기방 등)로 분리하고 있으며, 공통적으로 하나의 스레드 풀(redisExecutor)을 사용하고 있습니다.
추후에는 테스트를 거쳐보고, 메시지 처리량이 높은 채널(ex. 게임, 채팅)에 대해 전용 스레드 풀을 부여하고, 상대적으로 부하가 적은 대기방 관련 CRUD 채널 등은 공통 스레드 풀을 사용하는 방식으로 스레드풀을 역할 및 트래픽 기반으로 분리해도 괜찮을 것 같습니다.
2.3. Redis Pub/Sub 기반 메시지 플로우 구성
📦 시스템 구성 흐름도 -> ( 현재 테스트 완료 된 핸들러만 표시 )
🔧 주요 구성 요소
RedisInboundChannelAdapterIntegrationFlowPubSubHandler추상 클래스RoomPubSubHandler,PersonalPubSubHandlerredisErrorFlow2.4 채널 구조
도메인 채널 구조는 다음과 같습니다.

에러 전용 채널은 ##1.2 를 참고해주세요.
3. 고유 방 번호 부여
3.1 기능 요약
3.2🔧 간단 흐름
4. 논의 사항
현재 방 생성 이후 로직은 다음 두 가지로 구성되어 있습니다:
이 구조는 메시지 내용은 동일하지만 두 번의 네트워크 전송이 발생하며, 특히 생성자 본인은 브로드캐스트만으로는 방 생성 여부를 명확히 확인할 수 없다는 점에서 1:1 응답이 필요합니다.
그럼 다음과 같은 질문이 생깁니다.
-> 이 방법으로 가게 되면, 프론트 측에서 방금 전달 받은 방 정보가 내가 만든 것인지 확인하는 로직이 필요할 것 같습니다.
다들 이에 대해 어떻게 생각하시나요? 의견 부탁드립니다.
