1장-2강 다양한 데이터베이스

2019. 3. 11. 11:08SQL 첫걸음


지금부터 DBMS의 종류에는 무엇이 있는지, 그리고 DBMS 중 하나인 관계형 데이터베이스란 무엇인지에 관해 설명합니다.

DBMS에는 여러 종류가 있습니다. 데이터베이스의 사용 용도나 이를 제어하는 프로그래밍 환경 등 각각의 조건에 들어맞는 다양한 DBMS가 고안되었기 대문입니다. 데이터베이스 중에서도 SQL로 데이터를 다루는 데이터베이스를 관계형 데이터베이스(RDB : Relational Database)라고 합니다. 관계형 데이터베이스는 현재 주류를 이룰 정도로 많은 시스템에 채택되었으며 제품도 여러 가지가 있습니다.


1. 데이터베이스 종류

DBMS는 데이터 저장 방법에 따라 몇 가지로 분류할 수 있습니다. 지금부터 오래된 순서로 몇몇 DBMS를 소개합니다.


-계층형 데이터베이스

역사가 오래된 DBMS로, 폴더와 파일 등의 계층 구조로 데이터를 저장하는 방식의 데이터베이스입니다. 하드디스크나 DVD 파일시스템을 이러한 계층형 데이터베이스라고 할 수 있습니다. 하지만 현재 DBMS로서 채택되는 경우가 많지 않습니다.


- 관계형 데이터베이스

'관계 대수'라는 것에 착안하여 고안한 데이터베이스입니다. 관계 ㄷ대수라고 하면 뭔가 어려워 보이지만, 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가리킵니다. 다만, 엄밀히 말해 관계 대수는 표 형식 데이터와는 아무런 관계가 없습니다. 일단 여기서는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가르킵니다. 다만, 엄밀히 말해 관계 대수는 표 형식 데이터와는 아무런 관계가 없습니다. 일단 여기서는 표 형식 데이터를 다루는 것이 관계형 데이터베이스라는 점을 이해하시기 바랍니다. 관계 대수에 관해서는 7장에서 자세히 설명하겠습니다.

여기서 표 형식 데이터란 2차원 데이터를 말합니다. 가로 방향으로는 '열'을. 세로 방향으로는 '행'을 나열합니다. 유사한 이미지로 엑셀 시트를 떠올릴 수 있겠습니다. 관계형 데이터베이스에는 이러한 표를 잔뜩 저장해두고, 각각의 표에 이름을 붙여 관리합니다. 이때 데이터베이스 안의 데이터는 SQL 명령어로 조작할 수 있습니다.


- 객체지향 데이터베이스

자바나 C++를 객체지향 언어라고 합니다. 지면에 할애 공간이 적어 상세하게 설명할 수는 없지만, '객체(object)'라는 것을 중심으로 프로그래밍하는 언어입니다. 여기서 '가능하면 객체 그대로를 데이터베이스의 데이터로 저장하는 것이' 객체지향 데이터베이스입니다.


-XML 데이터베이스

XML이란 자료 형식을 가리키는 용어로, 태그를 이용해 마크업 문서를 작성할 수 있게 정의한 것입니다. 태그는 <data>데이터</data>와 같은 형식으로 표현합니다. 마치 HTML과 흡사합니다. XML 데이터베이스는 이처럼 XML 형식으로 기록된 데이터를 저장하는 데이터베이스입니다.

XML 데이터베이스에서는 SQL 명령을 사용할 수 없습니다. 대신 XML 데이터를 검색할 때는 XQuery라는 전용 명령어를 사용합니다.


- 키-밸류 스토어(KVS)

키와 그에 대응하는 값(밸류)이라는 단순한 형태의 데이터를 저장하는 데이터베이스입니다. 키와 밸류의 조합은 연상배열이나 해시 테이블에서 자주 볼 수 있습니다. NoSQL(Not only SQL)이라는 슬로건으로부터 생겨난 데이터베이스로, 열 지향 데이터베이스라고도 불립니다.

