본문 바로가기
CodeLab/Firebase

Firebase Web 채팅앱 만들기 - Realtime Database를 이용한 채팅기능 구현 - Reatime Database 특징 및 데이터 구조

by 블리드카가 2017. 12. 3.
728x90




1) Realtime Database 특징

Firebase Realtime Database 는  JSON형태의 NoSQL 데이터베이스입니다. 그리고 연결된 모든 클라이언트에 실시간 동기화되는 특징이 있습니다. 이로 인하여 일반적인 SQL 데이터베이스로 구현하는 웹개발과는 다른 특징을 가집니다.

  • NoSQL의 특징을 가지고 있는 데이터베이스로서 데이터베이스 구조를 미리 정의 하지 않습니다. (미리 테이블이나 칼럼을 생성할 필요가 없습니다.)
  • NoSQL 데이터베이스지만 실시간 동기화되는 특성으로 인하여, 저장할 데이터 구조는 최대한 중첩을 배제해야합니다.(JSON Object 값에 다시 JSON Object가 중첩이 되는 형태를 말합니다.)
  • Firebase Realtime Database와 Node.js를 함께 사용하여 서버에서 로직도 구현이 가능하지만, 클라이언트의 코드에 비즈니스 로직이 모두 들어가 있습니다. 이로 인해 다른 데이터베이스보다 데이터베이스 권한관리가 중요하며, 데이터 구조에 맞추어 세세하게 권한 및 유효성 검증을 할수 있는 기능이 포함되어 있습니다. 이는 예제 후반부에 다루게 될 것입니다.

2) 데이터 베이스 구조

   앞서 설명을 Realtime Database의 경우 데이터베이스 구조를 미리 정의하지 않는다고 말씀을 드렸지만, 그렇다고해서 계획을 세우지 않는 것은 아닙니다.
SQL처럼 미리 테이블과 칼럼을 생성하지 않을 뿐, 데이터가 저장되면서 구조를 가지게 됩니다. 그리고 어떤 데이터가 저장이 될지 미리 계획을 세우고 있어야 데이터베이스 권한 및 유효성 관리도 할 수 있습니다.


대표적인  NoSQL데이터베이스인 MongoDB 에서는 데이터의 단위를 Collection, Document, Field 등으로 나누지만, Firebase Realtime Database에는 그런개념을 두지 않습니다. 오직 Reference라는 데이터의 특정 위치를 나타내는 객체만 있습니다. Reference라는 데이터위치를 나타내는 객체를 통해 데이터의 실시간 수신을 위해 특정 위치의 데이터 변화를 읽어드리기 위해 수신대기를 하거나, 해당 위치에 데이터를 쓰게 됩니다. 

위 사진은 데이터베이스의 최상위에 위치한 Reference입니다. 자세한 내용은 아래와 같습니다. 

  • FcmId - Firebase Messaging 을 통해 웹 푸시기능을 구현할때 사용할 유저별 FCM ID값 데이터
  • Messages - 채팅방 별 메세지데이터
  • RoomUsers - 채팅방 별 유저리스트
  • UserRooms -유저별 채팅방 리스트
  • Users -  가입한 유저 데이터
  • UserConnection - 유저별 접속여부 기록

아래는 데이터 세부 구조 입니다.

FcmId > 유저UID > FCM ID값



Messages > 채팅방ID > 메세지ID >  메세지 세부데이터(메세지, 프로필이미지, timestamp, 유저UID, 유저이름)


RoomUsers > 채팅방ID > 유저UID 


UserRooms > 유저UID > 채팅방ID > 채팅방 세부데이터(마지막메세지, 프로필이미지, 채팅방ID, timestamp...)


Users > 유저UID > 유저 세부데이터 (이메일, 프로필이미지, 유저이름)


UsersConnection > 유저UID > 접속여부 , 마지막 접속 timestamp


위와 같은 구조를 지닙니다.. 최대한 중첩을 배제하였으며, 유저UID로 읽기 및 쓰기 권한을 주기 위하여 위와 같이 데이터구조를 계획하였습니다. 위 구조가 정답은 아니며, 다양한 데이터 구조가 나올 수 있을 것이라고 생각합니다.

앞서 글에서 Firebase Authentication을 활용하여 가입 및 로그인 처리를 하였지만 Realtime Database 에는 아직 저장을 하지 않았습니다. 이제 Users 항목에 가입한 유저들의 데이터를 저장을 해보겠습니다.






  1. 예제 소개
  2. Firebase 설정하기
  3. Hosting을 활용한 프로젝트 준비 작업
  4. Authentication을 이용한 유저 가입 및 로그인 구현하기
  5. Realtime Database를 이용한 채팅기능 구현 - Reatime Database 특징 및 데이터 구조
  6. Realtime Database를 이용한 채팅기능 구현 - 유저데이터 저장하기
  7. Realtime Database를 이용한 채팅기능 구현 - 유저리스팅 화면
  8. Realtime Database를 이용한 채팅기능 구현 - 채팅화면 및 채팅메세지 리스팅
  9. Realtime Database를 이용한 채팅기능 구현 - 채팅메세지 전송기능
  10. Realtime Database를 이용한 채팅기능 구현 - 채팅방 리스팅화면
  11. Realtime Database를 이용한 채팅기능 구현 - 채팅방 초대 기능
  12. Realtime Database를 이용한 채팅기능 구현 - 접속 중인 유저 표시하기
  13. Storage를 이용한 파일 전송기능
  14. Cloud Messaging과 Functions을 이용한 푸시메세지 기능 - FCM Token 정보 저장
  15. Cloud Messaging과 Functions을 이용한 푸시메세지 기능 - Functions를 통한 FCM 발송
  16. Cloud Messaging과 Functions을 이용한 푸시메세지 기능 - Service worker를 이용한 FCM수신
  17. Realtime Database 권한 설정

 








728x90