인프런 커뮤니티 질문&답변

IJILKJ님의 프로필 이미지
IJILKJ

작성한 질문수

탄탄한 백엔드 NestJS, 기초부터 심화까지

유니캐스팅 (Unicasting) : emit & on

소켓 연결관련 질문입니다.

작성

·

1.5K

1

강의에서 socket.id는 계속 유지되다가 연결이 끊기거나 새로고침되면 바뀐다고 나오는데요
즉, 새로고침하면 소켓연결이 끊긴다는 뜻인데 이걸 막을 방법이 있나요?
예를 들어서 제가 웹 상에서 멀티플레이가 가능한 카드게임을 구현한다고 하면 게임 플레이 도중 사용자가 실수로 새로고침을 누르면 끊겨버릴텐데 이런 상황에서는 어떤식으로 처리를 하나요?
또 질문이 하나 있는데 강의와는 조금 벗어난 질문이긴한데..
소켓연결에 더해서 redis까지 이용해서 만들어보려고 하는데
구글에 nestjs redis 이렇게 검색하면 나오는 공식문서가 Microservice 어쩌고 하면서 redis랑 같이 나오더라구요.
제가 구현하고 싶은 기능은 웹상에서 방을 만들고,
사용자들이 해당 방에 들어가면 사용자들의 정보를 redis에 담고
redis pub/sub과 소켓을 이용하여 같은 방안에 사용자들끼리 통신하는 그런걸 만들어보고 싶은데
이 경우에 공식문서에 나와있는 Microservice.. 를 쓰면 되는게 맞는건지 잘 모르겠어서 질문드립니다.

답변 1

0

윤상석님의 프로필 이미지
윤상석
지식공유자

새로고침을 하는 순간 세션이 닫히기 때문에 소켓 연결은 끊깁니다.

막을 방법은 클라이언트 단에서 새로고침 시에 경고(alert)창을 띄어주거나 방지하는 방법이 있습니다.

구글에 "브라우저 새로고침 방지 javascript 코드"를 검색하시면 f5 버튼 막기 등 다양한 경로의 새로고침을 클라이언트 단에서 막을 수 있는 코드가 있습니다. 참고하시면 좋을 것 같습니다. :)

이 코드를 <script>code</script>로 삽입해 주시면 됩니다.

redis 관련 프로젝트는 socket.io-redis-adapter 패키지 추천드립니다.

 https://github.com/socketio/socket.io-redis-adapter

관련해서 데모를 찾아 보았는데요. https://github.com/phatvo21/nest-chat-realtime

목적에 맞는 코드와 유사할 것 같습니다!

IJILKJ님의 프로필 이미지
IJILKJ
질문자

우선 이렇게 예시 코드까지 갖고와주셔서.. 정말 감사합니다.

그런데 제가 생각한건 그냥 mysql이나 mongodb를 nestjs에 연결하듯 

평범한 redis db를 추가로 연결한다음에 연결된 redis와 websocket으로 뭔가를 해보려했던 것인데 socket.io-redis-adapter는 뭔가 더 고차원적인거같던데.. 이게 어떤 기능들을 하는건지 알 수 있을가요?

제가 다시 구글링을 해보니까 nestjs-redis가 있고 https://www.npmjs.com/package/nestjs-redis

redis-cache가 있던데 둘중에 어떤걸 써야되는지를 모르겠네요;

윤상석님의 프로필 이미지
윤상석
지식공유자

음 그렇다면 redis-cache도 가능하긴 하지만 아무래도 더 저수준 인터페이스라 바로 간단하게 사용하실거면 nestjs-redis를 사용하는 것이 좋을 것 같습니다. 제가 nestjs-redis를 깊게 사용해보진 않아서 pub/sub 인터페이스가 좋은지는 잘 모르겠네요 ㅠㅠ 처음부터 자유롭게 수동으로 개발하실 생각이시라면 redis-cache도 괜찮은 것 같습니다!

IJILKJ님의 프로필 이미지
IJILKJ

작성한 질문수

질문하기