개인프로젝트에서 공연 정보를 받아와야 하는데, DB에 보관해놓고 필요할 때마다 찾으면 매번 API를 통해 받아오는 것보다 효율적일 것이라고 생각해 DB의 종류에 대해 알아보게 되었다.
데이터베이스는 크게 관계형 데이터베이스 (RDBMS, Relational Database Management System)와 NoSQL 데이터베이스로 나눌 수 있다. 우선 각각의 특징을 살펴보자.
- Data를 Column과 Row형태로 저장한다.
- SQL(Structured Query Language, 구조화 질의어)라는 정교한 검색 query를 통해 데이터를 다룬다.
- Transaction을 보장한다.
- 반드시 Schema 규격에 맞춰야 한다. 유연한 데이터 저장이 불가하다.
- 테이블 간의 관계가 Join으로 복잡하게 얽혀 있어서 부하의 분산이 어렵다.
-> 데이터를 여러 서버에 분산시키기 어렵다. 수직 확장(Scale-up)만 가능하다.- 대표적으로 MySQL, SQLite, PostgreSQL, Oracle 등이 있다.
not only SQL의 약자로, 정해진 형태의 데이터만 다룰 수 있는 SQL과 달리 다양한 형식의 저장 방식을 지원한다는 것을 말한다.
- 스키마 선언 없이 필드의 추가 및 삭제가 자유로운 Schema-less 구조이다.
- 수평 확장에 의한 서버 확장이 용이하다(Scale-out). 따라서 장애 발생 시에도 무중단 서비스가 가능하다.
- 대용량 데이터를 처리하는 성능이 뛰어나다.
- 데이터간의 관계를 정의하지 않으며, Table 간의 join 도 불가능하다.
- Schema가 없다보니 Data를 일관된 형식으로 꺼내어 쓰기가 힘들다.
이렇게 SQL과 NoSQL의 특징에 대해서 알아보다 보니,
개인프로젝트에 RDBMS보다는 NoSQL을 사용하는 것이 더 효율적일 것이라는 판단을 했다.
이유는 다음과 같다.

프로젝트에 사용할 데이터는 위와 같은 형식을 가지고 있는데, mt20id 필드의 공연 ID로 공연 상세 정보를 조회할 수 있다는 거 빼고는 테이블 간의 연관성을 필요로 하지 않는다.
원본 데이터가 XML 형식으로 되어있기 때문에 JSON 데이터로 변환해서 NoSQL DB에 키-값 형태로 쉽게 저장이 가능하다.