본문 바로가기

기술면접대비

SQL vs NoSQL - 관계형 데이터베이스, 비관계형 데이터베이스

데이터베이스를 사용하다 보면 자연스럽게 관계형 데이터베이스와 비관계형 데이터베이스라는 단어를 접하게 된다. 이 두 가지 데이터베이스는 과연 어떤 차이점을 가지고 있기에 분리하여 사용되고 있으며, 또 어떤 상황에서 각기 사용되고 있을까? SQL(관계형 데이터베이스)와 NoSQL(비관계형 데이터베이스)를 비교하며 두 가지의 차이점 및 사용하기에 적절한 상황에 대하여 알아보자.

 

1. SQL(관계형 데이터베이스)

SQL은 Structured Query Language의 약자이다. '구조화된 쿼리 언어'를 뜻한다. 의미에서 알 수 있듯, SQL은 데이터베이스 자체를 나타내는 것이 아닌 어떠한 유형의 데이터베이스와 상호 작용하는 데에 사용하는 쿼리 언어이다. 우리가 흔히 접하는 관계형 데이터베이스라는 의미로 사용되기도 하며, 일반적으로 '데이터베이스'라고 말했을 때에 떠오르는 것들이 대부분 이 관계형 데이터베이스에 속한다. 대표적으로 Oracle, DB2, SQL Server, MySQL, PostgreSQL 등이 있다.

관계형 데이터베이스는 두 가지 특징을 가지고 있다.

  • 데이터는 정해진 규칙을 가진 데이터 스키마를 따라 데이터베이스 테이블에 저장된다.
  • 데이터는 관계를 통하여 연결된 여러 개의 테이블에 분산된다.

SQL을 사용하면 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 저장, 수정, 삭제 및 검색을 할 수 있다.

 

1-1. 관계형 데이터베이스의 장점과 단점

관계형 데이터베이스는 규칙을 통해 목적을 가진 테이블에 정보를 저장한다. 명확한 구조를 가지고 있기 때문에 데이터에 담긴 정보의 내용을 확인하기도 쉽다. 관계형 데이터베이스의 장점과 단점에 대하여 각기 알아보자.

장점

  • 데이터의 무결성을 보장한다.
  • 각 데이터는 중복 없이 한 번만 저장된다.
  • 오랫동안 사용해온 방식이기 때문에 익숙하며, 개발할 때에 별도의 교육이 많이 필요하지 않다.
  • 데이터베이스를 추가하기 전에 유효성 검사를 통해 데이터 품질을 향상시킬 수 있다.
  • VIEW를 이용한 보안 설정이 가능하기 때문에 허가를 받지 않은 사용자들로부터 데이터의 조회, 변경 및 삭제를 막을 수 있다.
  • 관계형 데이터베이스들은 같은 오픈 소스를 공유하는 경우가 많기 때문에 다른 개발 환경에서도 쉽게 적응할 수 있다.

단점

  • 관계를 맺고 있기 때문에 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다. 
  • JOIN이 많고 복잡한 쿼리가 만들어졌을 경우, 수정이 번거롭거나 불가능한 경우가 생긴다.
  • 데이터베이스의 모델링이 개발 전에 완료되어야 하기 때문에 개발 속도를 더디게 만들 수 있다.
  • 수평적 확장이 어렵고, 대체로 수직적 확장만 가능하기 때문에 데이터 처리량 성장에 한계가 있다.
  • 가변성이 있는 데이터의 경우, 테이블에 저장하는 것이 쉽지 않다.

 

그렇다면 이러한 특징을 가지고 있는 관계형 데이터베이스와 비교하여 비관계형 데이터데이스(NoSQL)은 어떤 특징을 가지고 있을까?

 

2. NoSQL(비관계형 데이터베이스)

NoSQL은 기본적으로 SQL과 반대의 접근 방식을 가지고 있기 때문에 붙여진 이름이다. 흔히 No SQL 또는 Not Only SQL을 의미로 가지고 있다. 이름에서도 알 수 있듯, NoSQL과 SQL은 핵심적인 부분에서 큰 차이점을 가지고 있다. NoSQL의 경우, 다른 구조의 데이터를 같은 컬렉션(=테이블)에 추가할 수 있다. SQL이 정해진 스키마를 따르지 않는다면 데이터를 추가할 수 없는 것과는 다르다. NoSQL은 특정 데이터 모델에 대해 특정 목적에 맞추어 구축되는 데이터베이스로서 현대적인 애플리케이션 구축을 위한 유연한 스키마를 갖추고 있다.

