Skip to content

Latest commit

 

History

History
64 lines (45 loc) · 5.17 KB

박찬호.md

File metadata and controls

64 lines (45 loc) · 5.17 KB

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

  1. 개요

SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)에 데이터를 생성, 검색, 업데이트, 삭제(CRUD)하기 위한 표준 언어이다. 관계형 데이터베이스는 테이블 구조를 가지며, 각 테이블은 고유한 키를 통해 다른 테이블과 연결된다.

  • 구조 SQL은 테이블의 집합으로 데이터를 저장하며, 테이블 간에는 릴레이션(관계)이 존재한다. 테이블은 행(Row)과 열(Column)으로 이루어져 있으며, 데이터는 이 행과 열의 교차점에 위치한 셀에 저장된다.
  • 스키마 SQL은 명확한 스키마를 필요로 한다. 데이터 필드의 이름과 타입이 미리 정의되어 있어야 하며, 스키마를 변경하려면 복잡한 절차를 거쳐야 한다.
  • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
  • 데이터는 관계를 통해 여러 테이블에 분산된다.
  • 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다. 즉, 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가가 가능하다.
  1. 장점
  • ACID 트랜잭션(원자성, 일관성, 고립성, 지속성) 지원: 각 트랜잭션이 데이터베이스에 안전하게 처리되도록 보장한다. 이는 금융 시스템과 같이 신뢰성이 필요한 시스템에서 중요하다.
  • 스키마에 기반한 데이터 구조: 데이터는 잘 정의된 스키마에 따라 저장된다. 이 스키마는 각 필드의 이름과 데이터 타입을 정의한다.
  • 복잡한 쿼리 가능: SQL의 강력한 쿼리 언어로 인해 복잡한 쿼리와 테이블 간의 다양한 연산이 가능하다.
  1. 단점
  • 확장성의 제한: 대규모 데이터를 처리하는 경우, SQL 데이터베이스는 수직 확장(같은 서버의 업그레이드)만 가능하다.
  • 고정된 스키마: 스키마 변경이 필요할 때마다 전체 시스템을 중단해야 하는 경우가 많다.

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

  1. 개요

NoSQL(Not Only SQL) 데이터베이스는 관계형 모델을 따르지 않는 데이터베이스로, 스키마가 없거나 느슨하다. 이는 빅데이터와 실시간 웹 애플리케이션과 같은 현대 애플리케이션의 요구사항을 충족하기 위해 설계되었다.

  • 구조 NoSQL의 구조는 다양하며, Key-Value Store, Document Store, Column Store, Graph Database 등이 있다. 이들 각각은 특정 유형의 데이터나 사용 사례에 대해 최적화되어 있다.
  • 스키마 NoSQL은 스키마가 없거나 느슨하다. 이는 데이터의 형태가 자유롭게 변할 수 있음을 의미하며, 이러한 유연성은 빠른 개발과 변경에 유리하다.
  • 트랜잭션 NoSQL은 일반적으로 BASE(기본적으로 사용 가능, 부분적으로 일관성, 마지막에는 우수성) 특성을 가진다. 이는 데이터의 일관성을 완벽히 보장하기 보다는 가용성과 네트워크 분할 허용성을 중요시하는 방식이다.
  • NoSQL에서는 레코드를 문서(documents)라고 부른다.
    • 문서(documents)는 Json과 비슷한 형태로 가지고 있다. 관계형 데이터베이스처럼 여러 테이블에 나누어담지 않고, 관련 데이터를 동일한 '컬렉션'에 넣는다.
  1. 장점
  • 유연한 스키마: 필요에 따라 데이터 구조를 쉽게 변경할 수 있다.
  • 수평 확장 가능: NoSQL 데이터베이스는 분산 시스템으로 설계되어 있어, 데이터베이스를 여러 서버에 분산시킴으로써 수평 확장이 가능하다.
  • 다양한 데이터 타입 처리: Key-Value, Wide Column, Graph, Document 등 다양한 유형의 데이터를 처리할 수 있다.
  1. 단점
  • 표준화가 부족하다: NoSQL 데이터베이스 사이에 공통된 표준이나 쿼리 언어가 없다.
  • 일관성을 희생하다: 대부분의 NoSQL 데이터베이스는 고가용성과 파티션 허용성을 위해 일관성을 희생한다(CAP 이론 참조).

SQL vs NoSQL: 어떤 상황에서 사용할까?

사용 사례에 따라 SQL과 NoSQL 중 어떤 데이터베이스를 선택할지 결정한다. 복잡한 쿼리를 자주 사용하거나 ACID 트랜잭션을 요구하는 상황에서는 SQL이 적합하다. 반면에 대량의 데이터를 빠르게 처리하거나 확장성이 중요한 경우 NoSQL을 고려해볼 수 있다.

확장 개념

두 데이터베이스를 비교할 때 중요한 Scaling 개념도 존재한다.

데이터베이스 서버의 확장성은 '수직적' 확장과 '수평적' 확장으로 나누어진다.

  • 수직적 확장 : 단순히 데이터베이스 서버의 성능을 향상시키는 것 (ex. CPU 업그레이드)
  • 수평적 확장 : 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨을 의미 (하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동)

데이터 저장 방식으로 인해 SQL 데이터베이스는 일반적으로 수직적 확장만 지원함

수평적 확장은 NoSQL 데이터베이스에서만 가능