[DB] SQL/NoSQL, 스키마

mingsso·2025년 6월 29일

CS

목록 보기
17/37

1️⃣ 관계형 데이터베이스 (RDBMS, SQL)

  • 고정된 행(row)와 열(column)로 구성된 테이블에 데이터를 저장함
  • 테이블의 구조와 데이터 타입 등을 사전에 정의하며, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있음
  • 테이블의 관계가 구조화된 데이터의 모음이기 때문에, 구조화된 쿼리 언어인 SQL(Structured Query Language)을 사용해서 데이터를 처리할 수 있음
    → 즉, SQL은 관계형 데이터베이스 전용 프로그래밍 언어이기 때문에 관계형 데이터베이스를 SQL이라고 부르기도 함
  • 대표적인 관계형 데이터베이스 시스템(RDBMS)은 MySQL, Oracle, SQLite, MariaDB, PostgresSQL이 있음

장점

  • 명확하게 정의된 스키마를 가짐
  • 데이터의 무결성을 보장함 → 관계를 가지고 있어, 각 데이터가 중복없이 저장되게 함

단점

  • 유연성이 떨어짐, 데이터 스키마를 사전에 계획하고 알려야 함
  • 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어 질 수 있음
  • 대체로 수직적 확장(Scale Up)만 가능함

💡 수직적 확장(Scale Up)?

  • 서버에 CPU나 RAM 등을 추가하거나 고성능의 부품, 서버로 교환하는 방법
    즉, 1의 처리 능력을 가진 서버 1대를 7의 처리 능력을 가진 서버로 그 자체 처리 능력을 향상시킴
  • 서버 1대로 모든 부하가 집중될 수 있음
  • 1대의 서버에서 모든 데이터를 처리하므로 데이터 갱신이 빈번하게 일어나는 DB 서버에 적합함 (빈번하게 갱신이 일어나면 여러 대의 서버에서는 정합성 유지가 어렵기 때문)
  • 주로 RDBMS에서 사용

💡 수평적 확장(Scale Out)?

  • 접속된 서버를 여러 대 추가하여 처리 능력을 향상하는 방법
    즉, 1의 처리 능력을 가진 서버에 동일한 서버 6대를 더 추가하여, 총 7의 처리 능력을 만드는 것
  • 서버 1대가 장애로 다운되더라도 다른 서버로 서비스 제공이 가능하다는 장점
  • 갱신 데이터의 정합성 유지가 어렵다는 단점



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

  • 관계형 데이터베이스를 뺀 나머지 유형을 총칭
  • 관계형 데이터베이스를 SQL이라고 칭하는 것과 마찬가지로, 비관계형 데이터베이스를 칭할 때 NoSQL이라고 함
  • NoSQL은 유연한 스키마를 제공하며, 대량의 데이터와 높은 사용자 부하에서도 손쉽게 확장이 가능함
  • 관계형 데이터베이스에서는 데이터를 입력할 때 스키마에 맞게 입력해야 하지만, NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어 옴(= schema on read 방식). 즉, 스키마 확인을 데이터를 읽는 시점에서 함

장점

  • 스키마가 없어서 유연함, 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있음
  • 데이터베이스가 애플리케이션이 필요로 하는 형식으로 저장되므로, 데이터를 읽어오는 속도가 빨라짐
  • 수직 및 수평 확장이 가능해서, 애플리케이션이 발생시키는 모든 읽기/쓰기 요청을 처리 가능함

단점

  • 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정 시 모든 컬렉션에서 수행해야 함
  • 스키마가 존재하지 않기 때문에 명확한 데이터 구조를 보장하지 않아, 데이터 구조 결정이 어려울 수 있음



3️⃣ NoSQL 데이터베이스 유형

Key-Value 타입

  • Key-Value의 데이터 쌍을 배열의 형태로 저장함
    → 구조를 정하지 않고 Key만 겹치지 않게 넣으면 되기 때문에 유연하게 데이터를 넣을 수 있음
  • Redis, Dynamo 등이 대표적인 Key-Value 형식의 데이터베이스

