본문 바로가기

Project/TIL

20.04.02 ShareBook TIL

프론트 엔드 분들과 socket.io 구현에 대해 약간의 의견 차이가 생겼다.

프론트 분들은 디비에 저장되어 있는 채팅 목들을 불러와 화면에 랜더해서 채팅방에 들어가 채팅을 한다는 내용으로 생각하고 계셨고

백엔드에서는 화면에 렌더되는 것들은 채팅을 먼저 하고난다음 데이터베이스에 담겨진 내용들을 보내주는것이므로 먼제 실시간 채팅이 먼저 이루어져야 한다는 내용이였다.

다들 처음 접하는다보니 어떤 방식이 맞는지 확신이 없어서 회의가 길어졌다.

채팅하기를 누르면 바로 채팅으로 넘어가는 형식으로 의견을 조율하고 다시 코드를 작성하기로 하였다.

--현재 백엔드에서 문제점--

클라이언트에서 request로 {roomname, bookId, userId }를 보내주기로 했는데 데이터베이스에서는 borrowerId도 들어가야되서 어떻게 넣어줄것인지? 토큰으로 넘어온 borrowerId를 어떻게 핸들링해야 할지... socket.io같은 경우 postman으로 확인이 어려워 좀 더 생각을 해봐야겠다.

유저의 대화 내용을 실시간으로 데이터베이스에 쌓을지 아니면 대화 내용을 모두 배열에 담아 대화가 종료되면 데이터베이스에 넣을지

데이터베이스에 담긴 유저의 대화 내용을 어떤 형식으로 response 해줄지

== 오늘 토론 내용 ==

1. 채팅방 데이터 담는 방식 => Inmemory vs localStorage
2. 나가기 버튼 클릭 시 작용하는 것들
3. 어떤 데이터를 서버에서 보내줄 지========================================================================================백엔드에서 필요한 데이터1. 대화하기 버튼 => {roomname, bookname, userId}
2. socket.emit('chat message', {nickname: dddd , message :ddddd})프론트가 백엔드에서 받는 데이터1. {nickname: ddddd, message:dddddddd} 소켓에서?
2. socket.ondb 데이터 같은 경우에는 그냥 뭐 맨 처음에 랜더 될 경우에만 받아오고
그 이후에는 소켓으로 채팅하고 눈에 보일 테니까 그리고
나갈때 => 서버 쪽에서 실시간 채팅을 디비에 저장을 하고============================================================1. 대화하기 버튼 => 서버로 axios.post( {roomname, bookname, userId}) => 서버쪽에서 소켓으로 채널 생성(roomnname)
=> `roomname` 을 가지고 채팅방 UI 만들어서 'roomname' 으로 소켓에 접속 => 리덕스 사용해서 'roomname = [ room1, room2, room3 ]'
=> 대화목록 스크린에서 리덕스 연결해서 roomname 가져와서 플랫리스크 랜더 => 클릭 시 => roomname 소켓 연결 => 이미지 모달 창 => 소켓 온 => 소켓 이밋 => 실시간으로? // 디비에서 가져오는2. chat table = id / roomname / bookid / userid / borrowid / message
id / roomname1 / bookid / userid / borrowid / message{nickname, message)
id / roomname1/ bookid / userid / borrowid / message
id / roomname1/ bookid / userid / borrowid / message
id / roomname2/ bookid / userid / borrowid / message
id / roomname2/ bookid / userid / borrowid / message리덕스 안에서 데이터를 만져야 되는건가 ?..?..?
axios.post(내가 빌려 줄 채팅방 목록) => 토큰 userid === userid
axios.post(내가 빌린 책 채팅방 목록) => 토큰 userid === borrowid 합친다
axios.post( 토큰 userid === userid || 토큰 userid === borrowid)=============================================================
특정 클라이언트가 join해 있는 모든 룸 => 모든 룸들의 이름이 구해집니다 => // disconnect
io.sockets.manager.roomClients[socket.id]

'Project > TIL' 카테고리의 다른 글

20.04.01 ShareBook TIL  (0) 2020.04.01
20.03.31 ShareBook TIL  (0) 2020.04.01
20.03.30 ShareBook TIL  (0) 2020.03.31
20.03.29 ShareBook TIL  (0) 2020.03.29
20.03.28 ShareBook TIL  (0) 2020.03.29