SQL과 NoSQL은 데이터를 저장하기 위한 매커니즘이 다르다. SQL에서 쓰이는, 테이블을 나누어 데이터를 저장하는 방식과 달리 데이터들은 일반적으로 동일한 컬렉션에 저장한다. JOIN을 통하여 여러 컬렉션을 사용할 필요가 없다. 실제로 NoSQL에는 JOIN의 개념이 없다. 대신 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부에 속해 있는 데이터를 정확하게 산출하도록 한다.

ex) 쇼핑몰에서 사용자가 어떤 물건을 주문했을 경우 SQL에서는 사용자의 정보는 user, 제품 정보는 product, 주문 정보는 order에 각각 저장하여 조인을 통해 필요한 정보를 각기 불러온다면 NoSQL에서는 order 테이블에 필요한 정보를 한꺼번에 저장한다. 또한 user, product, order 이외의 다른 정보들을 추가하여 저장하는 것 역시 NoSQL에서는 가능하다.

NoSQL 방식은 많이 발생하게 되면 복잡하고 느려지는 JOIN을 사용하지 않아도 된다는 점이 아주 큰 장점이다. 필요한 데이터가 모두 하나의 컬렉션 안에 저장되어 있기 때문이다. 자주 변경되지 않는 데이터일 경우 매우 유용하다.

 

2-1. 비관계형 데이터베이스의 장점과 단점

NoSQL은 SQL과는 또 다른 장점과 단점을 가지고 있다. SQL의 한계를 극복하기 위하여 새롭게 제시된 방법인 만큼 많은 장점을 가지고 있지만, 동시에 SQL이 유용한 상황에서는 그 단점이 두드러지기도 한다.

장점

  • 데이터 모델링이 완료되기 이전에도 테스트 데이터의 조회가 가능하다.
  • 스키마가 없기 때문에 훨씬 더 유연하다. 언제든지 저장한 데이터를 조정할 수 있다.
  • 다양한 가변성이 있는 데이터의 저장이 쉽다.
  • 데이터가 애플리케이션이 필요로 하는 형식으로 저장되기 때문에 데이터를 읽어오는 속도가 빠르다.
  • 수직 및 수평적 확장이 모두 가능하므로 애플리케이션에서 발생하는 모든 읽기, 쓰기 요청의 처리가 가능하다.

단점

  • 유연성 때문에 데이터 구조 결정이 어려울 수 있다.
  • 문서 저장이 단위 요소 수준에서 세밀한 보안을 제공하지 않는다.
  • 익숙하지 않은 방식이기 때문에 추가적인 교육을 필요로 하는 경우가 많다.
  • NoSQL마다 쿼리 언어를 각기 다르게 사용하는 경우가 많아 이식성이 낮다.
  • 데이터베이스의 컬렉션이 다양할 경우, 수정할 때에 모든 컬렉션의 데이터를 수정해야 한다.

 

SQL과 NoSQL은 이렇듯 큰 차이점을 가지고 있으며 이러한 차이점 때문에 SQL과 NoSQL은 각각 적합한 쓰임에 따라 사용되게 되었다. 과연 언제 SQL을, 또 언제 NoSQL을 사용하는 것이 적절할까?

 

3. 관계형 vs 비관계형, 언제 사용하면 좋을까?

SQL과 NoSQL은 둘 다 각자의 특징을 가진 데이터베이스 방식이므로, 정확히 어떤 것이 정답이라고는 말할 수 없다. 개발할 애플리케이션의 특성에 따라서 알맞은 데이터베이스를 선택하여야 한다.

SQL을 사용하는 것이 좋은 경우 NoSQL을 사용하는 것이 좋은 경우

관계를 맺고 있는 데이터가 자주 변경되고 수정되는 경우 혹은 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우 SQL을 사용하는 것이 좋다.

정확한 데이터 구조를 알 수 없거나 변경, 확장될 수 있는 경우, read 처리를 자주 하지만, 데이터를 자주 변경할 필요는 없는 경우, 막대한 양의 데이터를 다뤄야 하여 수평적 확장이 필요한 경우에는 NoSQL이 적절할 가능성이 높다.

 

데이터베이스에 정답은 없다. 개인마다 선호하는 데이터베이스의 형태가 다를 뿐더러 어떤 데이터를 다룰 것인지, 어떤 프로젝트에서 사용될 것인지에 따라서도 적절한 해답이 달라질 수 있다. 위에서 설명한 장단점도 데이터의 양과 개발자가 처한 상황에 따라서 단점이 부각되지 않거나 장점이 극대화될 수 있기 때문이다.

 

참고 블로그 : https://siyoon210.tistory.com/130