지금까지 시대순으로 몇몇 DBMS에 관해 설명했습니다. 프로그래밍 언어의 진화와 다루는 자료 형식의 변화에 맞추어 DBMS도 진화했습니다.

이 책은 SQL에 관한 설명서입니다. 따라서 이제부터 등잘할 데이터베이스라는 용어는 관계형 데이터베이스(RDBMS)를 일컫는 것으로 이해해주세요. SQL을 사용할 수 있는 데이터베이스는 관계형 데이터베이스밖에 없기 때문입니다.

RDBMS는 비교적 오래된 축에 속하는 데이터베이스이긴 하지만, 변화가 빠른 시스템 업계에서 여전히 데이터베이스의 주류를 이룹니다. 이는 실로 대단한 일이라 할 수 있습니다. 또한 RDBMS 중에는 XML 형식의 데이터를 표에 넣거나 자바나 C++의 객체를 가능한 한 그대로 데이터로 넣을 수 있도록 확장한 데이터베이스 제품도 있습니다.

다만 이 책은 SQL 해설집인 만큼, 그와 같은 확장 기능에 관해서는 다루지 않습니다. 어디까지나 단순한 표준 SQL만 설며여합니다. 표준 SQL을 배워두면 어떤 데이터베이스라도 다룰 수 있을 것입니다.


2. RDBMS 사용 시스템

RDBMS는 역사가 깊은 만큼 다양한 시스템에서 사용됩니다. 메인프레임은 대부분 RDBMS를 사용한다고 해도 과언이 아닙니다. 기업의 기반 시스템으로 채택되는 것은 아주 일반적인 일입니다.

다만, 최근 들어 메인프레임 자체를 찾아보기 어려워졌습니다. 다운사이징으로 인해 소형 워크스테이션으로 대체된 것입니다. 그래도 여전히 데이터베이스 서버로는 RDBMS가 사용되었는데, 이때부터 클라이언트/서버 구조도 유행하기 시작했습니다.

현재 일반적으로 사용하는 인프라는 당연히 인터넷입니다. 웹 시스템과 연동하여 RDBMS를 사용하는 경우도 매우 많아졌습니다. 비행기나 전철의 대규모 예약시스템에서부터 마을 병원의 작은 예약 시스템에 이르기까지 RDBMS는 널리 쓰입니다.

하드웨어의 진화 역시 한몫합니다. 단말이 고성능화, 소형화되면서 지금은 휴대전화에도 RDBMS가 내장되어 있습니다.

예를 들어 구글이 개발한 휴대전화용 os인 안드로이드에는 'SQLite'라는 RDBMS가 표준으로 기본 내장되어 있습니다.


3. 데이터베이스 제품

지금까지 설명한 것처럼, RDBMS라는 용어는 관계형 데이터베이스를 관리하는 소프트웨어를 일컫는 말입니다. 다만 'RDBMS'라는 이름의 소프트웨어가 존재한다는 끗은 아닙니다.

실제로 시중에 판매되거나 오픈소스로 자유롭게 다운로드할 수 있는 유명한 제품으로 다음과 같은 것이 있습니다. 오래된 순서대로 나열해보겠습니다. 여기서 소개하는 데이터베이스 제품은 전부 RDBMS인 만큼 SQL을 사용할 수 있습니다.

-Oracle

Oracle 데이터베이스는 오라클에서 개발한 RDBMS입니다. 역사가 깇은 만큼 많은 시스템에서 채택해 사용 중입니다. 현재 가장 많이 쓰이는 RDBMS 중 하나로, RDBMS의 사실상 표준이라고 해도 문제없을 정도로 유명합니다.


-DB2

IMB이 개발한 DB2는 Oracle처럼 역사가 오래된 RDBMS입니다. 다만 오라클이 유닉스 워크스테이션 중심이었던 것과 달리, DB2는 발표된 이래 한동안 IMB컴퓨터에서만 구동되었습니다. 이후 유닉스나 윈도우 등의 플랫폼에서도 DB2를 구동할 수 있게 되었지만 시장 점유율을 확대할 수는 없었습니다. Oracle 쪽이 더 유명한 것 역시 이 같은 배경과 관련이 있습니다.


