RDBMS와 NoSQL에 대해

RDBMS와 NoSQL에 대해

NoSQL의 정의

NoSQL은 비관계형 데이터베이스 유형을 가리키며 이 데이터베이스는 관계형 테이블과는 다른 형식으로 데이터를 저장한다. 그러나 NoSQL 데이터베이스는 언어마다 관습화된 API, 선언적 구조의 쿼리 언어, 쿼리별 언어를 사용하여 질의할 수 있는데, 이 데이터베이스가 not only SQL 데이터베이스라고 불리는 이유가 바로 이것이죠.

NoSQL 데이터베이스는 어디에 사용될까?

높은 확장성과 가용성이 주요 장점인 NoSQL 데이터베이스는 실시간 웹 애플리케이션 및 빅 데이터에 널리 사용된다.

변화하는 요구 사항에 빠르게 적응함으로써 민첩한 개발 패러다임에 자연스럽게 활용되는 이점 때문에 개발자들 역시 NoSQL을 선호한다. NoSQL 데이터베이스를 사용하면 데이터는 보다 직관적이고 이해하기 쉬운 방식 또는 애플리케이션이 사용하는 것에 가까운 방식으로 저장된다. NoSQL 스타일의 API를 사용하면 저장 또는 검색 시 데이터 변환의 필요성이 줄어들고, 또한 NoSQL 데이터베이스는 다운타임이 없는 클라우드의 이점을 완전히 누릴 수 있다.

NoSQL의 장점

  1. 스키마 유연성
    • 고정된 스키마가 없으며, 데이터 구조를 동적으로 변경 가능
  2. 수평적 확장성
    • 데이터가 증가할 때 수평적 확장을 통해 성능을 유지하고 쉽게 노드를 추가하여 데이터 분산 저장 가능
  3. 다양한 데이터 모델
    • 키-값 저장소, 문서 저장소, 열 기반 저장소, 그래프 데이터베이스 등 다양한 모델 지원
  4. 고성능
    • 높은 쓰기 및 읽기 성능을 제공하여 대규모 데이터 처리에 적합
  5. 복제 및 분산
    • 데이터 복제와 분산 기능을 통해 가용성과 내결함성을 제공

RDBMS(관계형 데이터베이스)의 정의

관계형 데이터베이스는 데이터가 열과 행의 테이블(또는 ‘관계’) 하나 이상에 저장되는 사전 정의된 관계로 데이터를 구성하는 정보 모음으로, 이를 사용하면 서로 다른 데이터 구조가 어떻게 서로 연관되어 있는지 쉽게 확인하고 이해할 수 있다. 관계는 이러한 테이블 간의 상호작용을 기반으로 설정되는 여러 테이블 간의 논리적 연결이다.

RDBMS의 장점

주요한 장점은 직관적인 데이터 표현 방법을 제공하고 관련 데이터 포인트에 쉽게 액세스할 수 있게 해준다는 것이다. 따라서 관계형 데이터베이스는 인벤토리 추적부터 트랜잭션 데이터 처리, 애플리케이션 로깅에 이르기까지 대량의 정형 데이터를 관리해야 하는 조직에서 가장 많이 사용된다.

  1. 유연성
    • 전체 데이터베이스 구조를 변경하거나 기존 애플리케이션에 영향을 주지 않고 필요할 때마다 간편하게 테이블, 관계를 추가, 업데이트 또는 삭제하고 데이터를 변경할 수 있음
  2. ACID 규정 준수
    • 관계형 데이터베이스는 ACID(원자성, 일관성, 격리, 내구성) 성능을 지원하여 오류, 실패 또는 기타 잠재적 오작동에 관계없이 데이터 유효성 보장
  3. 사용 편의성
    • 기술자가 아닌 사용자도 데이터베이스와 상호작용하는 방법을 배울 수 있는 SQL을 사용하여 복잡한 쿼리를 쉽게 실행할 수 있음
  4. 공동작업
    • 여러 사용자가 동시에 데이터를 운영하고 액세스 가능
    • 기본 제공되는 락 기능으로 업데이트 중에는 동시에 데이터에 액세스할 수 없음 (원자성 보장)
  5. 기본 제공 보안 기능
    • 역할 기반 보안을 통해 데이터 액세스가 특정 사용자로 제한 가능
  6. 데이터베이스 정규화
    • 데이터 중복성을 줄이고 데이터 무결성을 향상시키는 정규화 설계 기법 사용

RDBMS의 정규화

