1. [SQL기초] 데이터베이스의 이해

데이터베이스 개념

데이터베이스는 데이터(Data)+베이스(Base)를 조합해서 만들어진 단어입니다. 데이터(Data)는 컴퓨터 안에 2진수로 저장된 문자, 숫자, 또는 바이너리(Binary) 데이터를 말하고, 데이터베이스는 이 데이터들을 모아 놓은 집합, 또는 저장소를 말합니다.

데이터를 모아서 저장한 저장소는 파일의 형태로 컴퓨터에 저장되어 있으며, 우리가 일반적으로 데이터베이스라고 사용하는 개념은 특정한 형태로 구조화되어 파일에 저장되어 있어서 빠르고 쉽게 검색할 수 있도록 특별히 고안된 데이터 집합을 말합니다.

데이터베이스 안에 데이터를 저장하는 구조는 데이터베이스 종류에 따라 고유한 방식을 사용합니다. 그리고 빠르게 데이터를 검색하기 위한 다양한 고유의 방법을 사용합니다.

데이터베이스는 특정 프로그램에서만 사용하는 내 컴퓨터에 저장되어 있는 간단한 파일의 형태일 수도 있고, 웹사이트나 쇼핑몰처럼 여러 사람이 접근하는 서비스를 제공하기 위한 목적으로 서버에 저장되어 있는 데이터베이스 파일일 수도 있습니다. 여러 사람이 접근하는 서비스를 위한 데이터베이스는 데이터를 공유해 제공하기 위한 특별한 추가 기능들을 제공합니다.

그리고, 고급 기능을 가진 데이터베이스들은 더 빠른 서비스 제공을 위해 서로 동기화되는 같은 데이터를 담고 있는 데이터베이스 복제본을 여러 서버에 분산 저장해 빠른 처리를 지원하기도 합니다. 또는 데이터베이스에 장애가 발생할 경우를 대비해 복사본 데이터베이스가 대기를 하고 있는 기능을 제공하기도 합니다.


데이터베이스(DB)와 데이터베이스 관리 시스템(DBMS)

데이터베이스(Database)는 줄여서 디비(DB)라고 하기도 합니다. 데이터베이스는 파일의 형태로 구조화되어 저장되기 때문에 데이터베이스에 저장된 데이터를 가져오기 위해서는 데이터가 어떻게 저장되어 있는지 구조를 알아야 하고, 저장된 규칙에 따라 데이터를 읽은 후 우리가 이해할 수 있는 데이터 형태로 변환해야 합니다.

데이터를 저장할 때는 더 복잡한 과정을 거쳐야 합니다. 저장할 데이터를 데이터베이스의 구조에 맞도록 구조화한 후, 바이너리 데이터 형태로 바꿔서 새로운 데이터를 넣을 수 있는 데이터베이스의 할당된 위치에 저장을 해야 합니다.

이런 어렵고 복잡한 과정을 프로그래밍 지식이 없는 사용자가 직접 하는 것은 거의 불가능합니다. 그래서 사용자가 데이터베이스에 접근하고 데이터를 빠르고 쉽게 관리할 수 있도록 미리 만들어진 명령어 세트를 제공하고, 관리를 편하고 쉽게 할 수 있도록 프로그램을 제공합니다.

이렇게 데이터베이스와 데이터베이스를 접근하고 데이터를 관리하는 명령어 세트, 그리고 관리용 프로그램을 합쳐서 데이터베이스 관리 프로그램, 줄여서 DBMS(디비엠에스)라고 합니다.

우리가 오라클, MSSQL, 마이SQL, 몽고디비라고 부르는 이름들은 모두 DBMS를 가리킵니다. 이들 DBMS는 고유의 구조를 가진 데이터베이스와 명령어 세트를 제공하며, 전용의 데이터베이스 관리용 프로그램을 제공합니다.

우리는 관리용 프로그램을 통해 명령어세트를 사용해서 데이터베이스에 접근하고 데이터를 가져오고, 또 데이터를 저장하게 됩니다.


RDBMS와 NoSQL의 차이

