페이지

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

댓글 없음: