![thumbnail](/static/301f02a662732e3eb0bcc537c5239c87/b1abc/230516_sql-thumbnail.png)
DBMS(DataBase Management System)
DBMS는 말 그대로 데이터베이스 관리 시스템을 뜻하며, SQL과 같은 언어로 데이터베이스와 상호작용한다.
우리가 흔히 데이터베이스라 부르는 MySQL, Oracle은 데이터베이스가 아니라 DBMS이지만, 편의상 데이터베이스라 부르는 것이다. 의미를 정확히 알고 있자.
RDBMS(관계형 데이터베이스)
RDBMS는 표 형태의 데이터베이스를 관리하는 시스템으로, SQL 언어를 사용하여 조작할 수 있다.
RDBMS 종류
MySQL, PostgreSQL, SQL Server, Oracle, MariaDB
SQL(Structured Query Language)
관계형 데이터베이스를 관리하기 위해 만들어진 언어로 지정된 형식으로만 데이터를 저장할 수 있다.
예를 들어, 아래와 같이 id, name, price로 이루어진 ‘제품 가격’ 테이블에서 새로운 속성 ‘Number’가 포함된 행 하나를 추가한다고 가정해 보자.
![sql schema sql schema](/static/e03890d0cd9e1d582c5fb4f0597301f6/fe486/230516_schema.png)
행을 추가하려면, 전체 테이블 구조를 변경해 id 1, 2, 3에 해당하는 행에도 Number
값을 지정해 주어야 한다. 결국 전체 테이블 구조를 변경하지 않고는 새 속성을 추가할 수 없는 것이다.
이처럼 테이블이 미리 정해진 형태를 스키마(Schema)라고 하며, 스키마의 집합을 인스턴스(Instance)라 한다.
- 스키마: ID, Name, Price, Number
- 인스턴스: 1, 2, 3 / 바나나, 딸기, 멜론 / 3,000, 5,000, 6,000
NoSQL(Not only SQL)
SQL을 사용하지 않는 데이터베이스를 말하며, 관계형 데이터베이스의 과제(=비정형데이터)를 해결하기 위해 만들어졌다. 표 형식 구조와 상관없이 다양한 형식의 데이터를 저장할 수 있고 데이터를 여러 서버로 분산해 저장할 수 있어 확장성이 높다. 주로 데이터 분석에 활용된다.
도큐먼트 데이터베이스(document DB)
도큐먼트 데이터베이스는 컬럼과 스키마 없이 트리 형태로 계층 관계를 표현할 수 있는 데이터이다. 대표적인 도큐먼트 DB로는 데이터를 JSON 형태로 저장하는 MongoDB가 있다.
document 데이터베이스 종류
MongoDB, Azure Cosmos DB, CouchDB 등
MongoDB를 SQL과 비교해보면,
![sql sql](/static/250d46c0b8c21dcb78d5ef8fae787dee/dface/230516_sql.png)
MongoDB
[
{ "id": 1, "Name": "바나나", "Price": 3,000 },
{ "id": 2, "Name": "딸기", "Price": 5,000 },
{ "id": 3, "Name": "메론", "Price": 6,000 },
]
SQL은 표 형태를 띠고 있어 행을 추가하려면 모든 열에 그에 해당하는 값을 넣어주거나 값이 없다면 따로 처리해야 한다. 즉, ‘포도’라는 데이터를 하나 추가하기 위해 id, name, price 모두 값을 정해줘야 한다는 것이다. 반면, JSON 도큐먼트 형태에선 대괄호와 중괄호 외에는 모든 구성이 같을 필요가 없어 유연한 데이터 저장이 가능하다.
또한, MongoDB는 도큐먼트를 생성할 때마다 유니크한 값인 ObjectID
가 생성된다. 이는 다른 데이터와 중복되지 않는 RDBMS의 Primary key와 같은 역할을 한다.
MongoDB 장점
- 확장성이 뛰어남
- 빅데이터 저장 시 성능이 좋음
- 스키마를 정하지 않고 데이터 삽입이 가능해 개발자가 원하는 종류의 데이터를 저장할 수 있음
키-값 데이터베이스(key-value DB)
key-value 데이터베이스는 key를 고유 식별자로 사용하는 key-value 쌍의 집합으로 데이터를 저장하고 DB에서 데이터를 빠르게 찾을 때 사용된다. 가장 큰 장점이 읽고 쓰는 속도가 매우 빠르다는 것이다.
key-value 데이터베이스 종류
DynamoDB, redis, Oracle Berkely DB 등
![key-value DB key-value DB](/static/412d766a6653787245f8fc4117344662/dface/230516_key-value-db.png)
SQL vs NoSQL
SQL과 NoSQL 중 뭐가 더 낫다고 잘라 말할 수 없다. 상황에 따라서, 사용할 데이터의 목적과 형태에 따라 선택하면 된다. 꼭 하나만 사용할 필요도 없고 둘 다 사용해도 된다.
SQL은 데이터의 형식을 미리 정의하기 때문에 복잡한 쿼리로 원하는 정보를 추출할 때 유용하다. 그러나 이는 정해진 틀에서만 데이터 작업이 이뤄져야 한다는 의미이므로 데이터스키마를 정의하는 데 시간이 많이 들 뿐만 아니라 구조 변화가 생기면 모든 시스템에 까다로운 작업을 적용시켜야 한다는 단점이 있다.
반대로 NoSQL은 데이터 구조가 정해져 있지 않아 유연하게 데이터를 저장하고 확장 및 수정이 용이하다는 장점이 있다. 문서마다 고유한 구조를 가질 수 있는 것이다. 그만큼 데이터를 일관적으로 관리하기에는 어려움이 있다는 단점도 존재한다.
언제 무엇을 사용하면 좋은가?
정리하면, SQL은 데이터 양이 상대적으로 적고 복잡한 쿼리를 사용해야 하는 경우 사용하면 좋고, NoSQL은 데이터 양이 많고 사전에 정확한 데이터 구조를 정의하기 어려운 경우에 사용하는 것이 좋다.
SQL
- 데이터가 방대해지거나 구조를 변경할 일이 없는 경우
- 복잡한 쿼리나 데이터베이스 분석이 필요한 경우
NoSQL
- 데이터양이 많은 경우
- 지속적으로 데이터가 추가되고 변경돼 미리 정의하기 힘든 경우