데이터베이스는 데이터를 종류별로 저장한 테이블이라는 구조에 데이터를 나누어서 보관합니다. 그리고 이 테이블들의 관계를 정의해서 원하는 데이터를 가져오게 됩니다. 쇼핑몰 같은 웹서비스의 데이터를 저장하는 데이터베이스라면 회원정보를 저장한 테이블이 있을 수 있고, 상품정보, 주문정보를 저장하는 테이블이 있을 수 있습니다. 주문정보 테이블에는 어떤 회원이 어떤 상품을 주문했는지를 저장해야 하고, 자세한 회원정보와 상품정보는 각각의 테이블에 있으므로, 주문 정보에는 이 테이블들의 어떤 행인지를 가리키는 정보만 있으면 됩니다.

이렇게 테이블들의 관계를 이용해 데이터를 저장하는 데이터베이스를 관계형 데이터베이스(Relational Database)라고 합니다. 줄여서 RDBMS(알디비엠에스)라고 합니다.

과거에는 우리가 사용하는 대부분의 DBMS가 모두 RDBMS였습니다. 그러다 인터넷과 함께 데이터베이스에 저장해야 하는 데이터가 폭증하면서 RDBMS만으로는 데이터를 관리하기가 어려운 문제가 발생합니다. 수십 억 개의 정리되지 않은 데이터를 빠르게 저장하고, 또 빠르게 읽어서 처리를 해야 하는 문제에 직면하면서 새로운 종류의 DBMS가 필요해지게 되었고, 그렇게 해서 나오게 된 것이 NoSQL(노에스큐엘)입니다.

NoSQL은 “Not just SQL”의 줄임말로 비 관계형 데이터베이스라고 하며, 관계형 데이터베이스가 아닌 데이터베이스를 말합니다. 역사가 깊은 관계형 데이터베이스와 달리 2000년 초부터 사용되기 시작한 비교적 짧은 역사를 가지고 있습니다.

빠른 데이터 읽기 속도와 비정형 데이터 저장에 특화된 구조로 인해 관계형 데이터베이스처럼 정해진 규칙에 따라 테이블에 나누어 데이터를 저장하지 않아도 되는 장점이 있습니다.

NoSQL은 관계형 데이터베이스의 반대말이 아니라 또 다른 새로운 종류의 데이터베이스입니다. 저장할 데이터의 종류에 따라 선택적으로 사용하며, 두 가지 데이터베이스를 혼용하기도 합니다.


SQL의 이해

DBMS가 제공하는 명령어 세트는 데이터베이스를 관리하는 사용자 인터페이스를 제공하지만, 사용자가 원하는 데이터 관리의 모든 기능을 제공하는 것은 거의 불가능합니다. 사용자가 원하는 모든 기능을 제공하려면 정말 많은 명령어 세트가 필요하고, 사용자는 이 명령어 세트를 익히는데 많은 시간을 들여야 합니다.

그래서 더 쉽게 데이터베이스의 데이터를 가져오고, 수정하고, 저장할 수 있는 사용자 친화적인 접근 방법을 제공하는데 이것이 SQL(Structed Query Language)입니다. 구조와 순서가 거의 정해져 있는 단순한 문장 형태의 질의 내용을 작성하면, DBMS는 이 질의 문장을 분석해서 데이터베이스 내부 명령어 세트로 변환한 후 데이터를 가져오게 됩니다.

“주문정보 테이블에서 오늘 주문 중에서 특정 상품명을 가진 주문 목록을 뽑아줘” 와 같은 사람이 이해할 수 있는 단어들을 이용해 정해진 규칙에 따라 질의 내용을 작성하게 됩니다.

SQL은 구조화된 질의 언어(Structed Query Language)로 풀어서 설명되며, 에스큐엘, 또는 시퀄로 발음합니다. IBM이 관계형 DBMS(현재의 DB2)를 개발한 초기에 사용하기 위해서 고안했던 질의 언어 이름이 SEQUEL(시퀄)이었으며 이름 저작권 문제를 피하기 위해 SeQueL의 축약어로 만들어서 대외적으로 사용하게 된 이름이 SQL입니다.

