본문 바로가기
데이터 엔지니어링(DE)/환경과 DB

SQL과 NoSQL 차이점

by kiimy 2021. 7. 14.
728x90

관계형 데이터베이스에서는 데이터를 쓸 때 스키마에 맞춘다면,

반면에 NoSQL에서는 데이터를 읽어올 때 스키마에 따라 읽어옵니다 =schema on read

데이터 저장(Storage)

  • 관계형 데이터베이스는 SQL을 이용해서 데이터를 테이블에 저장합니다. 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야 합니다. SQL

 

  • NoSQL은 위에서 설명된 것처럼, key-value, document, graph, wide-column 형식등의 방식으로 데이터를 저장할 수 있습니다. NoSQL

문서들은 BSON(Binary json JSON형태의 문서를 바이너리 형태로 인코딩한 바이트 문자열)

형태로 저장이 되고 정해진 틀이나 데이터 타입이 없습니다.

따라서 자유롭게 문자, 숫자, 객체, 배열 등을 저장할 수 있습니다.

 

스키마(Schema)

  • SQL을 사용하려면 형식이 고정된 스키마가 필요합니다. 처리하려는 데이터 속성별로 열(column)에 대한 정보가 미리 정해져야 한다는 의미입니다. 스키마는 나중에 변경할 수 있지만, 그럴 경우 전체 데이터베이스를 수정하거나 오프라인(down-time)으로 전환할 필요가 있습니다. SQL

 

  • NoSQL은 스키마의 형태가 보다 동적입니다. 행을 추가할 때 즉시 열을 함께 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다는 장점이 있습니다. NoSQL

SQL 에서는 각 테이블을 생성할 때에, 그리고 각 테이블의 관계들을 사전에 정의할 때에 스키마를 정했지만

NoSQL 에서는 데이터를 읽을 때에 특정 '스키마'에 따라 데이터를 불러와야 하기도 합니다.

 

쿼리(Querying)

  • 쿼리는 데이터베이스에 대해서 정보를 요청하는 행동을 의미합니다. 관계형 데이터베이스는 테이블의 형식과 테이블간의 관계에 맞춰서 데이터를 요청합니다. 그래서 SQL과 같은 구조화된 쿼리 언어를 정보 요청에 사용합니다.

 

  • 비관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있습니다. 그래서 구조화 되지 않은 쿼리 언어로도 데이터 요청이 가능합니다. UnQL(UnStructured Query Language)이라고 말하기도 합니다.

확장성(Scalability)

  • SQL 기반의 관계형 데이터베이스는 보통 수직적으로 확장합니다. (높은 메모리, CPU를 사용하는 확장) 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하기 때문에 고비용이 들게 됩니다. 복수의 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 많이 소모되는 것이 보통입니다.

 

  • NoSQL로 구성된 데이터베이스는 수평적으로 확장됩니다. (보다 값싼 서버 증설, 또는 클라우드 서비스 이용하는 확장) 많은 트래픽을 처리할 수 있도록 NoSQL 데이터베이스를 위한 서버를 추가적으로 구축하는 것이 편합니다. 또한 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅할 수 있어서, 수직적 확장보다 비용 효율성이 높습니다.

SQL 기반의 관계형 데이터베이스를 사용하는 케이스

1. 데이터베이스의 ACID 성질을 준수해야 하는 경우

 

데이터베이스와 상호 작용하는 방식을 정확하게 규정할 수 있기 때문에, 데이터베이스를 통한

데이터 처리 작업시 이상 징후를 줄이고, 데이터베이스의 무결성을 보호할 수 있습니다.

- 전자 상거래, 금융 서비스를 위한 소프트웨어 개발에서는 데이터베이스의 ACID 성질을 잘 준수하는 것이 필수 옵션

 

2. 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우

소프트웨어(프로젝트)의 규모가 많은 서버를 필요로 하지 않고 일관된 데이터를 사용하는 경우

 

  • 관계를 맺고 있는 데이터가 자주 변경(수정)되는 애플리케이션일 경우 (NoSQL에서라면 여러 컬렉션을 모두 수정해줘야만 합니다.)

NoSQL 기반의 비관계형 데이터베이스를 사용하는 케이스

1. 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우

 

대부분의 NoSQL 데이터베이스는 저장할 수 있는 데이터 유형에 제한을 설정하지 않습니다. 필요에 따라서 데이터의

새 유형을 추가할 수 있습니다. 그렇기 때문에 소프트웨어 개발에 정형화 되지 않은 많은 양의 데이터가 필요한 경우, NoSQL을 적용하는 것이 효율적일 수 있습니다.


2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우

 

클라우드 기반으로 데이터베이스 저장소를 구축하면 저렴한 비용의 솔루션을 제공 받을 수 있습니다.

소프트웨어 데이터베이스의 확장성이 중요하다면 여러 데이터 센터에 걸쳐서 많은 번거로움 없이

확장할 수 있는 NoSQL 데이터베이스를 사용하는 것이 좋습니다.


3. 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우

 

NoSQL 데이터베이스의 경우 스키마를 미리 준비할 필요가 없기 때문에 빠르게 개발하는 과정에 매우 유용합니다.

시장에 빠르게 프로토타입을 출시해야 하는 경우가 해당할 수 있습니다. 또한 소프트웨어 버전별로

많은 다운타임(데이터베이스 서버 오프라인) 없이 데이터 구조를 자주 업데이트 해야하는 경우 

==> 데이터 변경은 자주 없는 경우

  • 데이터 중복은 여러 컬렉션과 문서가 (SQL 세계에서 처럼 하나의 테이블에 하나의 레코드가 아니라) 여러 개의 레코드가 변경된 경우 업데이트를 해야 합니다.
  • 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정(update)를 해야 하는 경우 모든 컬렉션에서 수행해야 함을 의미합니다. (SQL 세계에서는 중복된 데이터가 없기 때문에 한번만 수행하면 됩니다.)

, 일일이스키마를 수정해주어야 하는 관계형 데이터베이스 보다는 NoSQL 기반의 비관계형 데이터베이스를

사용하면 좋습니다.

  • 읽기(read)처리를 자주하지만, 데이터를 자주 변경(update)하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 업데이트 할 필요가 없는 경우)

SQL
NO SQL

https://siyoon210.tistory.com/130

728x90

'데이터 엔지니어링(DE) > 환경과 DB' 카테고리의 다른 글

SQLite3 / DBeaver / ElephantSQL / NoSQL  (0) 2021.07.14
Docker  (0) 2021.07.14
git , 가상환경  (0) 2021.07.14

댓글