NoSQL을 알아보자(2) - 관계형 데이터베이스와 한계점

 

관계형 데이터베이스

관계형 데이터베이스는 데이터와 데이터 간의 관계를 묘사하기 위해 관계형 대수학을 사용하는 형식 수학 모델을 기반으로 두고 있다. 관계형 데이터베이스는 데이터 구조의 논리 구성을 물리적인 저장 구조와 분리했다.

기존의 데이터베이스 들은 데이터를 관리하기 위해 프로그래머들이 직접 프로그램을 만들어서 사용했다. 반면 관계형 데이터베이스는 데이터 관리에 공통 언어(SQL)를 사용하도록 설계하여 데이터 관리를 쉽게 할 수 있게 됐다.

데이터를 관리하고 애플리케이션 사용자들이 데이터에 접근할 수 있도록 허용하는 구조를 관계형 데이터베이스 관리 시스템(이하 RDBMS) 이라 한다.

RDBMS 구조

  • 스토리지 관리 프로그램
  • 메모리 관리 프로그램
  • 데이터 사전
  • 질의 언어

스토리지 관리 프로그램

기본적으로 RDBMS에서 데이터 조각들이 어디에 저장되어 있는지 어떤 값을 가지고 있는지 알려준다.

또 데이터가 저장된 위치를 확인하여 보다 효율적인 위치로 데이터를 최적화하는 작업, 데이터를 압축하여 저장 공간을 절약하는 작업, 디스크 결함에서 데이터 블록이 유실되지 않도록 예방하는 작업 등을 수행한다.

메모리 관리 프로그램

필요한 경우 데이터를 메모리로 가져와 유지하고, 더 이상 필요하지 않을 때 메모리를 해제하는 역할을 한다. 메모리에서 데이터를 접근하는 것이 디스크에서 읽는 것보다 빠르기 때문에 메모리 관리 효율에 따라서 RDBMS의 전체 성능이 크게 달라진다.

데이터 사전

Database scheme structure

데이터 사전은 데이터베이스에 저장된 데이터의 구조 정보를 파악하는 역할을 한다. 가장 기본이 되는 스키마란 테이블, 뷰, 인덱스, 데이터 집합 등의 데이터의 구조를 나타내는 단위다.

테이블 은 엔터티 데이터를 담고 있는 데이터베이스 구조다. 여기서 엔터티는 사람, 장소, 회사 등등 데이터베이스에 저장할 수 있는 어떤 물체를 묘사하는 하나의 단위이다.

Database scheme structure2

테이블은 하나 또는 여러 개의 컬럼과 인덱스들로 구성된다. 컬럼에는 특정 하나의 정보가 저장된다. 인덱스는 데이터 조회를 빠르게 하기 위해 데이터가 하드웨어에 저장된 위치를 가리키는 역할을 한다.

제약 조건 은 컬럼에 들어가는 데이터 값을 제한하는 규칙을 말한다. 기대했던 데이터 타입이 아닌 다른 형태의 데이터가 저장되는 것을 방지하는 역할을 한다. 예를 들어 숫자 형태의 급여 컬럼에 문자 형태의 직급을 저장하려고 하면 데이터베이스가 저장되지 않도록 방지한다.

또 제약 조건을 새로 추가하여 급여 컬럼에 최저 임금 이상인 값만 넣을 수 있도록 규칙을 설정할 수도 있다.

는 하나 이상의 테이블에서 관련된 컬럼들의 값들을 모아서 볼 수 있도록 기능을 제공한다. 직원 테이블에서 급여를 제외하고 직급, 부서만 보이는 뷰를 구성할 수도 있고, 직원 테이블과 다른 테이블을 결합하여 복합적인 데이터를 한 뷰에 구성할 수도 있다.

질의 언어

RDBMS에서 질의 언어는 두 가지 역할을 수행한다. 하나는 SQL을 사용하여 스키마, 테이블, 뷰, 인덱스, 제약조건 등등 데이터의 구조를 정의할 수 있다. 다른 하나는 SQL을 사용하여 데이터 추가, 갱신, 삭제, 조회 등의 데이터 조작을 할 수 있다.

관계형 데이터베이스의 한계

관계형 데이터베이스는 플랫 파일 기반, 계층형, 네트워크 데이터베이스가 가지고 있던 많은 한계를 해결하면서 데이터베이스 애플리케이션에서 가장 오랜 시간 왕좌를 지켜온 유형이다.

하지만 웹과 SNS 등 수십, 수백만 또는 그 이상의 사용자를 가진 서비스를 운영하는 것과 수천 명의 사용자를 위한 서비스를 운영하는 것은 차원이 다르다는 것을 업계는 인식했다.

수많은 사용자를 기반으로 서비스를 하게 된다면 상상 이상으로 많은 데이터가 초 단위로 쌓이게 되고 데이터베이스 또한 이 방대한 데이터들의 작업을 수용할 수 있어야 했다.

즉 방대한 데이터를 저장할 수 있는 공간, 매초 쏟아지는 데이터를 처리할 수 있는 능력, 빠른 응답 시간 등이 보장되는 시스템이 필요했지만, 관계형 데이터베이스는 이 부분에서 취약함을 드러냈다.

이전에는 데이터베이스가 느려지면 더 많은 CPU와 메모리 그리고 더 빠른 저장 장치를 장착하여 문제를 해결했지만, 하나의 컴퓨터에 장착할 수 있는 CPU와 메모리, 저장 장치의 수는 제한적이기 때문에 임시방편에 불과했다.

이를 개선하기 위해 데이터 이상 현상이 발생할 가능성이 높아지더라도 성능을 개선할 수 있도록 스키마를 재설계하거나 다수의 서버에서 하나의 관계형 데이터베이스를 관리할 수 있도록 대안이 등장했다.

하지만 위의 방법들을 적용하고 장기적으로 관리하는 것은 기술적 난이도가 높아 전문 재원이 부족한 조직에서는 관계형 데이터베이스 성능 개선에 어려움을 겪었다.