이후 시퀄은 DBMS와의 상호 작용을 하는 방식으로 널리 사용되었고, 관계형 DBMS의 기본 사용자 인터페이스 방식으로 정착하게 됩니다.


SQL의 종류

질의 언어인 SQL은 구조와 순서가 정해진 몇 가지 영어 문장으로 데이터베이스와 상호작용을 해서 데이터를 관리하게 됩니다. SQL 질의 명령어는 용도에 따라 크게 3가지로 나눕니다.

DML (Data Manipulation Language)

데이터 관리 언어. 데이터베이스의 데이터를 가져오고, 추가하고, 삭제하는 용도로 사용하는 언어입니다. 가장 많이 사용하는 SQL 명령이며, 주로 배우게 될 언어입니다.

DDL (Data Definition Language)

데이터 정의 언어. 데이터베이스 안의 데이터를 담는 구조를 생성하는 언어입니다. 데이터베이스에 들어가는 테이블, 뷰와 같은 구조를 데이터베이스 객체라고 하며, 이 책체들을 생성, 수정, 삭제하는 기능을 합니다.

DCL (Data Control Language)

데이터를 제어하는 명령어. DDL로 데이터베이스 구조를 생성하고, DML로 데이터베이스에 들어가는 데이터를 관리하는 명령어들을 제어하는 데 사용하는 언어입니다. 데이터베이스, 또는 데이터에 직접 영향을 주는 언어가 아니라 DML과 DCL의 실행 상태나 조건을 제어하는 역할을 합니다.


ANSI SQL / ISO SQL:2016

초창기 SQL은 DBMS를 개발하는 개발사에 따라 각기 다른 SQL을 사용했습니다. DBMS를 구현하는 기술적인 차이에 따라 자사 DBMS에서 최적의 성능을 내기 위한 기능들이 달랐기 때문에, 이 기능들을 사용하기 위해 자사 DB를 위한 SQL을 만들어서 사용했습니다.

오라클 DBMS는 PL/SQL이라는 고유의 SQL을 사용했고, MSSQL(마이크로소프트 SQL 서버)은 T-SQL 같은 고유의 SQL 언어를 만들어서 사용했습니다. 기본적인 쿼리문은 유사했지만, 성능과 직접적으로 관련이 있는 쿼리문은 작성방식이 전혀 다른 경우도 많았습니다.

DBMS마다의 호환성 문제로 인해 사용하는 DBMS가 달라지면 SQL을 새로 배우다시피 해야 하는 문제가 생기면서 표준화의 필요성이 대두되었고, 그렇게 해서 나오게 된 것이 미국 표준 위원회인 ANSI에서 1986년 정한 관계형 DBMS용 질의 언어 표준인 ANISI SQL입니다.

ANSI SQL이 1986년 표준으로 정해진 이후, 1987년부터 ISO에서 넘겨받아 지속적으로 업데이트를 하면서 대부분의 DBMS에서 이 표준을 받아들이게 됩니다. 2016년 발표된 가장 최근 표준인 ISO SQL:2016로 작성한 SQL문은 대부분의 DBMS에서 실행할 수 있습니다.

여전히 DBMS 고유의 기능을 사용하는 몇몇 SQL문은 DBMS마다 다르지만, 이런 일부 SQL문을 제외한 표준을 따르는 SQL문은 대부분 호환이 됩니다.

이 책은 표준 SQL을 기준으로 SQL을 학습합니다. DBMS마다 다른 고유한 쿼리문에 대해서는 별도로 추가 설명을 해서 호환성 부분에 대한 방법을 제시합니다.


SQL 호환성

데이터베이스 제품 중 특히 역사가 있는 제품들은 표준 SQL과는 별도로 고유의 SQL 확장 언어를 제공합니다. 과거 SQL 표준의 기능 확장과 업데이트가 늦어지면서 자사 데이터베이스 제품에 새롭게 추가된 기능을 지원하기 위해 각자 고유한 언어 명세를 추가하게 되었고, 데이터베이스 제품마다 다른 SQL 문법이 생겨나게 됩니다.

