SQL vs NOSQL

병용·2023년 9월 30일
0

note

목록 보기
4/6
post-thumbnail

💬 오늘의 주제

안녕하세요!😄 오늘은 SQL과 NOSQL의 차이에 대해 이야기해보려 합니다.

✋ 거기 잠깐!

본격적으로 SQL과 NOSQL에 대해 이야기 하기 전에 알아두어야 할 개념들에 대해 먼저 알아볼까요?

🕐 Database와 DBMS

데이터베이스는 구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 컴퓨터 시스템에 전자적으로 저장됩니다. 데이터베이스는 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 제어됩니다. 연결된 애플리케이션과 함께 데이터와 DBMS를 하나로 묶어 데이터베이스 시스템이라고 하며 단축하여 데이터베이스라고도 합니다.
-ORACLE

데이터데이스는 쉽게 말해 데이터들의 모음이고 DBMS(Database Management System)는 이러한 데이터베이스를 관리하고 운영하는 소프트웨어라고 할 수 있습니다. 그리고 이러한 데이터베이스와 데이터베이스 관리 시스템을 통칭해 데이터베이스라고 부르기도 합니다. DBMS의 한 종류인 Oracle을 관계형 데이터베이스다.라고들 이야기하는 이유이죠!

🕑 RDB와 RDBMS

RDB(Relational Database)는 행(row)과 열(column) 그리고 거기에 대응하는 값을 가진 하나 이상의 테이블로 구성되어 있고, 각 테이블은 서로 관계를 가질 수 있는 데이터베이스입니다. RDBMS는 DBMS 중 이러한 관계형 데이터베이스를 관리/운영하는 소프트웨어를 뜻하는 것이죠.

🕒 수직적 확장과 수평젹 확장

데이터베이스를 확장할 때는 수직적 또는 수평적 방식을 통해 진행하게 됩니다.

수직적 확장이란, 하나의 데이터베이스 서버의 성능을 향상시키는 것으로 하드웨어의 업그레이드 또는 DBMS의 성능을 최적화하는 것을 의미합니다.

이는 데이터의 일관성 유지가 용이하고 비교적 간단한 작업을 통해 이루어지지만 높은 비용과 성능 향상에 한계 등을 겪을 수 있습니다.

수평적 확장은 서버를 증설해 데이터와 작업 부하를 분산시키는 방식으로 대규모 데이터와 부하가 높은 상황에서 잘 작동하지만, 데이터베이스 간 여러 동기화 문제를 해결해야 하는 등 구현과 관리가 어렵다는 단점이 있습니다.

💥 SQL과 NOSQL

자 이제 진짜 SQL과 NOSQL에 대해 이야기해볼 차례입니다!

🕓 SQL

SQL은 Structured Query Language의 약자로 우리말로는 구조적 질의 언어라고 부릅니다. 위에서 이야기 했던 RDBMS에서 데이터를 관리하기 위해 설계한 특수 목적의 프로그래밍 언어로 데이터의 검색과 관리, 데이터베이스 스키마 생성과 수정 등이 필요할 때, SQL 쿼리문을 작성하여 이를 수행할 수 있습니다.

SQL이 RDBMS에서 사용되는 쿼리 언어이다 보니 주로 SQL과 NOSQL이라고 하면 관계형 데이터베이스와 비관계형 데이터베이스를 비교할 때 많이 사용됩니다. RDB와 RDBMS를 묶어 관계형 데이터베이스라고 하는 것처럼 SQL도 한데 묶어 사용하는 느낌이네요.

그렇다는건..!

이번 글도 관계형 데이터베이스와 비관계형 데이터베이스를 비교하는 글이란 소리죠 ㅎㅎ

🕔 RDB 좀만 더 알아보기

관계형 데이터베이스는 테이블, 열, 행, 관계 등을 포함한 스키마 통해 데이터베이스의 구조를 정의합니다. 스키마는 사전에 정의되어야 하고, 쉽게 변경할 수 없습니다.

이를 통해 관계형 데이터베이스는 데이터 무결성을 보장하는데, 여기서 데이터 무결성이란 데이터의 정확성, 일관성, 유효성을 보장하는 것을 의미합니다.

데이터의 일관성을 보장하는 것은 데이터베이스의 신뢰성과 시스템 안정성 보장 등 많은 이점을 주지만 데이터베이스 확장 시 수평적 확장에 어려움을 겪는 이유가 됩니다.

대규모 데이터를 효율적으로 저장하고 조회하기 위해서는 수직 확장보다는 수평 확장이 더 효율적이고 텍스트, 이미지, 동영상 등 비정형 데이터를 효율적으로 처리하기에 관계형 데이터베이스의 데이터 모델은 한계가 있었습니다.

