Skip to content
This repository has been archived by the owner on Mar 18, 2020. It is now read-only.

Latest commit

 

History

History
15 lines (10 loc) · 2.14 KB

2019-10-10-TIL.md

File metadata and controls

15 lines (10 loc) · 2.14 KB
layout title tags
post
좀비 채팅방 작업
TIL

DB는 만능이 아니다

접속한 유저(정확히는 트위터로 로그인을 한 유저)의 id와 말풍선 색깔을 기억해뒀다가 만약 동일한 id로 또 접속하게 될 경우 저장해둔 말풍선 색깔을 클라이언트 측으로 보내는 것은 잘 처리가 되었다. 이제 PC에서 접속한 유저가 모바일로 또 접속했을 때 말풍선 색상이 동일하게 보인다. 하지만 새로운 문제가 생겼다. 동일한 유저가 PC, 모바일 등 여러 개의 기기에서 접속했을 경우 기기별로 소켓이 형성되기 때문에 자신이 보낸 메세지가 마치 남이 보낸 메세지처럼 채팅방의 좌측에서 보였다. 자기 자신의 메세지는 당연히 우측에만 보여야 하므로, 이는 명백한 버그이다.

처음에는 ws.id 같은 식으로 웹소켓이 정보를 들고 있으면 되지 않을까? 하는 생각을 했고, ws가 어떤 정보를 들고 있을 수 있나 싶어서 내장 메소드들을 훑어봤는데 딱히 들어오는 것은 없었다. 그러다가 db를 붙여놓았으니 db에다가 id와 소켓 정보를 저장해두고 메세지를 보낼 때마다 조회해서 확인하면 되지 않을까? 하는 생각이 들었다. 결과적으로는 서버에 따로 객체를 만들어 놓고 유저의 id를 key로, 소켓을 value로 저장해서 사용하는 쪽으로 코드를 추가했다.

왜 db를 사용하는가? 일단 db가 있으면 서버가 불의의 사고로 꺼져도 정보를 (어느 정도) 저장해둘 수 있다. 그리고 db는 대용량의 정보가 있을 때 빠르게 검색하는 데 유용하다. db로 정보를 요청하고 정보를 받아오는 과정이 몹시 빨라서 db를 쓰는 것은 아니다. 특히 지금 만들고 있는 좀비 채팅방 서버는 단일 서버이기 때문에, 서버 내 객체로 저장을 해도 큰 문제가 없다. 어떤 개념/도구를 새로 배웠을 때 최대한 그 개념/도구를 사용해보려는 경향이 생기는 것은 자연스럽지만 그래도 언제나 최적의 방법을 생각해내는 연습을 해야한다.