SQL과 NOSQL의 차이는? (+왜 SQL은 수평적 확장이 어려울까?)

Alex·2025년 3월 5일
0

CS를 공부하자

목록 보기
43/74

SQL이란?

SQL은 구조화 질의 언어(Structured Query Language)로, 관계형 데이터베이스를 관리하고 조작하기 위해 특별히 설계된 표준 프로그래밍 언어다.

쿼리, 업데이트, 데이터 구조 관리 등 다양한 작업을 통해 관계형 데이터베이스 관리 시스템(RDBMS)에 저장된 데이터와 상호 작용하는 데 사용된다.

특징은?

  • 데이터가 구조화된다. 명확한 스키마를 가진 구조화된 데이터를 넣는 데 이상적이다.
  • ACID를 준수한다. 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)을 보장하여 신뢰할 수 있는 트랜잭션을 제공한다.
  • 데이터 중복을 피하기 위해서 관계를 이용한다.

언제 SQL을 사용해야 할까?

1) 데이터가 구조화되어 있고 자주 변경되지 않는다.
2) 여러 행에 대한 트랜잭션과 복잡한 쿼리가 필요하다.
3) 데이터 무결성과 일관성이 중요하다.
4) 예측 가능하고 고정된 스키마가 있다.

NOSQL이란?

NOSQL은 "Not Only SQL"의 약자로, 전통적인 관계형 데이터베이스와 다른 광범위한 데이터베이스 관리 시스템을 의미한다. 비구조화, 반구조화, 구조화된 데이터를 처리할 수 있도록 설계되었으며, SQL 데이터베이스보다 더 큰 유연성과 확장성을 제공한다. 특히 대량의 데이터와 실시간 웹 애플리케이션을 처리하는 데 유용하다.

  • 비정형 데이터는 미리 정해준 데이터 구조 없이 원문으로 존재하는 데이터들을 말한다.

우리가 생각하는 정형 데이터는

"USER" : {
"name":"jeong",
"age": 31"
}

이런식으로 칼럼에 맞춰 데이터가 구조화 돼있다.

반면 비정형 데이터는

위와같은 것들이 존재한다.

특징은?

1) 유연한 스키마, 고정된 스키마 없이 비구조화 반구조화/구조화된 데이터를 처리한다.
2) 수평적 확장성(부하를 분산하기 위해 더 많은 서버 추가)을 위해 설계되었다.
3) 문서, 키-값, 칼럼 패밀리, 그래프 등 다양한 데이터 모델을 지원한다.

언제 NOSQL을 사용해야 할까?

1) 대량의 비구조화 또는 반구조화된 데이터를 다룰 때
2) 일관성보다는 확장성과 성능이 우선순위일때
3) 애플리케이션이 변화하는 데이터 요구사항에 적응하기 위해 유연한 스키마가 필요할 때.
4) 대규모 분산 데이터를 처리할 때

왜 sql은 확장성이 떨어져?

SQL 데이터베이스는 수직 확장이 가능하다. 리소스(CPU, 메모리) 단일 서버에 추가되는 구조다. 이러한 확장 방식은 택한데에는 다음과 같은 이유가 있다.

1) ACID를 지키기 위해서다. ACID(원자성, 일관성, 독립성, 지속성)은 데이터 무결성을 보장하는 속성들이다. 리소스가 수평적으로 확장되면, 이러한 데이터의 일관성을 지키기 어렵다.

2) 트랜잭션 관리 : 데이터 무결성과 일관성을 지키기 위해서 SQL 데이터베이스는 트랜잭션 관리 매커니즘을 활용한다. 분산 데이터베이스 환경에서는 여러 노드에 걸쳐서 동시 트랜잭션을 관리하는 것은 관리가 복잡해지고 이로 인한 리소스를 사용하게 되면서 성능에 무리를 줄 수 있다.

3) 스키마 경직성 : SQL은 경직된 스키마 구조를 갖는다. 한대의 서버 환경에서는 스키마 경직성을 지키도록 하는 게 간단하지만, 분산 시스템에서는 스키마 경직성을 지키게끔하는 게 쉽지 않다. 각 노드마다 스키마 버전이 다를 수 있으므로, 관리 오버헤드가 증가하고 잠재적으로 추가적인 데이터 일관성 문제가 발생할 수 있다.

참고자료

SQL vs NoSQL 파헤치기: 당신의 프로젝트에 완벽한 데이터베이스는?
SQL 대 NoSQL 데이터베이스 이해

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글