SQL Server는 T-SQL, 오라클은 PL/SQL과 같이 각자의 이름으로 SQL 표준을 확장해서 사용해왔습니다. SQL 표준이 대폭 확장되면서 각각의 데이터베이스 제품마다 구현해 사용하던 많은 기능들이 표준 SQL에 포함되었습니다.

최신 데이터베이스 제품들이 지원하는 대부분의 기능 사용에 필요한 문법들이 표준 SQL로 지원이 되기 때문에 SQL 호환성으로 인해 골머리를 앓을 일은 더 이상 없습니다.

다만, 아직 일부 기능들(백업, 복원, 트랜잭션, DB구조 관리 등)과 DBMS 고유의 기능 제공을 위해 데이터베이스마다 다른 구현 방식을 그대로 사용하는 경우가 있으므로 이런 부분들은 별도로 학습해야 합니다.


데이터베이스의 종류

앞서 설명한 NoSQL과 같은 데이터베이스 종류 외에도 다양한 데이터베이스 종류가 있습니다. 이런 특수한 데이터베이스 형태를 접할 기회는 많지 않지만, 어떤 데이터베이스가 있는지는 알아야 하고, 또 이런 다른 종류의 데이터베이스는 SQL이 아닌 다른 질의 언어, 또는 질의 방식을 사용하기도 하기 때문에 간단하게 라도 알아 둘 필요가 있습니다. 종류별로 간략하게 소개를 하도록 하겠습니다.

객체지향 데이터베이스(Object-Oriented Database)

하나의 객체 단위를 기준으로 데이터를 관리하는 데이터베이스로 오브젝트(Object) 데이터베이스라고도 합니다. 다양한 객체 형태를 읽고 저장할 수 있도록 저장 구조를 제공하기 때문에 부정형 데이터를 관리하는데 특화된 데이터베이스입니다. 특정 데이터베이스 기술, 또는 제품을 말하는 것은 아니며, 객체 구조로 데이터를 관리하는 데이터베이스를 가리키는 일반적인 용어로 객체지향 개발 언어처럼 속성과 메서드로 데이터베이스에 접근하는 데이터베이스 기술을 말합니다.

관계형 데이터베이스도 테이블이라는 객체에 데이터를 넣고 컬럼 값 속성을 이용해 데이터를 가져오는 방식이기 때문에 넓은 의미에서는 객체지향 데이터베이스이며, “키:밸류”를 하나의 객체 단위로 사용해서 데이터를 저장하고 가져오는 방식의 데이터베이스인 NoSQL 또한 객체지향 데이터베이스의 한 종류입니다.

XML 데이터베이스

XML 도큐먼트 형태로 데이터를 저장하는 데이터베이스입니다. 트리 형태로 구조화된 XML 문서의 저장과 처리에 특화된 데이터베이스입니다. 읽고 저장하는 데이터가 모두 XML 도큐먼트 구조로 처리되는 데이터베이스로 질의 언어로 SQL과 구조가 유사한 XQuery를 사용합니다. 최근에는 많은 상용 관계형 데이터베이스들이 XML 데이터 입출력을 지원하기 때문에 XML 전용의 데이터베이스 사용은 거의 없으며, 관계형 데이터베이스의 부가적인 기능으로 주로 사용합니다.

대량의 문서 저장 및 검색을 위해 주로 사용합니다.

JSON 데이터베이스

JSON 데이터 포맷으로 데이터를 저장하고 가져오는 데이터베이스입니다. “키:밸류” 구조로 데이터를 저장하며, JSON 문서 포맷으로 데이터를 가져오고 저장하기 때문에 웹 환경에 특히 특화된 데이터베이스입니다. NoSQL의 기본 데이터 구조로 사용되기 때문에 NoSQL의 장단점을 그대로 가지고 있습니다.

부정형 데이터를 다루는데 특화된 데이터베이스이며, 상용 관계형 데이터베이스(RDBMS)들도 대부분 관계형 데이터를 JSON으로 가져오는 기능을 제공합니다.

키:밸류 데이터베이스

