관리 메뉴

나만을 위한 블로그

NoSQL이란? SQL이란? 둘의 차이는 무엇인가? 본문

개인 공부

NoSQL이란? SQL이란? 둘의 차이는 무엇인가?

참깨빵위에참깨빵_ 2020. 12. 3. 00:34
728x90
반응형

내가 주로 사용하는 DB는 MySQL, MariaDB 2가지다.

DB 쪽을 공부하다가 우연히 NoSQL이라는 키워드를 접해서 이건 내가 써오던 DB들과 뭐가 다른지 알아보려고 한다.

 

먼저 NoSQL의 No는 뭘 뜻하는 걸까? 구글링하니 몽고 DB 사이트가 나와서 이곳의 내용을 확인해봤다.

 

NoSQL(일명 SQL뿐 아니라) DB는 테이블 형식이 아니며 관계형 테이블과 다르게 데이터를 저장한다. NoSQL DB는 데이터 모델에 따라 다양한 유형으로 제공된다. 주요 유형은 문서, 키밸류, 와이드 컬럼 및 그래프다. 유연한 스키마를 제공하고 많은 양의 데이터와 높은 사용자 부하로 쉽게 확장할 수 있다...(중략)...사람들이 NoSQL DB란 용어를 쓸 때, 이는 일반적으로 비관계형 데이터베이스를 지칭한다. 혹자는 NoSQL이 non-SQL을 의미한다고 말한다. 어느 쪽이든 대부분은 NoSQL DB가 관계형 테이블이 아닌 형식으로 데이터를 저장하는 데이터베이스라는 데 동의한다. NoSQL 데이터베이스는 관계 데이터를 저장할 수 있으며 관계형 데이터베이스와 다르게 저장할 수 있다...(중략)...NoSQL 데이터 모델을 사용하면 관련 데이터가 단일 데이터 구조 내에 중첩될 수 있다.

 

NoSQL에서 No는 Not-Only의 의미였다. 그래서 "SQL 뿐만 아니라" 라고 해석된 것이었다.

 

그 전에 NoSQL을 알려면 먼저 SQL을 알아야 할 것 같다. SQL이란 뭘까?

SQL은 Structured Query Language의 약어로, 직역하면 구조적 쿼리 언어라는 뜻이다.

즉, RDBMS의 데이터를 쿼리(질의)하는 것을 목적으로 설계된 프로그래밍 언어다. 여기서 데이터 쿼리란 DB 내 자료 검색, 스키마 생성 및 수정, DB 객체 접근 조정 등의 관리를 말한다.

 

영문 위키백과에서 말하는 SQL의 역사는 1970년대 초 Edgar F. Codd가 관계형 모델을 배운 후 Donald D. Chamberlin과 Raymond F. Boyce가 IBM에서 최초로 개발한 것을 시작으로 한다.

처음에는 SEQUEL(Structured English Query Language)이라고 불린 이것은 원래 IBM의 준 관계형 데이터베이스 관리 시스템인 System R에 저장된 데이터를 조작, 검색하는 걸 목적으로 설계됐다. 이후 1973년 SEQUEL 작업이 시작됐지만 SEQUEL이 영국 모 회사의 상표였기 때문에, SEQUEL이란 약어는 나중에 SQL로 변경됐다.

이 SQL은 Relational Software 주식회사가 1970년대 후반에 미 해군과 Central Intelligence에 판매하려고 자체 SQL 기반 RDBMS를 개발하는 데 이용됐다. 이후 1979년 Relational Software 주식회사는 VAX 컴퓨터를 위한 최초의 상용 SQL 구현인 Oracle V2를 도입했다. 그 후 1986 년까지 ANSI 및 ISO 표준 그룹은 공식적으로 표준 "데이터베이스 언어 SQL"언어 정의를 채택했다.

 

SQL은 아래를 포함한 여러 요소로 세분화된다.

  • 문(Statements)과 쿼리의 구성 요소인 절(Clauses)
  • 스칼라 값 또는 데이터 행렬로 구성된 테이블을 만들 수 있는 표현식
  • SQL 3값 논리(3VL, 참 / 거짓 / 알 수 없음) 또는 boolean truth values로 평가할 수 있는 조건을 지정하고, 명령문 및 쿼리 효과를 제한하거나 프로그램 흐름을 변경하는 데 사용되는 조건자
  • 특정 기준에 따라 데이터를 검색하는 쿼리(SQL의 중요 요소)
  • 중요하지 않은 공백은 일반적으로 SQL문, 쿼리에서 무시되므로 가독성을 위해 SQL 코드 형식을 쉽게 지정할 수 있다
  • 스키마, 데이터에 지속적으로 영향을 주거나 트랜잭션, 프로그램 흐름, 연결, 세션, 진단(diagnostics)을 제어할 수 있는 문(Statements)
    • SQL 문에는 세미콜론(;)문 종결자가 포함된다. 모든 플랫폼에서 필요하진 않지만 SQL 문법의 표준으로 정의된다