문서형(Document) 데이터베이스

  • 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스(JSON 또는 BSON 형식)
  • 각각의 문서는 하나의 속성에 대한 데이터를 가지고 있고, 컬렉션이라고 하는 그룹으로 묶어서 관리함
  • 스키마가 지속적으로 변경되는 애플리케이션에 적합함
  • 대표적인 문서형 데이터베이스에는 MongoDB, Firebase DB가 있음

Wide-Column Store 데이터베이스

  • 데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리하는 데이터베이스
  • 각 열에는 key-value 형식으로 데이터가 저장되고, 컬럼 패밀리라고 하는 열의 집합체 단위로 데이터를 처리할 수 있음
  • 하나의 행에 많은 열을 포함할 수 있기 때문에 유연성이 높음
  • 데이터 처리에 필요한 열을 유연하게 선택할 수 있다는 점에서, 규모가 큰 데이터 분석에 주로 사용되는 데이터베이스 형식임
  • 대표적인 wide-column 데이터베이스에는 Cassandra, HBase가 있음

그래프(Graph) 데이터베이스

  • 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 데이터베이스
  • 노드(node)에 속성(entity)별로 데이터를 저장하며, 각 노드 간 관계는 선(edge)로 표현함
  • 대표적인 그래프 데이터베이스에는 Neo4J, InfiniteGraph가 있음



3️⃣ SQL vs NoSQL

SQL 데이터베이스 사용이 더 좋은 경우

  • 데이터베이스의 ACID 성질을 준수해야 하는 경우
    • SQL을 사용하면 데이터베이스와 상호작용하는 방식을 정확하게 규정할 수 있기 때문에, 데이터베이스에서 데이터를 처리할 때 발생할 수 있는 예외 상황을 줄이고 데이터베이스의 무결성을 보호할 수 있음
    • 전자 상거래를 비롯한 모든 금융 서비스를 위한 소프트웨어 개발에서는 반드시 데이터베이스의 ACID 성질을 준수해야 함
  • 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
    • 프로젝트의 규모가 많은 서버를 필요로 하지 않고 일관된 데이터를 사용하는 경우, 관계형 데이터베이스를 사용하는 경우가 많음

NoSQL 데이터베이스 사용이 더 좋은 경우

  • 데이터의 구조가 거의/전혀 없는 대용량의 데이터를 저장하는 경우
    정확한 데이터 구조를 알 수 없거나 변경/확장될 수 있는 경우

    - 소프트웨어 개발에 정형화되지 않은 많은 양의 데이터가 필요한 경우, NoSQL을 사용하는 게 효율적임
  • 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우
    • NoSQL 데이터베이스의 경우 스키마를 미리 준비할 필요가 없기 때문에 빠르게 개발하는 과정에 매우 유리함
  • DB에 데이터를 쓰는 양이 읽는 양보다 많은 경우, RDBMS는 성능이 저하됨
    • 초당 데이터가 수십만개씩 써지는 SNS의 경우 NoSQL이 더 적합함



4️⃣ 스키마(Schema)

  • 데이터베이스의 구조(개체, 속성, 관계)와 제약조건에 대한 정의로, 메타 데이터라고도 함
CREATE TABLE Student (
  student_id INT PRIMARY KEY,
  name VARCHAR(50),
  age INT,
  major VARCHAR(50)
);
-- "Student"라는 테이블을 만들겠다는 명령
-- 이 명령이 실행되면 DBMS는 내부적으로 '스키마'에 이 구조를 저장해둠
  • DBMS가 주어진 설정에 따라 데이터베이스 스키마를 생성하고, 데이터베이스 사용자가 자료를 저장/조회/삭제/변경할 때, DBMS는 자신이 생성한 데이터베이스 스키마를 참조하여 명령을 수행함






참고자료

https://hanamon.kr/데이터베이스-sql-vs-nosql/
https://newtoner.tistory.com/23
https://stackoverflow.com/questions/62010368/what-exactly-is-a-wide-column-store
https://www.oracle.com/kr/autonomous-database/what-is-graph-database/
https://gyoogle.dev/blog/computer-science/data-base/SQL & NOSQL.html
https://velog.io/@eunhye_/DB-Scale-up과-Scale-out
https://datacookbook.kr/90
https://www.fun-coding.org/post/mongodb_basic1.html#gsc.tab=0
https://inpa.tistory.com/entry/DB-📚-스키마-정리#

profile
🐥👩‍💻💰

0개의 댓글