“키:밸류” 데이터 쌍 구조로 데이터를 저장하는 데이터베이스입니다. 대표적인 “키:밸류” 데이터베이스로는 NoSQL 이 있습니다. 대량의 데이터에 대한 빠른 읽기 구현이 가능하기 때문에, 읽기에 특히 특화된 서비스를 위한 데이터베이스에 주로 사용됩니다.

계층형 데이터베이스

트리 형태의 구조를 가지는 데이터베이스입니다. 대표적인 계층형 데이터베이스는 운영체제의 파일 시스템입니다.

폴더, 또는 디렉터리를 이용한 계층형 구조로 구현이 되며, 파일 시스템 외에는 사용하는 경우가 없어 용도가 다소 제한적입니다.

메모리 데이터베이스

데이터베이스는 구조화된 데이터를 파일 형태로 보관하고, SQL 질의에 대해서 파일 안의 데이터를 읽어서 결과를 얻게 됩니다. 데이터베이스 파일은 디스크 공간에 저장되며, 느린 디스크에 보관되지만 검색 및 속도를 높여주는 다양한 최적화 방법이 사용됩니다. 또 빠른 메모리를 이용한 캐싱을 하기 때문에 자주 사용하는 쿼리 결과에 대해서는 꽤 빠른 결과를 얻을 수 있습니다.

많은 데이터베이스들이 최대한의 메모리 공간을 활용한 캐싱을 통해 속도를 높이는 전략을 사용합니다. 이와는 반대로 데이터베이스 파일 자체가 메모리 공간에 있으면, 캐싱과 같은 번거로운 2차 작업을 하지 않아도 가장 빠른 저장 공간에서 데이터를 가져오게 된다는 개념에서 착안해 만들어진 데이터베이스가 메모리 데이터베이스입니다.

메모리에 있는 전체 데이터베이스를 직접 질의해서 결과를 얻기 때문에 속도가 비약적으로 빨라지며, 대규모 접속자 처리를 위한 용도로 최적의 성능을 구현할 수 있습니다.

반대로 단점도 많아서, 비싼 메모리를 대량으로 장착한 별도의 서버가 필요하고, 전원 실패에 대한 대응이 되어야 하는 등 관리상의 까다로움이 존재합니다. DBMS 운영에 많은 비용이 발생하기 때문에 제한적인 용도로 사용합니다.

관계형 데이터베이스

정해진 테이블 구조에 맞춰 데이터를 저장하고, 테이블 사이의 관계를 정의해서 전체 데이터 구조를 만드는 데이터베이스입니다. 테이블 컬럼은 미리 정해진 데이터 타입과 길이, 그리고 다양한 속성을 부여하게 되며, 정해진 데이터 타입으로만 저장할 수 있습니다.

가장 널리 사용되는 데이터베이스이며, 구조가 명확하기 때문에 유지와 관리가 쉽고, SQL을 사용해 사람의 언어와 유사한 형태로 질의를 해서 결과를 얻을 수 있습니다.

우리가 아는 데이터베이스는 대부분 관계형 데이터베이스라고 생각하면 됩니다.

Oracle, MySQL, SQL Server, DB2, PostgreSQL, SQLite, MariaDB와 같이 우리가 익숙하게 들어온 DBMS들은 모두 관계형 데이터베이스입니다.

관계형 데이터베이스지만 시장 변화에 따라 다양한 데이터를 다룰 수 있도록 지속적으로 기능이 확장되는 추세이며, 상용 데이터베이스들은 대부분 객체, XML, JSON 데이터를 저장하고 결과를 얻을 수 있도록 지속적으로 기능이 확장되고 있습니다.


DBMS의 장점

데이터베이스를 사용하면 데이터를 관리하고 분석하는 능력이 비약적으로 향상됩니다. 그리고 생산성이 월등하게 높아집니다. 많은 사용자들이 원활하게 같은 데이터를 공유할 수 있고, 데이터를 추가하거나 수정할 수 있는 안정적인 환경을 제공합니다.

