인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

gsbeom님의 프로필 이미지
gsbeom

작성한 질문수

[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter

리뷰 데이터 저장 - 상편 ( insert 편 )

doc id와 uid

해결된 질문

작성

·

326

0

firestore database에서 users의 doc id를 uid값과 동일한 값으로 입력할 수 있나요? 데이터 구조를 그렇게 만들어도 무방한가요?

답변 2

1

개발하는남자님의 프로필 이미지
개발하는남자
지식공유자

파이어 베이스 데이터베이스 사용방식으로 docId 값을 내부 field의 값으로 사용하지 말라는 말이나 사용해도 된다는 내용은 없습니다.  그리고 docId와 uid 값을 같게 하면 몇가지 유용한 점이 있습니다. 

우선 docId를 uid와 같게 해도 문제 되지 않는 이유는 DocId는 방대한 문서들의 유일한 key입니다. 즉, collection내에 하나만 존재하는 조건만 갖춘다면 어떤 데이터라도 상관이 없습니다. 실제로 firebase console로 접속해서 데이터를 넣으려고 할때 docId를 직접 입력할 수도 있습니다. 

그렇다면 고객의 uid는 유일한 키 입니다. 나의 서비스의 고객들중에 고객의 uid가 중복될 가능성은 없습니다. 그렇기 대문에 docId를 uid로 사용해도 무방한 조건이 됩니다. 

또한 docId를 uid로 사용해서 한다면 장점이 있습니다. 

조회 속도가 훨씬 빠릅니다.  왜냐면, 많은 document들이 있는데 document를 찾는데 docId를 가지고 조회를 한다면 direct로 조회를 할 수 있지만 특정 필드의 값으로 조회하는 where를 사용하게 되면 문서들을 하나하나 확인하면서 찾기 때문에 속도 차이가 분명하게 나뉘게 됩니다.물론 field들을 색인이라고 해서 docId처럼 빠르게 찾을 수 있는 설정을 할 수 있지만 이부분을 추가 비용이 발생될 수 있는 부분입니다. (색인 할 수 있는 field개수 있음 -무료에서) 

 

물론 보안상 중요한 문서를 DocId를 uid를 같게 사용하면 보안상 문제의 요소가 있을 수 있습니다.  그래서 이를 막기 위해 데이터베이스 접근 권한을 자신의 데이터에만 접근 할 수 있도록 설정하는 등의 방법을 사용 할 수 있습니다. 

0

gsbeom님의 프로필 이미지
gsbeom
질문자

빠르고 상세한 답변 감사합니다! 마지막에 보안상의 문제가 있을 수 있다고 하셨는데, 예를 들어 어떤 상황에서 문제가 발생할 수 있는지 알려주시면 감사하겠습니다

개발하는남자님의 프로필 이미지
개발하는남자
지식공유자

사용자의 데이터는 오픈되어도 되는 데이터도 있겠지만 개인정보등의 예민한 데이터들이 있을 수 있습니다. 이러한 데이터를 소유자만이 접근할 수 있도록 하거나 특정 보안규칙에 따라 설정하지 않는다고 한다면 자동화된 스크립트 공격이나 보안 우회 등 지금 딱히 떠오르지 않지만 접근하여 데이터를 빼가거나 데이터를 변조시킬 수 있기 때문에 파이어베이스 측에서는 보안규칙을 잘 설계해서 데이터를 보호 하라고 안내 하고 있습니다. 

gsbeom님의 프로필 이미지
gsbeom

작성한 질문수

질문하기