정의
데이터를 테이블 형태로 저장하고, 테이블 간의 관계를 정의한다.
SQL(Structured Query Language)을 사용하여 데이터에 접근하고 조작한다.
특징
1)스키마가 엄격
하다.2)ACID
속성예시
MySQL, PostgreSQL, Oracle Database 등
데이터베이스에서 데이터의 구조와 형식이 명확하게 정의되어 있으며, 이 정의에 따라 데이터가 저장되고 관리되어야 한다는 의미
스키마(Schema)
데이터베이스에서 테이블, 열, 데이터 타입, 제약 조건 등 데이터 구조에 대한 정의를 포함하는 구조.
데이터베이스의 설계도 역할을 하며, 데이터가 어떻게 저장되고 상호작용하는지 규명함.
스키마의 특징
사용자
테이블이 이름
, 이메일
, 가입일
, vip유무
등의 열로 구성되어 있다면, 각 열이 데이터 타입과 제약 조건이 명확하게 정의되어 있어야 함.이메일
열이 반드시 이메일 형식이어야 한다거나, 가입일
에 Null 값이 들어올 수 없다는 등의 제약 조건을 설정할 수 있음.스키마의 장단점
장점
데이터 무결성 보장
쿼리 성능 최적화
명확한 데이터 구조로 인한 빠른 이해(이해 용이성)
단점
유연성이 떨어짐
초기 설계시 많은 투자 필요(신중하게 설계 해야 함)
원자성(Atomicity)
돈이 들어와서 잔고의 금액이 늘었다
라는 작업이 성공적으로 마쳤지만, A 계좌에는 돈이 나가서 잔고의 금액이 줄었다
라는 작업은 실패했다고 할 수 있다. 이런 경우, 모두 실패로 간주하여 작업을 하기 전 상황으로 되돌려야 한다.일관성(Consistency)
고립성(독립성)(Isolation)
지속성(Durability)
정의
다양한 데이터 저장 방식(문서, 키-값, 열 기반 등)을 지원하며, 관계형 데이터베이스의 제약을 덜 받음.
특징
1)수평적 확장성(Scale-Out)
예시
MongoDB, Cassandra, Redis 등
데이터베이스를 관리하는 서버의 성능을 올리는 수직적 확장성(Scale-Up)
과 달리,
데이터베이스를 분산하여 접근을 분산하는 방식
🔍 예시
RDB의 수평 확장
데이터베이스에 들어간 데이터를 분리하기 위해 사용자 테이블의 1~2를 관리하는 서버(이하 A)와 3~4를 관리하는 서버(이하 B)로 분할했다고 가정하자.
이후, 테이블을 늘리며영상
이라는 테이블과 두 테이블을 논리적으로 이어주는 관계 테이블을 추가했다고 하자.
또한, 데이터의 양이 많아져 새로운 서버(이하 C)가 추가되었다면, 데이터를 조회할 때 매우 복잡해진다.예를 들어, 운이 좋게 서버 A에 1번 사용자 정보와 이와 관련된 영상 및 관계 정보가 있다면 다행이다. 하지만, 1번 사용자가 A 서버에 영상은 C 서버에 그 관계는 B 서버에 관리 중이라면, 데이터 추출이 매우 복잡해 진다.
이는 RDB 특성상 테이블 간의 관계는 더욱 복잡해 질 수 있으며, 결과적으로 수평 확장을 하기 전 매우 구체적인 설계가 요구된다.
NoSQL의 수평 확장
이처럼 관리하는 NoSQL이 있다고 가정해 보자.
이런 형태의 데이터가 100만개 였을 당시 A 서버로 관리하다가 점차 많아지면서 B, C 서버를 추가하여 각각 100만개 씩 관리하고 있다고 가정해 보자.
데이터가 많아지거나 복잡해 지더라도 데이터 추출에는 전혀 영향을 주지 않는다. 왜냐하면, 사용자 데이터 안에 사용자와 관련된 영상 정보 등이 다 포함되어 있기 때문이다.
이처럼 데이터의 범주를 분할하여 다른 서버(디바이스)로 관리하는 것을 수평적 확장이라고 하며, 여러 테이블의 관계를 관리하는 RDBMS보다 NoSQL이 수평적 확장에 더욱 유리하다.