그럼 NoSQL은 정확히 뭘까?

NoSQL은 기존의 RDBMS가 가진 특성뿐 아니라 다른 특성들을 부가적으로 지원한다는 것을 의미한다. 그래서 SQL 뿐 아니라 라는 NoSQL이라는 이름이 붙은 것 같다.

 

NoSQL이란 용어는 1998년 Carlo Strozzi가 자신의 오픈소스 관계형 데이터베이스의 이름을 지정하기 위해 처음 사용했다.

이후 Johan Oskarsson이란 사람이 2009년 초에 오픈 소스 분산, 비관계형 DB를 논의하는 이벤트를 조직하면서 NoSQL이란 용어를 다시 도입했다.

이 때부터 기존 RDBMS의 주요 특성을 보장하는 ACID(Atomic, Consistency, Integrity, Durability) 특성을 제공하지 않지만, 뛰어난 확장성이나 성능 따위의 특성을 갖는 여러 비관계형, 분산 DB들이 등장했다. 이 DB들을 지칭하는 용어로 NoSQL이 보편적으로 쓰였다.

 

그 후 인터넷의 확장으로 인한 인터넷의 활성화, 페이스북 등의 SNS 서비스가 등장하면서 관계형 데이터나 정형 데이터가 아닌 비정형 데이터를 좀 더 쉽게 저장할 수 있는 DB들이 관심을 받게 되었다. 이 기술이 점점 발전하면서 NoSQL DB가 각광받게 되었다.

 

그럼 NoSQL의 종류에는 어떤 것들이 있을까? 다음은 영문 위키백과에 표시된 저장되는 데이터의 구조(Data Model)별 NoSQL의 기본 분류다.

 

  • Wide Column : Accumulo, Cassandra, Scylla, HBase
  • Document : Apache Couch DB, ArangoDB, BaseX, Clusterpoint, Couchbase, MongoDB, OrientDB 등
  • Key-Value : Aerospike, Apache Ignite, ArangoDB, Dynamo, Oracle NoSQL DB, OrientDB, Redis, SciDB 등
  • Graph : Neo4J, OrientDB, AllegroGraph, ArangoDB 등

더 자세한 분류는 Stephen Yen의 분류를 기반으로 나눠진다.

 

 

 

Wide Column은 확장 가능한 레코드 저장소라고도 해석되며, 테이블과 행렬을 사용하지만 관계형 DB와 달리 컬럼의 이름과 형식은 같은 테이블의 행마다 다를 수 있는 NoSQL의 한 유형이다. 2차원 키밸류 저장소로 해석될 수 있다.

 

Document는 문서 지향 데이터베이스란 뜻으로, 반 구조화된 데이터라고도 하는 문서 지향 정보를 저장, 검색, 관리하기 위해 설계된 데이터 저장 시스템이다. 이것의 하위 항목으로 XML 문서 작업에 최적화된 XML 데이터베이스가 있다.

이것의 중심 개념은 '문서'다. 이 정의의 세부 사항은 DB마다 다르지만, 모두 문서가 일부 표준 형식 또는 인코딩으로 데이터(또는 정보)를 캡슐화하고 인코딩한다고 가정한다. 인코딩에는 XML, YAML, JSON, BSON 같은 이진 형식이 포함된다. 문서는 해당 문서를 나타내는 고유 키를 통해 DB에서 처리된다.

 

Key-Value는 기본적인 데이터 모델로 연관 배열(맵 or 딕셔너리라고도 함)을 쓴다. 이 모델에서 데이터는 키밸류 쌍의 모음으로 표시되기 때문에, 각 키는 컬렉션에서 가능한 최대 1번만 표시된다. 이 모델은 가장 단순한 모델 중 하나고 더 풍부한 데이터 모델이 이 모델을 확장해서 구현될 수 있다. 또한 Key-Value 모델은 딕셔너리 순으로 키를 유지하는 개별적이고 정렬된 모델로 확장될 수 있다. 이 확장은 선택적 키 범위를 효율적으로 검색할 수 있다는 점에서 계산적인 면에서 강한 장점을 보인다. 이것을 응용해 만들어진 하드웨어는 RAM, SSD, HDD 등이 있다.

 

Graph는 한정된 수의 관계로 연결된 요소로 구성된 그래프를 말한다. 관계가 잘 표현되는 데이터를 위해 설계됐다. 데이터의 예로는 사회적 관계, 대중교통 링크, 로드맵, 네트워크 토폴로지 등이 있다.

 

이 4가지 외에도 Object Database, Tabular, Tuple store 등의 분류 기준이 있으며 DB 종류도 다양하다.

이런 특징 때문에 NoSQL을 사용할 거라면 자신의 서비스의 특성을 파악하고, 이 서비스에 필요한 DB를 선택하는 것이 중요할 것 같다.

하지만 어지간한 개발은 MySQL이나 MariaDB로도 충분하다고 생각한다.

반응형
Comments