-
Notifications
You must be signed in to change notification settings - Fork 0
기술 스택
YuGyeong98 edited this page Jan 9, 2024
·
2 revisions
- Gson
- Java 객체를 JSON으로 직렬화하거나 JSON을 Java 객체로 역직렬화하는 라이브러리
- 현재 버그 수정만 되고 새로운 기능은 추가되지 않는 상태
- Moshi
- Java, Kotlin에서 JSON 데이터를 직렬화/역직렬화하는데 사용되는 라이브러리
- Kotlinx.Serialization
- 코틀린에서는 클래스 생성자 파라미터에 default value를 설정할 수 있다.
- Gson이나 Moshi에서는 코틀린의 default value 문법을 무시하기 때문에 설정한 기본값이 아닌 null값이 들어온다.
- 따라서 null값이 들어올 수 있는 파라미터를 nullable로 설정해주어야 하고, null 처리를 해줘야 한다는 번거로움이 있다.
- Kotlinx.Serialization에서는 default value 값을 활용하여 null 값이 없는 객체를 만들 수 있다.
- Gson이나 Moshi는 자바 기반이고, 코틀린의 default value 문법을 무시하기 때문에 설정한 기본값이 아닌 null값이 들어온다.
- Serialization은 코틀린 기반이고, default value 값을 활용하여 null 값이 없는 객체를 만들 수 있다.
- 따라서 Kotlinx.Serialization을 사용하기로 결정하였다.
- Cloud Firestore vs Realtime Database
- 사용자의 깃허브 정보를 저장해야 한다.
- 채팅방, 채팅 메시지 등 그룹 채팅 관련 데이터를 저장해야 한다.
- 사용자가 참여한 스터디 정보를 저장해야 한다.
- 스터디 나가기 및 내보내기 할 때 데이터베이스에서 삭제되어야 한다.
- 검색할 때마다 키워드에 해당하는 스터디 리스트를 불러와야 한다.
- NoSQL 데이터베이스
| Cloud Firestore | Realtime Database |
|---|---|
| 데이터를 Document 컬렉션으로 저장 | 데이터를 한 개의 큰 JSON 트리로 저장 |
| 간단한 데이터를 저장하기 쉬움 | 간단한 데이터를 저장하기 쉬움 |
| 복잡하고 계층적인 데이터를 구성하기 쉬움 | 복잡하고 계층적인 데이터를 구성하기 어려움 |
| 데이터 구조화가 덜 필요 |
| Cloud Firestore | Realtime Database |
|---|---|
| 단일 쿼리에서 필터링/정렬 모두 가능 | 단일 쿼리에서 필터링/정렬 둘 중 하나만 가능 |
| 특정 컬렉션 또는 컬렉션 그룹의 Document만 반환하고, 하위 컬렉션 데이터는 반환하지 않음 → 쿼리 조건문을 잘 작성한다면 불필요한 하위 데이터까지 반환하는 성능 문제는 발생하지 않음 |
쿼리는 항상 전체 서브트리를 반환 → 불필요한 하위 데이터까지 매번 반환하므로 성능 저하 발생 가능 |
| 데이터셋이 커질수록 쿼리 성능 저하 |
| Cloud Firestore | Realtime Database |
|---|---|
| 주로 데이터 읽기, 쓰기, 삭제 작업에 대해 요금 청구 | 대역폭과 저장용량에 대해서만 요금 청구 |
- Full-text search
- 타사 검색 서비스를 사용해야 한다.
- 쿼리문을 사용해서 구현할 수는 있지만, 중간에 끼어있는 문자열이나 뒤에 오는 문자열 대상으로 검색이 불가능하다.
- 현재 앱에서는 데이터 구조가 복잡하지 않고, 채팅을 구현한다면 주로 데이터 읽기, 쓰기, 삭제 작업이 많아질 것으로 예상된다.
- 또한 Cloud Firestore에서는 전체 텍스트 검색을 지원하고 있지 않기 때문에 최종적으로 Realtime Database로 결정하였다.
- REST API or SDK? REST API를 사용하면 기존 REST API 사용하던 방식을 적용할 수 있다.
- 따라서 Realtime Database의 REST API 방식을 사용하기로 결정하였다.