한 걸음씩 기록하며
[ SQL, NoSQL]이란 무엇인가 본문
📋 Database는 크게 관계형 DB와 비관계형 DB로 나눌 수 있다. 본 글은 관계형 DB(SQL)과 비관계형 DB(NoSQL)을 비교하고, 어떤 상황에서 어떤 DB를 사용하는 것이 효과적인지 살펴보려고 한다.
1. SQL (Relational DataBase)
SQL은 Structured Query Language의 약자로, "구조화된 쿼리 언어"를 의미한다.
즉 SQL은 DB 자체를 나타내는 것이 아닌 어떠한 유형의 DB와 상호 작용하는데에 사용하는 쿼리 언어이다.
SQL은 쿼리 언어지만, 흔히 관계형 데이터베이스라는 의미로 사용된다.
- 관계형 데이터베이스는 가장 많이 사용되고 있는 DB의 한 종류이다. (고전적인 데이터 베이스)
- table로 이루어져 있고, table은 key와 value의 관계를 나타낸다.
1. 1 SQL 용어 정리
* 열(column) : 필드(field) 라고도 부르며, 항목의 속성(명칭)을 나타낸다. 필드 마다 각각 정수, 텍스트 같은 데이터 유형을 정할 수 있다.
* 행(row) : 레코드(record) 라고도 부르며, 각 데이터 항목을 저장한다.
* 스키마(schema) : 필드는 데이터 유형뿐만 아니라 제약사항도 지정할 수 있는데 이러한 제약사항을 스키마라고 부른다. 예를들어 필드는 중복 값을 해당 행에 저장할 수 없다거나, 반드시 값을 가져야 한다(not null)는 조건 등을 걸 수 있다.
1.2 SQL의 특징
관계형 데이터베이스에는 중요한 두 가지 특징이 있다.
- 엄격한 스키마 : 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
- 데이터는 table에 record로 저장되며, 각 테이블에는 명확하게 정의된 구조(structure)가 있다.
- 구조는 필드의 이름과 데이터 유형으로 정의된다.
- 스키마를 준수하지 않은 레코드는 추가할 수 없다.
- 관계 : 데이터는 관계를 통해 여러 테이블에 분산된다.
- 데이터의 중복을 피하기 위해, 데이터들을 여러 테이블에 나누어 저장한다.
- 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어지는 장점이 있다.
1.3 SQL의 장점과 단점
- 장점
- 명확하게 정의된 스키마를 통해 데이터의 무결성을 보장한다.
- 데이터 분류, 정렬, 탐색 속도가 빠르다.
- 관계를 통해 각 데이터는 중복 없이 한 번만 저장된다.
- 데이터베이스에 저장하기 전에 유효성 검사를 통해 데이터 품질을 향상시킬 수 있다.
- VIEW를 이용한 보안 설정이 가능하기 때문에 허가를 받지 않은 사용자들로부터 데이터의 조회, 변경 및 삭제를 막을 수 있다.
- 정규화에 따른 갱신 비용이 적다.
- 단점
- 상대적으로 덜 유연하며, 데이터 스키마는 미리 알고 계획해야한다.
- 관계를 맺고 있기 때문에 Join문이 많은 복잡한 쿼리가 만들어질 수 있고, 나중에 수정하는 것이 어렵거나 불가능하다.
- 데이터베이스의 모델링이 개발 전에 완료되어야 하므로 개발 속도를 더디게 만들 수 있다.
- 수평적 확장이 어렵고, 대체로 수직적 확장만 가능하기 때문에 데이터 처리량 성장에 한계가 있다.
- 가변성이 있는 데이터의 경우 테이블에 저장하는 것이 쉽지 않다.
- 빅데이터 처리시 비효율적이다.
2. NoSQL (Non Relational Database)
NoSQL은 "Not Only SQL"의 약자로, 기본적으로 SQL과 반대의 접근 방식을 가지고 있기 때문에 붙여진 이름이다.
기존의 RDBMS로는 관리할 수 없는 복잡하고 용량이 큰 데이터들을 관리하기 위한 목적으로 등장한 개념이다
2.1 MySQL(대표적인SQL)과 MongoDB(대표적인 NoSQL)의 용어/개념 차이 정리
* MySQL | MongoDB
- database | database
- table | collection
- index | index
- row | JSON document
- column | JSON field
- join | embedding and linking
- primary key | _id field
- group by | aggregation
2.2 NoSQL의 특징
- NoSQL은 기본적으로 SQL와 반대되는 접근 방식을 따른다.
- 관계형 데이터베이스의 특징이었던 "스키마"와 "관계"에 반대되는 접근이 비관계형 데이터베이스의 특징이라 할 수 있다.
=> 즉 "스키마 없음", "관계 없음" 이다.
- NoSQL은 데이터, collection(SQL에서 table 개념 관계를 정리하지 않기 때문에, 정해진 스키마가 없어 자유롭게 데이터를 저장할 수 있다. 그렇기에 key 값만 가지고 데이터에 대한 입출력을 할 수 있다. 자유롭다는 뜻이다.
- NoSQL의 문서는 약간 JSON과 비슷한 데이터 형태를 가지고 있다.
- 비관계형 데이터베이스는 기존의 관계형 데이터베이스보다 더 융통성있는 데이터 모델을 사용하며, 데이터의 저장 및 검색에 특화된 매커니즘을 제공한다.
2.3 NoSQL의 장점과 단점
- 장점
- 스키마가 없기 때문에 더 유연하다. 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
- 데이터 모델링이 완료되기 이전에도 데스트 데이터의 조회가 가능하다.
- 다양한 가변성이 있는 데이터의 저장이 쉽다.
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장되기 때문에, 데이터를 읽어오는 속도가 빠르다.
- 수직 및 수평적 확장이 모두 가능하므로, 애플리케이션에서 발생하는 모든 읽기, 쓰기 요청을 처리 할 수 있다.
- 단점
- 유연성 때문에 데이터 구조 결정이 어려울 수 있다.
- 문서 저장이 단위 요소 수준에서 시밀한 보안을 제공하지 않는다.
- 복사된 데이터가 변경되면 여러 콜렉션과 문서를 수정해야한다.
3. Scaling : 수직 및 수평
👉🏻 관계형과 비관계형 데이터베이스를 비교할 때 살펴보아야할 또 다른 중요한 개념은 Scaling(확장)이다.
데이터베이스를 사용하다보면 처리할 수 있는 읽기 및 쓰기 요청 수를 확장해야하는 경우가 온다.
이러한 데이터베이스 확장은 수직 확장과 수평 확장으로 구별할 수 있다.
- Vertical Scaling(수직 확장) : 수직 확장이란 단순히 데이터 베이스 서버의 성능을 향상시키는 것이다
- Horizontal Scaling(수평 확장) : 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨을 의미한다. 따라서 하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동한다.
- 데이터가 저장되는 방식 때문에 SQL은 일반적으로 수직 확장만 지원한다.
- 수평 확장은 NoSQL 에서만 가능하다.
- SQL에서 "Sharding(샤딩)"의 개념이 있지만 이는 특정 제한이 있으며 일반적으로 구현이 어렵다.
- NoSQL은 이를 기본적으로 지원하므로 여러 서버에서 데이터베이스를 보다 쉽게 분할 할 수 있다.
4. SQL vs NoSQL
SQL과 NoSQL은 둘 다 각자의 특징을 가진 데이터베이스 방식이므로, 어떤 것이 더 좋다고 말할 수 없다. 각자 개발상황에 따라서 알맞은 데이터베이스를 선택해야한다.
그렇다면 어떤 개발 상황에서 SQL 혹은 NoSQL을 사용하는 것이 좋을까?
4.1 SQL을 사용하는 것이 좋은 경우
- 앱의 여러 부분에서 관련 데이터가 비교적 자주 변경되는 경우 (NoSQL이라면 항상 여러 컬렉션을 수정해야함)
- 명확한 스키마가 중요하며, 데이터구조가 극적으로 변경되지 않을 때
4.2 NoSQL을 사용하는 것이 좋은 경우
- 정확한 데이터 요구사항을 알 수 없거나 관계를 맺고 있는 데이터가 자주 변경(수정)되는 경우
- 읽기 처리를 자주하지만, 데이터를 자주 변경하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 수정할 필요가 없는 경우)
- 데이터베이스를 수평으로 확장해야하는 경우 (막대한 양의 데이터를 다뤄야하는 경우, 읽기,쓰기 처리량이 큰 경우)
참고 및 출처
https://sunrise-new-world.tistory.com/19
https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html
'DATABASE' 카테고리의 다른 글
[ODM]이란 무엇인가? (0) | 2022.03.21 |
---|---|
[ERD]란 무엇인가? (0) | 2022.02.27 |
[Data Modeling]이란 무엇인가 (0) | 2022.02.27 |
[ORM]이란 무엇인가 (0) | 2022.02.06 |
[Database]란 무엇인가 (0) | 2022.02.06 |
Comments