(TIL) 7. 기업협업 프로젝트 시작 && Firebase RealTimeDataBase : NoSQL

김동우·2021년 9월 9일
0

React-Native

목록 보기
7/17
post-thumbnail

1.

프로젝트의 시작인 하루입니다.

이것저것 참 많은 일들이 있었지만, 오늘은 하루종일 꽂혀 있던 Firebase realTimeDataBase의 설계, No SQL - document에 대한 내용으로 작성할까 합니다.

기존 RDB와는 좀 달리 생각해야 하는데, 마냥 쉽지 않아서 좀 난항을 겪고 있습니다.

또한 firebase의 경우 쿼리문을 통한 접근을 따로 지원하지 않고, 다양한 메소드를 통해 DB 자료를 검색할 수 있습니다.

  • 관계가 정의된 상태가 아닐 때 data를 어떻게 저장해야 할까?

  • 저장된 데이터를 어떻게 메소드를 덜 사용하면서 효율적으로 가져올 수 있을까?

  • Date 데이터를 보관한다면 key를 어떻게 설정하는게 좋을까?

이런저런 고민이 참 많았습니다.

숙소 예약을 담당했던 전 프로젝트 팀원에게 조언을 구할까 했지만, 한 번 혼자 힘으로 첫 DB 설계를 시작해보고자 합니다.

2.

우선 No SQL은 정말 말 그대로 설계하기 나름인 것 같습니다.

스키마도 존재하지 않고, 그렇기에 PK, FK 등과 같은 제약도 없습니다.

따라서 확장하고 싶으면 마음껏 하는게 맞지만, 최적화는 다른 문제입니다.

firebase의 경우 document, JSON 형태의 DB 구조입니다.

원하는 결과를 위해 하나의 특정 key로 접근하는 구조로 만들어진 것이죠.

"저장해야 할 대부분의 데이터는 Date String이기에 이를 년, 월, 주 단위로 최적화하기 위해 데이터를 옮기는 방법은 어떨까?" 가 바로 첫번째 생각이었습니다.

그러나 해당 방법은 각 key의 value가 서로 의존성을 갖게 됩니다.

예를 들어,

  1. 일별 데이터를 주(key)에 담는다.

  2. 월요일에는 주를 초기화하고, 특정 월(9)에 주 데이터를 담는다.

  3. 다음 월로 넘어가는 10.01 00:00에 월을 reset하고, 특정 년에 월 데이터를 담는다.

가 되는데, 이렇게 될 경우 너무 번거롭고 지나치게 많은 로직을 발생시키는 것 같았습니다.

따라서 해당 방법은 가차없이 폐기했습니다.

예상 구조는

{
  userId : { 
    userInfo : {...},
    year : {"1" : [...], ..., },
    month : {"1st" : [...], ..., },
    week : [{...}],
    day : {start : "", end : "", time : number},               
  },
            
  userId : {...},
}

이런 느낌이었는데, 모르니까 참 용감한 것 같습니다.

코드로 써보니까 정말 택도 없네요.

3.

다음 방법은 그냥 틀을 빡세게 잡고 가는 방법입니다.

{
  userId : {
    userInfo : {...},
    "2021" : { 
      "1" : {
        "1st": {
          "Mon" : {
            "start" : Date, 
              "end" : Date, 
              "time" : number,
          },
          ...
        },
        ...
      },
      ...
    },
    "2022" : {...}
  }
}

이런 느낌이 되겠네요.

그리고 이걸 한 번 더 묶어버리면,

{
  userId : {
    userInfo : {...},
    commuteData : {
      "2021" : { 
        "1" : {
          "1st": {
            "Mon" : {
              "start" : Date, 
                "end" : Date, 
                "time" : number,
            },
            ...
          },
          ...
        },
        ...
      },
      "2022" : {...}
    }
  }
}

가 되는 것이 아닐까 생각합니다.

그럼 년, 월, 주, 요일로 각각 따로 접근할 수 있기는 합니다.

firebase method는 하나의 dir 경로로 접근하는 것과 같은 방식으로 데이터에 접근하게끔 구성되어 있습니다.

그런데 사실 아직 이게 개발 단계에서 옳은 방법인가에 대해 검증하지는 못한 것 같습니다.

이것저것 No SQL에 대해 공부하고 있는데, 어떤게 효율적일지 잘 모르겠습니다.

저는 아직까지는 이렇게 구성하는게 좋을 것 같다는 생각이 고정적인 것 같습니다.

접근에 용이하고, 로직에서 활용도가 높은 구조일 것 같아서 그런 것 같습니다.

무지의 늪에 빠져 도전하고 깨져봐야 아나봅니다...

그럼 오늘도 깨져보러 가겠습니다! 화이팅!

0개의 댓글