기업협업 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데이터를 만드는 기분이 들었다.
이론상으로는 이렇게 만드는 것이 맞다지만 과연 실전에서는 어떻게 응용하고 더 깔끔하게 정리되어 쓰일지 기대가 되면서도 또 한편으로는 걱정이 되는 프로젝트의 첫 날이었다...!
Author And Source
이 문제에 관하여(기업협업 TIL - 06. NoSQL과 비관계형 데이터베이스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mekemeke94/기업협업-TIL-06.-NoSQL과-비관계형-데이터베이스저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)