티스토리 뷰

토이프로젝트로 채팅 어플을 만드는데 Server 와 Data 처리를 위해 Firebase를 사용했습니다.


대부분 data를 

Database().dateabase().reference().child("...")... 와 같은 방법으로 받아와 처리하였고, 


Database().dateabase().reference().child("...").setValue(***, withCompletionBlock: ***) 와 같은 방법으로 데이터를 서버로 전송했습니다.


처음 채팅방을 만들 때 먼저 방이 이미 존재하는 지를 체크하고 

채팅방이 존재한다면 주고 받았던 메세지 등 채팅방 정보를 가져오고,

채팅방이 존재하지 않는다면 아무 작업을 하지 않고 메세지 전송을 클릭하면 방이 생성되고 그 후 메세지를 보내는 형태로 구성하려고 했습니다.


이 과정에서 문제점이 생기고 말았습니다.


서버에서 데이터를 가져오기위해 Firebase에서 제공하는 observe 함수를 사용하였는데 비동기식으로 처리가 작동하여 데이터를 받아오기 전에 다음 과정으로 넘어 가는 것이었습니다.


제가 원했던 바는 데이터를 요청하고 받아 온 뒤 다음 과정을 하기를 원했는데 그렇게 작동하고 있지 않았던거죠.


그래서 먼저 이 방법을 해결하기위해 DispatchQueue 를 사용해 이 과정을 동기식으로 작동하게 설계하였지만 옵져버를 보내는 과정만 수행하면 모든 과정을 끝냈다고 보고 빠져나와서 제가 생각했던 방식으로 작동하지 않았습니다.


그리고 생각한게 일단 채팅방에 들어가면 방이 존재하는지 체크하고 존재한다면 위와 같은 과정을 거치고 

존재하지 않는다면 먼저 채팅방을 하나 만들고 방의 존재를 한번 더 체크하고 방의 UID를 가져와 체크하는 것이죠.


한 가지 염려했던 부분은 채팅방을 만들고 아무메세지를 입력하지 않고 채팅방을 나오더라도 채팅방이 그대로 유지하고 있는 것이었습니다.


이 부분을 처리하기 위해 채팅방을 떠날 때 서버에서 메세지가 입력되었는지 체크하는 옵져버를 날립니다.

만약 입력이 돼있지 않다면 채팅방 전체를 삭제하는 과정을 추가해 이 부분을 해결하였습니다.


말로 표현 할 때는 사소한 부분이고 간단하게 해결 할 수 있을 것 처럼보이지만, 

사용하는 도구를 잘 이해하지 못한다면 작은 부분도 큰 어려움으로 느껴지는 것 같습니다. 

사용하는 언어뿐 아니라 라이브러리나 API 등을 잘 다루기 위해선 관련문서를 읽고 해석하는 능력도 키워야 한다는 것을 느꼈습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함