Notice
Recent Posts
Recent Comments
Link
nathan_H
[DataBase] SQL vs NoSQL 본문
Intro
- 어플리케이션 개발을 함에 있어, 데이터베이스는 필수적으로 사용하게 된다.
- 그리고 데이터베이스도 SQL, NoSQL 중 선택의 갈림길에 놓이게 된다.
- SQL & NoSQL의 각 특징을 파악하고, 어떤 상황과 용도로 사용하는 것이 적절한지 정리하고자 한다.
SQL
- SQL(Structured Query Language)은 데이터베이스 자체를 나타내는 용어는 아니다, 특정 유형의 데이터베이스와 상호 작용하기 위한 쿼리 언어이다.
- 그래서 정확히 이야기 하면, RDMBS에서 사용되는 쿼리 언어라고 보면 되는데, 설명을 위해 SQL을 RDBMS 의미로 같이 사용할 예정이다.
RDBMS (관계형 데이터베이스) 특징
- 엄격한 스키마 : 정해진 데이터 스키마(구조)에 따라 데이터베이스 테이블에 저장된다.
- 관계 : 관계(Relation)를 통해 여러 개의 테이블로 분산 된다.
엄격한 스키마
- 데이터는 정해진 테이블에 레코드로 저장되기 때문에 각 테이블의 구조와 각 필드의 타입에 따라 엄격하게 관리된다.
- 즉, 스키마를 준수하지 않은 레코드는 삽입이 되지 않는다.
- 또한 테이블에 구조보다 더 많은 정보가 필요하다면, 다른 테이블에서 조인을 통한 추가적인 연산을 통해 조회를 진행해야 한다.
관계
- 관계형 데이터베이스는 데이터들을 도메인에 맞게 여러 테이블에 저장 및 관리가 되어진다.
- 구조를 잘 설계를 하면, 데이터의 중복을 피하며 원하는 데이터들로만 정확히 저장 및 관리를 할 수 있다.
NoSQL
- NoSQL은 이름에서 알 수 있듯이 SQL과 반대되는 접근방식을 따르는 데이터베이스이다.
스키마 없음
- NoSQL 에서는 다양한 타입이 존재하는데, MongoDB와 같은 NoSQL DB에서는 레코드를 "문서"라고 부른다.
- SQL에서는 정해진 스키마를 따르지 않으면 데이터 삽입이 불가능했지만, NoSQL은 다른 구조의 데이터를 같은 컬렉션에 추가할 수 있다.
- 즉, 컬렉션에는 SQL에서 가지는 엄격한 스키마 구조가 없기 때문에 다양한 데이터 타입들이 들어갈 수 있다.
관계 없음
- NoSQL은 스키마가 없기 때문에 도메인에 필요한 정보를 모두 Collection에 저장하고 관리하게 된다.
- 따라서, SQL와 달리 조인 개념이 없으면 대신 컬렉션을 통해 데이터 복제하여 각 컬렉션 일부분이 되어 산출하도록 한다.
- 이런 특징은 조인 연산 필요성이 없어 속도 측면에서는 이점이 있으나, 데이터 중복이 될 수 있는 불안정한 측면이 있다.
- 또한 수정 측면에서도,한쪽 컬렉션에서는 수정이 진행되고 다른 컬렉션에서는 수정이 이루어지지 않은 경우가 발생할 수 있어 부정확한 데이터가 발생할 수 있다.
Scaling
https://www.geeksforgeeks.org/horizontal-and-vertical-scaling-in-databases/
- SQL & NoSQL의 비교와 차이점 중 중요한 부분으로 Scaling을 집고 넘어가야 한다.
Vertical Scaling
- 데이터베이스 서버의 성능을 확장시키는 방식. (CPU와 같은 컴퓨터의 성능을 높이는 것)
- SQL 데이터베이스는 스키마를 통해 저장되기 때문에, Vertical Scaling을 지원한다.
- 추가로, SQL 데이터베이스는 "Sharding"의 개념이 있지만, 특정 제한이 있어 구현하기 쉽지 않음.
Horizontal Scaling
- 물리적 서버가 추가되고, 데이터베이스가 전체적으로 분산하는 방식.
- NoSQL은 특정 구조와 관계가 없기 때문에 Horizontal Scaling을 지원하며, 여러 서버에 쉽게 분리할 수 있음.
SQL & NoSQL 장단점
- SQL & NoSQL의 특징을 알아봤는데, 각 특징을 통해 어떤 장단점이 있고, 각 장단점을 통해 어떤 데이터를 다루는데 적합한지 알아보자.
SQL 장점
- 명확하게 정의된 스키마.
- 데이터 무결성 보장
- 관계를 통해 데이터 중복없이 저장.
SQL 단점
- 스키마로 인해 유연한 구조를 가지지 못함.
- 사전 계획에 움직여야 함.
- 관계를 맺고 있기 때문에, 각 테이블에 포함된 이외의 테이터가 필요한 경우 JOIN은 추가적인 연산이 발생해 비용이 들고 복잡한 쿼리문 작성 필요
- 스키마 & 관계 특징으로 인해 Horizontal Scaling 힘들어, CPU 성능 한계로 인해 처리량과 확장성 측면에 한계가 있음.
NoSQL 장점
- 스키마와 관계가 없기 때문에, 유연한 데이터 구조를 가짐.
- 언제든지 저장된 데이터를 변경 및 새로운 필드를 추가할 수 있음.
- JSON 형식으로 저장되기 때문에, 애플리케이션이 사용하기 쉽고 빠르게 읽어올 수 있음.
- 수직 및 수평 확장이 모두 가능한 구조로 확장성 측면에서 장점을 가짐.
NoSQL 단점
- 유연성 때문에, 데이터의 구조를 결정하기 쉽지 않고 정확한 데이터를 관리하기 힘듬.
- 특히 수정이 발생하는 경우 중복된 데이터가 있는 모든 컬렉션에 수행을 해야함.
SQL은 언제 사용할까?
- 관계를 맺고 있는 데이터나 자주 변경이 이루어지는 어플리케이션을 만들 경우.
- 구조가 변경될 여지가 없고, 명확하고 정확한 데이터가 보장되어야 하는 경우.
- 예시 ) 상품 주문 및 내역 관리 시스템.
NoSQL은 언제 사용할까?
- 정확한 데이터 구조를 만들기 힘들거나 구조가 쉽게 변경 / 확장이 될 수 있는 경우.
- 읽기 처리가 자주 있고, 변경을 자주 하는 경우
- 한번의 변경으로 수 많은 컬렉션을 업데이터를 할 필요가 없는 경우.
- 데이터베이스를 수평적으로 확장하는 경우.(방대한 양의 데이터를 다뤄야 하는 경우)
- 예시 ) SNS 친구 관계 및 피드 데이터.
마무리
- 위 내용은 이론에 기반한 특징과 내용이며, 사실 SQL과 NoSQL은 어플리케이션에 따라 어떻게 설계하냐에 따라 SQL이 가진 단점을 해결(복잡한 쿼리 및 JOIN 연산 비용 등)할 수 있고, NoSQL의 단점(중복된 데이터 등)을 해결해서 사용할 수 있다.
- 그러니 내가 만들고자 하는 시스템에 대한 명확한 정의 및 이해에 기반해 결정하는 것이 중요하다.
'Computer Science > DataBase' 카테고리의 다른 글
[DataBase] 트랜잭션 병행 제어를 위한 락킹 (0) | 2020.04.12 |
---|---|
[DataBase] DB를 지탱하는 트랜잭션 (0) | 2020.03.29 |
[DataBase] DB 성능을 위한 Index (0) | 2020.03.14 |
Comments