22.07.26 TIL

옵주비·2022년 7월 27일
0
post-thumbnail

나만의 무기 만들기

오늘도 정말 폭풍같은 하루를 보냈다
전날 12시 넘어 갔지만 아침 7시에 다시 나왔다. 오롯이 나의 의지이긴 하다.
나는 내가 책임진 일은 어떻게든 끝낸다. 심지어 내가 혼자 해보겠다고 먼저 말해놓고 약속을 지키지 않는 것은 스스로도 용납되지 않았다. 그래서 어떻게든 목요일 전까지 3일만에 채팅 서비스를 구현해보겠다. 오늘 한 작업 중에 굵직굵직한 것들을 소개해보자면 ...

chatroom DB 설계

채팅방 DB를 다음과 같이 설계했다.
아무래도 카카오톡이나 인스타그램에서 워낙 메세지를 주고받는 일이 잦다보니, 어떤게 필요할까 고민하며 재밌게 짤 수 있었다.
이렇게 Flutter에서 먼저 짜보고, 실제로 괜찮을지 일단 샘플데이터를 만들어서 채팅리스트가 어떻게 뜨나 살펴봤다. 아무래도 괜찮은거 같아서 BE쪽에도 모델을 추가해주었다. 저렇게 Node.js 파일을 생성한 후에는 테스트를 위해 로컬 mysql DB에도 알맞게 추가해주었다.

CREATE TABLE chatrooms(  
    id int NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Primary Key',
    connection_ids VARCHAR(255) NOT NULL COMMENT 'connections',
    user_ids VARCHAR(255) NOT NULL COMMENT 'users',
    last_msg_time DATETIME COMMENT 'last message time',
    last_msg_text TEXT COMMENT 'last message text',
    createdAt DATETIME NOT NULL COMMENT 'Create Time',
    updatedAt DATETIME NOT NULL COMMENT 'Update Time'
) DEFAULT CHARSET UTF8 COMMENT 'newTable';

이렇게 DB가 생성된다. 테스트하면서 API짜는건 내일 해야지..

chatmessage DB 설계

채팅메세지 DB도 설계했다. Flutter에서 짠 후에, 한번 띄워서 확인해봤다. 괜찮아서 역시나 Node.js 와 DB에도 붙여주었다.

우선 Node.js에 chatmessage.model.js 파일을 생성해서 Flutter에서 보내는 것을 잘 받을 수 있도록 설계해주었다. 참고로 Flutter에선 receiver만 보내지만 DB엔 sender만 저장하도록 하였다. 나중에 DB에서 긁어와 대화화면을 구성할 때, 현재 유저의 id와 sender를 비교하기만 하면 되기 때문이다. 내가 sender라면 상대가 receiver일테고, 상대가 sender면 내가 receiver일 테니까 굳이 받는 사람까지 DB에 저장할 필요는 없다고 판단했다.

CREATE TABLE chatmessages(  
    id int NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Primary Key',
    chatroom_id int NOT NULL COMMENT 'chatroom ID',
    sender int NOT NULL COMMENT 'sender',
    messagetext TEXT NOT NULL COMMENT 'messagetext',
    sendat DATETIME NOT NULL COMMENT 'Send time from Flutter',
    createdAt DATETIME NOT NULL COMMENT 'Create Time',
    updatedAt DATETIME NOT NULL COMMENT 'Update Time'
) DEFAULT CHARSET UTF8 COMMENT 'newTable';

이렇게 채팅을 위한 DB짜기 완성! 내일은 API 다 끝내버리자!

구글맵 수정

어디서 명함을 교환했는지 지도로 보여주면 좋을 것 같다는 의견에 따라, 차니님이 구글맵 패키지를 하나 따왔다. 근데 이 패키지가 좀 된 패키지라 그런지 지도가 제대로 마킹이 찍히지 않았다. SOS 요청을 받고 1시간 좀 넘게 씨름한 결과, 잘 해결했다 :) get-marker-from-json-file-and-show-on-googlemap 이란 글을 잘 뜯어봤는데, Future를 써서 안정적으로 마커가 들어오게 하는 것이 중요했다. 또한 서버에서 교환한 친구의 닉네임 + 위도경도를 가져오는 것도 문제가 있었는데, 그런 작업을 차례대로 돌아가도록 처리해주었다. Flutter 디버깅도 문제없다구 ✌️

0개의 댓글