이번 프로젝트에서는 FireBase에서 제공하는 NoSQL이라는 DBMS(데이터베이스 관리 시스템)을 사용한다.
사실 백엔드 데이터를 직접적으로 다뤄본 적은 없지만 몇 번의 프로젝트를 거치며 관계형 데이터베이스들은 겪어봤다. 하지만 처음 마주하는 비관계형 데이터베이스 관리 시스템을 사용하는 NoSQL을 사용해보기에 앞서 공부한 것을 정리해보는 시간을 갖고자 한다.
SQL은 '구조화 된 쿼리 언어 (Structured Query Language)'를 말한다. 따라서 데이터베이스 자체를 나타내는 것이 아니라, 특정 유형의 데이터베이스와 상호 작용하는 데 사용 하는 쿼리 언어를 말한다고 한다.
SQL을 사용하면 관계형 데이터베이스 관리 시스템에서 데이터를 저장, 수정, 삭제, 검색 등을 할 수 있다.
이런 관계형 데이터베이스는 두가지 특징이 있다.
엄격한 데이터 스키마란 데이터가 각 테이블의 레코드로 저장되며 각 테이블에는 명확하게 정의된 구조가 있다는 것이다. 조금 더 풀어 설명하자면 이미 정의된 테이블은 건드릴 수가 없다는 뜻!
하지만 NoSQL은 Not only SQL의 약자로 SQL만을 사용하지 않는다. 즉 비관계형 데이터베이스 관리 시스템을 사용한다는 것!
즉 SQL 세상에서는 정해진 스키마를 따르지 않는다면 데이터를 추가 할 수 없지만, NoSQL에서는 다른 구조의 데이터를 같은 컬렉션(= SQL에서의 테이블)에 추가할 수 있다는 것이다.
때문에 확장성과 관리적 측면에서 매우 용이하다는 특징이 있다!
사실 위에서 이론적으로 정리를 해놓긴 했지만 확실히 와닿지 않을 수 있기 때문에 백문이 불여일견 직접 어떤 모습을 가지고 있는지 살펴보며 정리한다.
간단하게 이런 모양의 게시판을 만든다고 가정해보자!
{
"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데이터를 만드는 기분이 들었다.
이론상으로는 이렇게 만드는 것이 맞다지만 과연 실전에서는 어떻게 응용하고 더 깔끔하게 정리되어 쓰일지 기대가 되면서도 또 한편으로는 걱정이 되는 프로젝트의 첫 날이었다...!