정규화는 데이터베이스 설계 과정에서 데이터 중복을 줄이고 데이터 무결성을 유지하기 위해 테이블을 구조화하는 과정이다. 정규화의 목적은 데이터 이상 현상을 방지하고 효율적인 데이터베이스를 구축하는 것이다. 정규화 과정은 여러 단계로 이루어지며, 각 단계는 특정 규칙을 따른다.

  1. 제 1 정규형 (1NF)
    • 모든 필드가 원자 값을 가져야 함. 즉, 각 필드는 더 이상 나눌 수 없는 단일 값을 가짐.
     -- 잘못된 예: 복수 값을 가진 필드
     CREATE TABLE Employee (
         EmployeeID INT,
         EmployeeName VARCHAR(50),
         PhoneNumbers VARCHAR(100) -- "123-456-7890, 098-765-4321"
     );
    
     -- 올바른 예: 원자 값으로 분리된 필드
     CREATE TABLE Employee (
         EmployeeID INT,
         EmployeeName VARCHAR(50)
     );
     CREATE TABLE EmployeePhone (
         EmployeeID INT,
         PhoneNumber VARCHAR(15)
     );
    
  2. 제 2 정규형 (2NF)
    • 제 1 정규형을 만족하면서, 기본 키의 모든 부분에 완전 함수 종속성을 가져야 함. 부분 함수 종속성을 제거.
     -- 잘못된 예: 부분 함수 종속성
     CREATE TABLE OrderDetail (
         OrderID INT,
         ProductID INT,
         ProductName VARCHAR(50),
         Quantity INT
     );
    
     -- 올바른 예: 완전 함수 종속성
     CREATE TABLE OrderDetail (
         OrderID INT,
         ProductID INT,
         Quantity INT
     );
     CREATE TABLE Product (
         ProductID INT,
         ProductName VARCHAR(50)
     );
    
  3. 제 3 정규형 (3NF)
    • 제 2 정규형을 만족하면서, 기본 키에 이행적 함수 종속성을 제거.
     -- 잘못된 예: 이행적 함수 종속성
     CREATE TABLE Employee (
         EmployeeID INT,
         DepartmentID INT,
         DepartmentName VARCHAR(50)
     );
    
     -- 올바른 예: 이행적 함수 종속성 제거
     CREATE TABLE Employee (
         EmployeeID INT,
         DepartmentID INT
     );
     CREATE TABLE Department (
         DepartmentID INT,
         DepartmentName VARCHAR(50)
     );
    

그러나 과도한 정규화는 조인 연산을 많이 발생시켜 성능 저하를 초래할 수 있으므로 주의한다.


그럼 어떤 상황에서 써야 적합할까?

관계형 데이터베이스(RDBMS)와 비관계형 데이터베이스(NoSQL 데이터베이스)의 주요 차이점은 데이터를 저장하고 구성하는 방식이다.

비관계형 데이터베이스의 데이터는 사전에 스키마를 정의하지 않아도 저장될 수 있다. 작업을 진행하는 동시에 데이터를 정의하는 방식으로 빠르게 데이터를 작성하고 반복할 수 있는 능력을 얻게된다는 얘기다. 이 데이터베이스는 그래프 기반, 열 지향, 문서 지향 또는 키-값 저장소 등 특정 비즈니스 요구 사항 수행에 적합합니다.

RDBMS는 테이블이라고 불리는 데이터베이스 객체에 저장되어 있다. 테이블은 관계형 데이터 항목 모음이고, 열과 행으로 구성되는데, 이 데이터베이스에서는 스키마를 사전에 정의해야 한다. 다시 말해, 모든 열과 그와 관련된 데이터 유형이 사전에 파악되어야 애플리케이션이 데이터를 데이터베이스에 작성할 수 있다는 말이다. 이 데이터베이스는 또한 키를 사용해 여러 테이블을 연결하는 방식으로 정보를 저장한다. 그 과정에서 여러 테이블 간의 관계가 형성된다. 간단하게 요약하면 키는 특정 행을 검색하는 데 사용되며, 검사 또는 수정될 수 있습니다.

따라서 NoSQL 데이터베이스는 유연한 데이터 모델을 따르므로 자주 변경되는 데이터를 저장하거나 다양한 유형의 데이터를 처리하는 애플리케이션에 적합하다. 다만 쿼리의 복잡성이 높아지는 경우, 관계형 데이터베이스를 선택하는 것이 좋다. NoSQL 데이터베이스는 보통 복잡한 조인, 하위 쿼리 및 WHERE 절에서의 중첩 질의를 제공하지 않기 때문이다.


Ref.

judy

About judy

junior BE

Comments

comments powered by Disqus