관계형 데이터베이스와 비슷한 구조로 된 엑셀 파일과 비교하면 조금 더 쉽게 이해할 수 있습니다. 혼자서 사용하는 환경을 기반으로 하는 엑셀 파일은 데이터를 공유하거나 공동 작업을 하는데 많은 제약이 있고, 데이터의 무결성을 보장할 수도 없습니다.

데이터베이스를 사용하면 많은 사용자에게 최신의 동일한 원본 데이터를 제공할 수 있습니다. 사용자가 많아지면 데이터를 여러 개의 데이터베이스에 분산해서 처리해 처리 속도가 느려지는 것을 개선할 수도 있습니다. 또는 같은 원본은 여러 개의 데이터베이스에 복제해서 동기화를 함으로써 성능 향상과 함께 장애에 대응할 수도 있습니다.

데이터베이스는 내장된 백업 기능을 이용해 데이터베이스의 백업본을 보관할 수 있는 기능을 제공합니다. 데이터베이스에 문제가 발생해 데이터베이스의 데이터가 소실되었을 경우에도 백업본을 이용해 데이터를 복구할 수 있는 복구 프로세스를 제공합니다.

이런 장점들은 데이터베이스의 빠른 데이터 처리 속도와 함께 데이터베이스의 데이터를 잃어버리지 않는다는 신뢰성과 안정성을 보장해줍니다.


관계형 데이터베이스 제품들

오라클

오라클의 관계형 DBMS입니다. 명실상부한 업계 최고의 상용 데이터베이스 제품입니다. 관계형 데이터베이스의 역사와 함께하는 대표적인 관계형 DBMS이며 가장 많이 사용하는 관계형 데이터베이스 제품입니다. 질의 언어로는 SQL 기반의 PL/SQL을 사용합니다.

최근 몇 년간 급격한 버전업과 함께 기능이 대폭 강화되었으며, 최신의 사용 데이터 베이스 제품에서 필요로 하는 기능들을 충실하게 지원합니다. 오라클 클라우드 서비스 또한 제공해 가상 머신 기반의 오라클 데이터베이스를 사용할 수 있어 데이터베이스 서버의 설치와 운영에 드는 부담을 덜 수도 있습니다.

SQL Server

마이크로소프트의 관계형 DBMS입니다. 오라클이나 DB2에 비해서는 후발 주자이고, 주로 윈도우 서버 플랫폼에서 운영합니다. 컨테이너 기반으로 리눅스에서도 가상 머신으로 운영을 할 수 있으며, 클라우드 기반으로 가상 DB 형태로 사용할 수도 있습니다.

질의 언어는 SQL 기반의 T-SQL을 사용합니다. 표준 SQL을 충실히 지원하며, DBMS 관리 툴인 SSMS(SQL Server Management Studio)의 기능이 뛰어나 운영과 유지보수가 쉬운 장점이 있습니다.

최신 상용 관계형 DBMS들이 지원하는 기능들을 충실하게 지원하며, 클러스터링 및 XML, JSON 데이터 입출력도 잘 지원합니다.

MySQL

대표적인 오픈소스 관계형 DBMS입니다. 오라클에 인수되면서 많은 논란이 있었지만, 여전히 오픈소스 기반으로 가장 많은 사용 기반은 가지고 있는 관계형 데이터베이스입니다.

다른 오픈소스 관계형 데이터베이스에 비해 짧은 역사를 가지고 있음에도 사용자 기반이 가장 넓고 관련 정보와 문서도 방대해서 관계형 데이터베이스에 입문하는 사용자가 접근하기에 좋습니다.

초기에는 경량 데이터베이스를 목표로 해서 속도가 빠르고 간결한 관계형 데이터베이스였으나, 기능이 지속적으로 보강되면서 최신 상용 데이터베이스 부럽지 않은 기능을 제공하고 있습니다. 많은 리눅스 서버 배포판의 기본 데이터베이스로 배포되고 있어 중소 규모 서비스 기반이 넓은 특징이 있습니다.

DB2