🕕 NOSQL

NOSQL은 Not Only SQL의 약자로 이름에서 알 수 있듯, SQL외에도 다른 많은 장점들을 가지고 있는 데이터베이스입니다.

위에서 이야기한 관계형 데이터베이스의 한계를 극복하기 위해 문서 지향, 키-값, 컬럼 지향, 그래프 등 다양한 유형의 데이터 저장 및 검색에 특화되어 있고, 분산 환경에서의 데이터 처리를 더욱 빠르게 할 수 있도록 설계되었습니다.

위에서 데이터의 일관성을 보장하는 것이 수평적 확장에 어려움을 준다고 했었는데, 그럼 NOSQL은 데이터 무결성을 보장하지 않느냐 하면 그렇지는 않습니다. 다만, 최종적 일관성이라는 모델을 사용하여 최종적으로는 데이터의 일관성을 보장하지만 그 과정에서의 일시적 불일치 상태를 허용하고 대규모 분산처리를 가능하게 합니다.

🕖 SQL vs NOSQL

SQLNOSQL
구조고정된 스키마와 테이블 기반융통성 있는 스키마와 다양한 데이터 모델
쿼리언어SQL 사용DBMS 별 별도의 쿼리언어 또는 API 사용
일관성ACID 원칙 하 높은 수준의 일관성최종적 일관성
확장성주로 수직적 확장수평적 확장
데이터 중복정규화를 통한 중복 방지일부 데이터 중복 가능

위는 SQL과 NOSQL을 비교한 표입니다.

대부분은 위에서 언듭했던 내용인데요. 차례로 다시 한번 살펴보겠습니다.

우선 구조입니다. 관계형 데이터베이스의 구조는 스키마를 통해 사전에 정의되며 행과 열로 구성된 테이블을 하나 이상 가지게 됩니다. 그에 반해 비관계형 데이터베이스는 RDB에 비해 융통성 있는 스키마를 가지고 아예 스키마가 존재하지 않는 경우도 있습니다. 또한 키-값,그래프 등 다양한 형태의 데이터 모델을 가지게 됩니다.

다음은 쿼리언어입니다. 관계형 데이터베이스는 SQL을 사용하고 비관계형 데이터베이스는 각각의 DBMS마다 다른 쿼리언어를 사용합니다.

SQL은 ACID(Atomicity, Consistency, Isolation, Durability)원칙에 따라 높은 수준의 데이터 일관성을 제공하고 NOSQL은 최종적 일관성을 제공하는 경우가 많습니다.

위와 같은 이유로 관계형 데이터데이스는 확장 시 주로 수직적 확장을 택하고, 비관계형 데이터베이스는 수평적 확장을 택하게 됩니다.

또한 관계형 데이터베이스는 정규화를 통해 데이터의 중복을 방지하지만 NOSQL에서는 성능과 읽기속도 개선을 위해 데이터의 중복을 허용하기도 합니다.

SQL의 한계를 극복하고자 나온 NOSQL이지만, 마냥 NOSQL이 좋고 SQL이 나쁘다. NOSQL을 사용해야 한다.라고는 할 수 없습니다. 그럼 어떨때 SQL을, 또 어떨때 NOSQL을 사용해야 할까요? 그건 적용되는 어플리케이션 별 특징에 달려있습니다.

정형화된 데이터 구조를 가지고 복잡한 쿼리가 많이 사용되는 어플리케이션, 금융권 등 트랜젝션이 중요하고 높은 수준의 일관성을 요구하는 어플리케이션에서는 관계형 데이터 베이스가 적합합니다.

비관계형 데이터베이스는 비정형 또는 반정형의 데이터 구조를 가지고 데이터 모델링에 유연성이 필요한 경우, 대규모 트래픽과 큰 규모의 데이터를 처리해야 하고 이를 위해 수평적 확장이 요구될 수 있는 경우, 읽기/쓰기 등 빠른 성능이 필요한 어플리케이션의 경우 적합할 수 있습니다.

위와 같이 어플리케이션의 요구사항과 어플리케이션이 다루는 데이터의 특성에 따라 데이터베이스를 선택할 수 있습니다. 또한, 하나의 어플리케이션에서 여러 데이터베이스를 적용하는 경우도 많으니 어플리케이션 내에서도 특정 부분의 데이터는 별도의 데이터베이스에 저장하는 식도 고려해 볼 수 있겠네요.

여기까지 SQL과 NOSQL에 대해 이야기해 보았습니다.
감사합니다 :)

💛 Reference

profile
횡설수설 정리노트

0개의 댓글