-SQL Server

SQL Server는 윈도우를 개발한 마이크로소프트가 개발한 RDBMS로, 윈도우 플랫폼에서만 동작합니다. 앞에서 먼저 언급한 REDBMS에 비해 비교적 새로운 제품으로, 윈도우가 서버 분야로 영역을 넓히면서 SQL Server를 사용하는 시스템도 많이 증가했습니다.


-PostgreSQL

PostgreSQL는 오픈소스 커뮤니티가 개발한 RDBMS입니다. 무료 소프트웨어인만큼 자유롭게 사용할 수 있습니다. 기반이 되는 RDBMS는 캘리포니아 대학교 버클리 캠퍼스에서 탄생했는데, 그 때문인지는 몰라도 실험적인 기능이 포함되어 있거나 독특한 구조를 가지기도 합니다.


-MySQL

MySQL은 PostgreSQL과 마찬가지로 오픈소스 커뮤니티에서 태어난 RDBMS입니다. 세상에 나올 당시만 해도 경량 데이터베이스라는 점을 강조하다 보니 필요한 최소한의 기능만을 갖추었습니다. 하지만 기능이 확장되면서 지금은 다른 RDBMS와 비교해도 부족하지 않을 정도입니다. 이 책에서는 MySQL을 사용하여 학습하는 것을 전제로 MySQL용 예제 데이터를 준비했습니다.


-SQLite

오픈소스 커뮤니티에서 태어난 SQLite는 임베디드 시스템에 자주 쓰이는 작은 RDBMS입니다.


4. SQL의 방언과 표준화

RDBMS는 처음부터 SQL 명령어를 이용해 데이터베이스를 조작하도록 설계된 만큼, SQL을 사용할 수 없는 RDBMS는 없습니다. 하지만 각 데이터베이스 제품별로 기능 확장이 이루어지는 과정에서 '비슷한 조작을 실행하더라도 서로 다른 명령어가 필요한' 상황이 발생했습니다. 즉 특정 데이터베이스 제품에만 통용되는 고유 방언이 생겨난 것입니다.

이 같은 고유 방언의 간단한 사례 중 하나로 키워드 생략을 들 수 있습니다. 데이터를 삭제할 때는 DELETE 명령어를 사용하는데, Oracle이나 SQL Server에서는 DELETE 뒤에 붙는 FROM을 생략해도 별 다른 문제가 없습니다. 그에 비해 DB2나 PostgreSQL, MySQL에서는 FROM을 생략할 경우 구문 에러가 발생해 실행되지 않습니다.

또 다른 대표적인 방언의 사례로 외부결합을 들 수 있습니다. 외부결합에 관해서는 7장에서 자세히 설명하겠습니다. Oracle에서는 (+)라는 특별한 연산자를 이용해 외부결합조건을 지정하는 데 비해, SQL Server에서는 *=연산자를 이용합니다.

프로그래밍 언어의 세계에서 '방언'은 환영받지 못합니다. 이 같은 방언을 없애려면 모두 '표준어'를 사용하면 되겠지요. ISO나 ANSI가 결정한 'SQL-92', 'SQL-99', 'SQL-2003' 등이 바로 표준 SQL입니다. 여기서 숫자는 책정된 해를 나타냅니다.

지금까지 많은 RDBMS가 표준화에 동참하여 기능을 확장해온 덕택에 현재는 방언이 많이 줄어들었습니다. 이 책도 표준 SQL을 기준으로 설명합니다. 하나 것붙이자면 표준 SQL로 외부결합을 하는 방법은 'LEFT JOIN'입니다.

'SQL 첫걸음' 카테고리의 다른 글

1장-3강 데이터베이스 서버  (0) 2019.03.13
1장-1강 데이터베이스  (0) 2019.03.08