IBM이 만든 관계형 데이터베이스입니다. 관계형 데이터베이스의 시작과 함께한 역사가 깊은 데이터베이스 제품입니다. 일반 사용자가 접하기 쉽지 않은 데이터베이스 제품으로 기업 환경을 대상으로 해서 주로 공급되는 데이터베이스 제품입니다.

일반 사용자 기반이 넓지 않아 인터넷에서 관련 기술 정보와 문서를 찾기가 쉽지 않아 접근이 다소 어려운 데이터베이스입니다. 자사 서버와 자사 솔루션 중심의 서비스에 번들되는 형태로 많이 제공되기 때문에 비즈니스 플랫폼 용도로 주로 사용됩니다.

PostgreSQL

역사가 깊은 오픈소스 관계형 데이터베이스 제품입니다. 성능이나 기능이 특출 나지는 않지만 역사가 오래된 만큼 기능적으로 안정적이며, MySQL에 밀려서 오랜 기간 빛을 보지 못하다가 최근 들어 다시 각광을 받고 있는 관계형 데이터베이스입니다.

역사가 오래된 만큼 구조가 안정적이고 신뢰할 수 있는 데이터베이스라는 점이 최대의 장점입니다. 특별히 큰 문제가 되는 이슈가 잘 없고 보안 문제도 대응이 빨라 안정적인 데이터베이스를 원하는 사용자에게 인기가 많습니다.

질의 언어는 SQL 기반의 PSQL을 사용합니다.

SQLite

이름처럼 경량 관계형 데이터베이스 제공을 목표로 배포되는 오픈소스 관계형 데이터베이스입니다.

경량 데이터베이스인 만큼 최신 관계형 데이터베이스 제품들이 지원하는 고급 기능들은 대부분 지원하지 않습니다. 다만, 설치 패키지가 작고, 오픈소스 기반이어서 프로그램이나 앱의 일부로 함께 배포하기가 좋아 임베디드 데이터베이스로 사용하는 경우가 많습니다.

서비스로 운영할 때 사용하는 시스템 리소스도 아주 작기 때문에 특히 저 성능 서버에서 특정 기능만을 제공하는 서비스를 제공하는데 강점이 있습니다.


클라이언트/서버 모델

DBMS는 데이터베이스에 저장된 데이터를 요청하는 다른 서비스, 또는 프로그램에 데이터를 제공하는 역할을 합니다. 이렇게 요청(리퀘스트) 받아 생성한 결과 데이터를 제공(리스폰스)하는 서비스, 또는 프로그램을 서버(제공자)라고 합니다.

반대로 원하는 데이터를 요청하는 프로그램, 또는 서비스를 클라이언트(요청자)라고 합니다.

데이터를 요청하는 쪽은 웹사이트를 방문한 방문자가 웹페이지를 열면서 필요한 데이터를 요청하는 웹서버일 수도 있고, DBMS의 관리 프로그램일 수도 있고, 다른 서버일 수도 있습니다.

이렇게 데이터를 요청하는 클라이언트와 데이터를 제공하는 서버로 이루어진 서비스 구조를 클라이언트/서버 구조라고 합니다.

우리가 매일 방문하는 수많은 웹사이트와 쇼핑몰은 대부분 이런 클라이언트/서버 구조로 서비스되는 대표적인 예입니다.

웹서비스의 관점에서 본다면 웹페이지를 요청하는 웹 브라우저는 클라이언트가 되고, 웹페이지를 생성해서 제공하는 웹서버는 서버가 됩니다. 웹서버는 웹서비스의 관점에서는 서버이지만, 웹페이지를 생성하는데 필요한 데이터를 데이터베이스에 요청하기 때문에 데이터베이스의 관점에서는 웹서버가 클라이언트가 됩니다.

클라이언트와 서버는 고정된 역할이 있는 것이 아니라 어떤 역할을 하는가에 따라 클라이언트가 되기도 하고 서버가 되기도 합니다.

마찬가지 이유로 데이터베이스도 운영체제 입장에서는 클라이언트가 됩니다. SQL 요청은 받은 데이터베이스는 데이터 검색을 위해 운영체제에 파일 읽기 요청을 하게 되기 때문입니다.