기업협업 TIL - 06. NoSQL과 비관계형 데이터베이스

이번 프로젝트에서는 FireBase에서 제공하는 NoSQL이라는 DBMS(데이터베이스 관리 시스템)을 사용한다.
사실 백엔드 데이터를 직접적으로 다뤄본 적은 없지만 몇 번의 프로젝트를 거치며 관계형 데이터베이스들은 겪어봤다. 하지만 처음 마주하는 비관계형 데이터베이스 관리 시스템을 사용하는 NoSQL을 사용해보기에 앞서 공부한 것을 정리해보는 시간을 갖고자 한다.

1. SQL? NoSQL?


SQL은 '구조화 된 쿼리 언어 (Structured Query Language)'를 말한다. 따라서 데이터베이스 자체를 나타내는 것이 아니라, 특정 유형의 데이터베이스와 상호 작용하는 데 사용 하는 쿼리 언어를 말한다고 한다.
SQL을 사용하면 관계형 데이터베이스 관리 시스템에서 데이터를 저장, 수정, 삭제, 검색 등을 할 수 있다.
이런 관계형 데이터베이스는 두가지 특징이 있다.

  • 엄격한 데이터 스키마(=structure)를 따라 데이터베이스 테이블에 저장된다.
  • 데이터는 관계를 통해 연결된 여러 테이블에 분산된다.

엄격한 데이터 스키마란 데이터가 각 테이블의 레코드로 저장되며 각 테이블에는 명확하게 정의된 구조가 있다는 것이다. 조금 더 풀어 설명하자면 이미 정의된 테이블은 건드릴 수가 없다는 뜻!

하지만 NoSQL은 Not only SQL의 약자로 SQL만을 사용하지 않는다. 즉 비관계형 데이터베이스 관리 시스템을 사용한다는 것!
즉 SQL 세상에서는 정해진 스키마를 따르지 않는다면 데이터를 추가 할 수 없지만, NoSQL에서는 다른 구조의 데이터를 같은 컬렉션(= SQL에서의 테이블)에 추가할 수 있다는 것이다.
때문에 확장성과 관리적 측면에서 매우 용이하다는 특징이 있다!

2. FireBase에서의 실시간 데이터베이스


사실 위에서 이론적으로 정리를 해놓긴 했지만 확실히 와닿지 않을 수 있기 때문에 백문이 불여일견 직접 어떤 모습을 가지고 있는지 살펴보며 정리한다.

간단하게 이런 모양의 게시판을 만든다고 가정해보자!

{
  "board" : {
    "1": {
      "author" : "글쓴이1",
      "title" : "제목1",
      "body" : "내용1",
    },
    "2": {
      "author" : "글쓴이2",
      "title" : "제목2",
      "body" : "내용2",
    },
    "3": {
      "author" : "글쓴이3",
      "title" : "제목3",
      "body" : "내용3",
    }
  }
}

이와 같은 데이터구조에서 내용을 더 추가하고 싶다면 어떻게 해야할까?
관계형 데이터베이스 관리 시스템에서는 생각해야할게 많겠지만 비관계형 데이터베이스 구조인 NoSQL에서는

{
  "board" : {
    "1": {
      "author" : "글쓴이1",
      "title" : "제목1",
      "body" : "내용1",
      "reply" : {
        "1": {
          "author" : "댓글 글쓴이1"
          "text" : "내용1"
        }
      }
    },
    "2": {
      "author" : "글쓴이2",
      "title" : "제목2",
      "body" : "내용2",
      "reply" : {
        "1": {
          "author" : "댓글 글쓴이2"
          "text" : "내용2"
        }
      }
    },
    "3": {
      "author" : "글쓴이3",
      "title" : "제목3",
      "body" : "내용3",
      "reply" : {
        "1": {
          "author" : "댓글 글쓴이3"
          "text" : "내용3"
        }
      }
    }
  }
}

이렇게 간단히 내용을 추가해버릴 수가 있다..

사실 직접 적으면서..


왠지 프로젝트때 백엔드에서 데이터를 넘겨받기 전 mock데이터를 만드는 기분이 들었다.
이론상으로는 이렇게 만드는 것이 맞다지만 과연 실전에서는 어떻게 응용하고 더 깔끔하게 정리되어 쓰일지 기대가 되면서도 또 한편으로는 걱정이 되는 프로젝트의 첫 날이었다...!

좋은 웹페이지 즐겨찾기