2025년 8월 17일 일요일
Firestore 데이터 구조
### Firestore 데이터 모델 구조
Firestore는 관계형 데이터베이스의 '테이블' 개념 대신 **컬렉션(Collections)**과 **문서(Documents)**를 사용하여 데이터를 저장합니다. 아래는 제공된 클래스 모델들을 기반으로 한 Firestore의 데이터 구조를 정리한 것입니다.
---
### 1. 그룹 (Group)
그룹 정보를 담는 컬렉션입니다.
- **컬렉션 이름**: `groups`
- **문서 ID**: 각 그룹의 고유 식별자인 `groupId` 필드 값을 사용합니다.
| 필드명 (Field) | 데이터 타입 (Type) | 설명 |
| :--- | :--- | :--- |
| `groupId` | `string` | 그룹의 고유 식별자 |
| `groupName` | `string` | 그룹 이름 |
| `memberUserIds` | `array` of `string` | 그룹 멤버의 사용자 ID 목록 |
| `adminUserIds` | `array` of `string` | 그룹 관리자의 사용자 ID 목록 |
| `createdDate` | `string` | 그룹이 생성된 날짜 및 시간 (ISO 8601 형식) |
| `useYN` | `string` | 사용여부(Y,N) |
| `updateDate` | `string` | 아이템이 변경된 날짜 및 시간 (ISO 8601 형식) |
---
### 2. 공유 아이템 (SharedItem)
모든 공유 아이템의 공통 필드를 정의하는 컬렉션입니다. 이 컬렉션은 이미지, 위치, 메시지 등 다양한 타입의 문서를 포함합니다.
- **컬렉션 이름**: `sharedItems`
- **문서 ID**: 각 아이템의 고유 식별자인 `id` 필드 값을 사용합니다.
| 필드명 (Field) | 데이터 타입 (Type) | 설명 |
| :--- | :--- | :--- |
| `id` | `string` | 아이템의 고유 식별자 |
| `userId` | `string` | 아이템을 공유한 사용자 ID |
| `timestamp` | `string` | 아이템이 생성된 날짜 및 시간 (ISO 8601 형식) |
| `type` | `string` | 아이템의 타입 (`image`, `location`, `message`) |
| `sharedWithGroupIds` | `array` of `string` | 이 아이템이 공유된 그룹 ID 목록 |
| `momentId` | `string` | 아이템이 속한 모멘트 ID (선택 사항) |
| `useYN` | `string` | 사용여부(Y,N) |
| `updateDate` | `string` | 아이템이 변경된 날짜 및 시간 (ISO 8601 형식) |
---
### 3. 이미지 공유 아이템 (ImageShareItem)
`SharedItem`을 상속받아 이미지 공유에 특화된 필드를 추가합니다.
- **컬렉션**: `sharedItems`
- **문서**: `type` 필드가 `'image'`인 문서
| 필드명 (Field) | 데이터 타입 (Type) | 설명 |
| :--- | :--- | :--- |
| `id` | `string` | 아이템의 고유 식별자 |
| **`imageUrl`** | **`string`** | **Cloud Storage에 저장된 이미지의 다운로드 URL** ⚠️ |
| `latitude` | `double` | 사진 촬영 위도 (선택 사항) |
| `longitude` | `double` | 사진 촬영 경도 (선택 사항) |
| `caption` | `string` | 사진에 대한 설명 (선택 사항) |
| `imageFormat` | `string` | 이미지 형식 (`jpeg`, `png`) |
| `useYN` | `string` | 사용여부(Y,N) |
| `updateDate` | `string` | 아이템이 변경된 날짜 및 시간 (ISO 8601 형식) |
⚠️ **중요**: Base64 인코딩된 이미지 데이터를 Firestore에 직접 저장하는 것은 비효율적입니다. 대신, **Cloud Storage에 이미지를 저장하고** 그 URL만 Firestore에 저장하는 것을 강력히 권장합니다.
---
### 4. 위치 공유 아이템 (LocationShareItem)
`SharedItem`을 상속받아 위치 공유에 특화된 필드를 추가합니다.
- **컬렉션**: `sharedItems`
- **문서**: `type` 필드가 `'location'`인 문서
| 필드명 (Field) | 데이터 타입 (Type) | 설명 |
| :--- | :--- | :--- |
| `id` | `string` | 아이템의 고유 식별자 |
| `latitude` | `double` | 위치의 위도 |
| `longitude` | `double` | 위치의 경도 |
| `accuracy` | `double` | 위치 정보의 정확도 (선택 사항) |
| `altitude` | `double` | 위치의 고도 (선택 사항) |
| `speed` | `double` | 위치 업데이트 시점의 속도 (선택 사항) |
| `description` | `string` | 위치에 대한 설명 (선택 사항) |
| `useYN` | `string` | 사용여부(Y,N) |
| `updateDate` | `string` | 아이템이 변경된 날짜 및 시간 (ISO 8601 형식) |
---
### 5. 메시지 공유 아이템 (MessageShareItem)
`SharedItem`을 상속받아 메시지 공유에 특화된 필드를 추가합니다.
- **컬렉션**: `sharedItems`
- **문서**: `type` 필드가 `'message'`인 문서
| 필드명 (Field) | 데이터 타입 (Type) | 설명 |
| :--- | :--- | :--- |
| `id` | `string` | 아이템의 고유 식별자 |
| `text` | `string` | 메시지 내용 |
| `mentionedUserIds` | `array` of `string` | 메시지에서 멘션된 사용자 ID 목록 |
| `threadId` | `string` | 메시지가 속한 스레드 ID (선택 사항) |
| `useYN` | `string` | 사용여부(Y,N) |
| `updateDate` | `string` | 아이템이 변경된 날짜 및 시간 (ISO 8601 형식) |
---
### 6. 사용자 프로필 (UserProfile)
사용자 프로필 정보를 담는 컬렉션입니다.
- **컬렉션 이름**: `userProfiles` (또는 `users`)
- **문서 ID**: 각 사용자의 고유 식별자인 `id` 필드 값을 사용합니다.
| 필드명 (Field) | 데이터 타입 (Type) | 설명 |
| :--- | :--- | :--- |
| `id` | `string` | 사용자 프로필의 고유 식별자 |
| `contactId` | `string` | 사용자의 연락처 ID |
| `snsInfo` | `map` | 소셜 미디어 정보 (키-값 쌍) |
| `deviceInfo` | `map` | 기기 정보 (키-값 쌍) |
| `userType` | `string` | 사용자의 타입 |
| `connectionSetupDate` | `string` | 연결 설정 날짜 (ISO 8601 형식) |
| `syncId` | `string` | 동기화 ID (선택 사항) |
| `syncDate` | `string` | 마지막 동기화 날짜 (ISO 8601 형식, 선택 사항) |
| `createdDate` | `string` | 프로필 생성 날짜 (ISO 8601 형식) |
| `updatedDate` | `string` | 프로필 마지막 업데이트 날짜 (ISO 8601 형식, 선택 사항) |
| `useYn` | `boolean` | 사용 여부 |
| `additionalInfo` | `map` | 추가 정보 (키-값 쌍, 동적으로 추가 가능) |
https://blog.naver.com/mythee1/223491033437
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기