본문 바로가기
통계 & 데이터분석/SQL

SQLite vs MySQL vs PostgreSQL: 관계형 데이터베이스 관리(RDBMS)시스템 비교

by minitistics 2024. 10. 10.

행과 열의 표로 데이터를 구성하는 관계형 데이터 모델은 데이터베이스 관리 도구에서 우세합니다. NoSQL과 NewSQL을 포함한 다른 데이터 모델이 있지만 관계형 데이터베이스 관리 시스템(RDBMS - Relational Database Management System)은 데이터를 저장하고 관리하는 데 여전히 우세합니다.

가장 널리 구현된 오픈 소스 RDBMS 세 가지인 SQLite, MySQL, PostgreSQL를 비교하고 알아보도록 하겠습니다. 특히 각 RDBMS가 사용하는 데이터 유형, 장단점, 최적화가 가장 잘되는 상황을 정리하였습니다.

 


데이터베이스 관리 시스템이란?

데이터베이스는 논리적으로 모델링된 정보 또는 데이터 클러스터입니다. 반면 데이터베이스 관리 시스템(DBMS)은 데이터베이스와 상호 작용하는 컴퓨터 프로그램입니다. DBMS를 사용하면 데이터베이스에 대한 액세스를 제어하고, 데이터를 쓰고, 쿼리를 실행하고, 데이터베이스 관리와 관련된 다른 작업을 수행할 수 있습니다.

데이터베이스 관리 시스템은 종종 "데이터베이스"라고 불리지만, [데이터베이스 관리 시스템]과 [데이터베이스] 두 용어는 서로 바꿔 쓸 수 없습니다. 데이터베이스는 컴퓨터에 저장된 데이터뿐만 아니라 모든 데이터 모음일 수 있습니다. 반면 DBMS는 특히 데이터베이스와 상호 작용할 수 있는 소프트웨어를 말합니다.

모든 데이터베이스 관리 시스템에는 데이터가 저장되고 액세스되는 방식을 구조화하는 기본 모델이 있습니다. 관계형 데이터베이스 관리 시스템은 관계형 데이터 모델을 사용하는 DBMS입니다. 이 관계형 모델에서 데이터는 테이블로 구성됩니다. RDBMS의 맥락에서 테이블은 관계(relation)라고 합니다. 관계는 테이블의 행인 튜플(tuples)의 집합이며, 각 튜플은 테이블의 열인 속성(attributes) 집합을 공유합니다.

대부분의 관계형 데이터베이스는 구조화된 쿼리 언어(SQL)를 사용하여 데이터를 관리하고 쿼리합니다. 그러나 많은 RDBMS는 특정 제한이나 확장이 있을 수 있는 고유한 SQL 언어를 사용합니다. 이러한 확장에는 일반적으로 사용자가 표준 SQL로 할 수 있는 것보다 더 복잡한 작업을 수행할 수 있도록 하는 추가 기능이 포함됩니다.

 

이번 포스팅에서는 3가지 대표적인 RDBMS를 알아보겠습니다.

 

1. SQLite

SQLite는 저메모리 환경에서도 이식성, 안정성, 강력한 성능으로 알려진 독립형, 파일 기반, 완전 오픈소스 RDBMS입니다. 시스템이 충돌하거나 정전이 발생하더라도 트랜잭션은 ACID(automicity, consistency, isolation, durability)를 준수합니다.

SQLite 프로젝트 웹사이트에서는 이를 "서버리스(surverless)" 데이터베이스라고 설명합니다. 대부분의 관계형 데이터베이스 엔진은 프로그램이 요청을 전달하는 프로세스 간 통신을 통해 호스트 서버와 통신하는 서버 프로세스로 구현됩니다. 반면 SQLite는 데이터베이스에 액세스하는 모든 프로세스가 데이터베이스 디스크 파일을 직접 읽고 쓸 수 있도록 합니다. 이렇게 하면 서버 프로세스를 구성할 필요가 없으므로 SQLite의 설정 프로세스가 간소화됩니다. 마찬가지로 SQLite 데이터베이스를 사용하는 프로그램에는 구성이 필요하지 않습니다. 디스크에 액세스하기만 하면 됩니다.


1-1. SQLite의 장점

  • 작은 공간: 이름에서 알 수 있듯이 SQLite 라이브러리는 매우 가볍습니다. 사용하는 공간은 설치된 시스템에 따라 다르지만 600KiB 미만의 공간을 차지할 수 있습니다. 또한 완전히 독립적이므로 SQLite가 작동하려면 시스템에 외부 종속성을 설치해야 할 필요가 없습니다.
  • 사용자 친화적: SQLite는 때때로 바로 사용할 수 있는 "제로 구성" 데이터베이스로 설명됩니다. SQLite는 서버 프로세스로 실행되지 않으므로 중지, 시작 또는 다시 시작할 필요가 없으며 관리해야 하는 구성 파일이 제공되지 않습니다. 이러한 기능은 SQLite 설치에서 애플리케이션과 통합까지의 경로를 간소화하는 데 도움이 됩니다.
  • 이식성: 일반적으로 데이터를 별도의 파일로 대량 저장하는 다른 데이터베이스 관리 시스템과 달리 전체 SQLite 데이터베이스는 단일 파일에 저장됩니다. 이 파일은 디렉토리 계층의 어느 곳에나 위치할 수 있으며 이동식 미디어나 파일 전송 프로토콜을 통해 공유할 수 있습니다.

1-2. SQLite의 단점

  • 제한된 동시성: 여러 프로세스가 동시에 SQLite 데이터베이스에 액세스하고 쿼리할 수 있지만 주어진 시간에 하나의 프로세스만 데이터베이스를 변경할 수 있습니다. 즉, SQLite는 대부분의 다른 임베디드 데이터베이스 관리 시스템보다 더 큰 동시성을 지원하지만 MySQL이나 PostgreSQL과 같은 클라이언트/서버 RDBMS만큼 지원할 수는 없습니다.
  • 사용자 관리 부재: 데이터베이스 시스템은 종종 사용자 또는 데이터베이스와 테이블에 대한 사전 정의된 액세스 권한이 있는 관리되는 연결을 지원합니다. SQLite는 일반 디스크 파일을 직접 읽고 쓰기 때문에 적용되는 유일한 액세스 권한은 기본 운영 체제의 일반적인 액세스 권한입니다. 따라서 SQLite는 특수 액세스 권한이 있는 여러 사용자가 필요한 애플리케이션에는 적합하지 않습니다.
  • 보안: 서버를 사용하는 데이터베이스 엔진은 어떤 경우에는 SQLite와 같은 서버리스 데이터베이스보다 클라이언트 애플리케이션의 버그로부터 더 나은 보호를 제공할 수 있습니다. 예를 들어, 클라이언트의 스트레이 포인터는 서버의 메모리를 손상시킬 수 없습니다. 또한 서버는 단일 영구 프로세스이므로 클라이언트-서버 데이터베이스는 서버리스 데이터베이스보다 더 정밀하게 데이터 액세스를 제어할 수 있습니다. 이를 통해 더 세분화된 잠금과 더 나은 동시성이 가능합니다.


1-3. SQLite를 사용해야 하는 경우

  • 임베디드 애플리케이션: SQLite는 이식성이 필요하고 향후 확장이 필요하지 않은 애플리케이션에 적합한 데이터베이스입니다. 예를 들어 단일 사용자 로컬 애플리케이션, 모바일 애플리케이션 또는 게임이 있습니다.
  • 디스크 액세스 대체: 애플리케이션에서 파일을 디스크에 직접 읽고 써야 하는 경우 SQL을 사용하는 데 따른 추가 기능과 단순성을 위해 SQLite를 사용하는 것이 유익할 수 있습니다.
  • 테스트: 많은 애플리케이션의 경우 추가 서버 프로세스를 사용하는 DBMS로 기능을 테스트하는 것은 과도할 수 있습니다. SQLite는 실제 데이터베이스 작업의 오버헤드 없이 빠르게 테스트를 실행하는 데 사용할 수 있는 메모리 내 모드를 갖추고 있어 테스트에 이상적인 선택입니다.


1-4. SQLite를 사용하지 말아야 할 때

  • Big Data/ 많은 데이터 사용할 때: SQLite는 디스크 드라이브와 파일 시스템이 데이터베이스의 크기 요구 사항을 지원하는 한 기술적으로 최대 140TB 크기의 데이터베이스를 지원할 수 있습니다. 그러나 SQLite 웹사이트에서는 1TB에 가까운 모든 데이터베이스는 중앙 집중화된 클라이언트-서버 데이터베이스에 보관할 것을 권장합니다. 그 크기 또는 그 이상의 SQLite 데이터베이스는 관리하기 어렵기 때문입니다.
  • 작업 볼륨이 높을 때: SQLite는 주어진 시간에 단 하나의 쓰기 작업만 수행할 수 있으므로 처리량이 상당히 제한됩니다. 애플리케이션에 많은 쓰기 작업이나 여러 동시 작성자가 필요한 경우 SQLite가 요구 사항에 적합하지 않을 수 있습니다.
  • 네트워크 액세스가 필요: SQLite는 서버리스 데이터베이스이므로 데이터에 대한 직접 네트워크 액세스를 제공하지 않습니다. 이 액세스는 애플리케이션에 내장되어 있습니다. SQLite의 데이터가 애플리케이션과 별도의 머신에 있는 경우, 네트워크를 통한 고대역폭 엔진-디스크 링크가 필요합니다. 이는 비용이 많이 들고 비효율적인 솔루션이며, 이러한 경우 클라이언트-서버 DBMS가 더 나은 선택일 수 있습니다.

 

2. MySQL


DB-Engines 랭킹에 따르면 MySQL은 이 사이트가 2012년에 데이터베이스 인기를 추적하기 시작한 이래로 가장 인기 있는 오픈소스 RDBMS였습니다. Twitter, Facebook, Netflix, Spotify를 포함한 세계에서 가장 큰 웹사이트와 애플리케이션에 사용되는 기능이 풍부한 제품입니다. MySQL을 시작하는 것은 비교적 간단합니다. 이는 광범위한 설명서와 대규모 개발자 커뮤니티, 그리고 MySQL 관련 온라인 리소스가 풍부하기 때문입니다.

MySQL은 표준 SQL을 완전히 준수하는 대신 속도와 안정성을 위해 설계되었습니다. MySQL 개발자는 지속적으로 표준 SQL을 더 엄격하게 준수하기 위해 노력하지만 여전히 다른 SQL 구현보다 뒤처져 있습니다. 그러나 MySQL은 다양한 SQL 모드와 확장 기능을 제공하여 규정 준수에 더 가까워집니다.

SQLite를 사용하는 애플리케이션과 달리 MySQL 데이터베이스를 사용하는 애플리케이션은 별도의 프로세스를 통해 액세스합니다. 서버 프로세스가 데이터베이스와 다른 애플리케이션 사이에 있기 때문에 데이터베이스에 액세스할 수 있는 사람을 더 잘 제어할 수 있습니다.

MySQL은 기능을 확장하고 작업을 더 쉽게 만드는 수많은 타사 애플리케이션, 도구 및 통합 라이브러리에 영감을 주었습니다. 이러한 타사 도구 중 널리 사용되는 도구로는 phpMyAdmin, DBeaver 및 HeidiSQL이 있습니다.

 

2-1. MySQL의 장점

 

  • 인기 및 사용 편의성: 세계에서 가장 인기 있는 데이터베이스 시스템 중 하나로, MySQL을 사용한 경험이 있는 데이터베이스 관리자가 부족하지 않습니다. 마찬가지로, MySQL 데이터베이스를 설치하고 관리하는 방법에 대한 문서가 인쇄본과 온라인에서 많이 있습니다. 여기에는 phpMyAdmin과 같은 여러 타사 도구가 포함되어 있으며, 이는 데이터베이스를 시작하는 과정을 단순화하는 것을 목표로 합니다.
  • 보안: MySQL에는 설치 암호 보안 수준을 설정하고, 루트 사용자의 암호를 정의하고, 익명 계정을 제거하고, 기본적으로 모든 사용자가 액세스할 수 있는 테스트 데이터베이스를 제거하여 데이터베이스의 보안을 개선하는 데 도움이 되는 스크립트가 설치되어 제공됩니다. 또한 SQLite와 달리 MySQL은 사용자 관리를 지원하며 사용자별로 액세스 권한을 부여할 수 있습니다.
  • 속도: 특정 SQL 기능을 구현하지 않기로 선택함으로써 MySQL 개발자는 속도를 우선시할 수 있었습니다. 최근 벤치마크 테스트에서는 PostgreSQL과 같은 다른 RDBMS가 속도 면에서 MySQL과 맞먹거나 적어도 근접할 수 있음을 보여주지만, MySQL은 여전히 ​​매우 빠른 데이터베이스 솔루션이라는 평판을 얻고 있습니다.
  • 복제: MySQL은 여러 유형의 복제를 지원하는데, 이는 두 개 이상의 호스트에서 정보를 공유하여 안정성, 가용성 및 내결함성을 개선하는 데 도움이 되는 관행입니다. 이는 데이터베이스 백업 솔루션을 설정하거나 데이터베이스를 수평적으로 확장하는 데 유용합니다.


2-2. MySQL의 단점

 

  • 알려진 제한 사항: MySQL은 완전한 SQL 준수보다는 속도와 사용 편의성을 위해 설계되었기 때문에 특정 기능적 제한이 있습니다. 예를 들어, FULL JOIN 절에 대한 지원이 부족합니다.
  • 라이선싱 및 독점 기능: MySQL은 이중 라이선스 소프트웨어로, GPLv2에 따라 라이선스된 무료 오픈 소스 커뮤니티 에디션과 독점 라이선스에 따라 출시된 여러 유료 상용 에디션이 있습니다. 이로 인해 일부 기능과 플러그인은 독점 에디션에서만 사용할 수 있습니다.
  • 개발 속도 저하: MySQL 프로젝트가 2008년에 Sun Microsystems에 인수되고, 나중에 2009년에 Oracle Corporation에 인수된 이후로 사용자들은 커뮤니티가 더 이상 문제에 신속하게 대응하고 변경 사항을 구현할 수 있는 기관이 없기 때문에 DBMS 개발 프로세스가 상당히 느려졌다고 불평했습니다.


2-3. MySQL을 사용해야 하는 경우

 

  • 분산 작업: MySQL의 복제 지원은 1차-2차 또는 1차-1차 아키텍처와 같은 분산 데이터베이스 설정에 적합한 선택입니다.
  • 웹사이트 및 웹 애플리케이션: MySQL은 인터넷에서 많은 웹사이트와 애플리케이션을 구동합니다. 이는 주로 MySQL 데이터베이스를 설치하고 설정하는 것이 얼마나 쉬운지, 그리고 장기적으로 전반적인 속도와 확장성이 얼마나 좋은지에 달려 있습니다.


2-4. MySQL을 사용하지 말아야 할 때

  • 표준 SQL 준수해야 할 때: 앞서 언급했듯 MySQL은 전체 SQL 표준을 준수하지 않습니다. 사용 사례에 SQL을 완벽하게 준수해야 하거나 거의 완벽하게 준수해야 하는 경우 보다 완벽하게 준수하는 DBMS를 사용하는 것이 좋습니다.
  • 동시성 및 대용량 데이터 볼륨: MySQL은 일반적으로 읽기 중심 작업에서 좋은 성능을 보이지만 동시 읽기-쓰기는 문제가 될 수 있습니다. 애플리케이션에서 많은 사용자가 동시에 데이터를 쓰는 경우 PostgreSQL과 같은 다른 RDBMS가 더 나은 데이터베이스 선택이 될 수 있습니다.

 

 

3. PostgreSQL


PostgreSQL은 Postgres라고도 하며, "세계에서 가장 진보된 오픈소스 관계형 데이터베이스"라고 자칭합니다. 매우 확장 가능하고 표준을 준수하는 것을 목표로 만들어졌습니다. PostgreSQL은 객체 관계형 데이터베이스로, 주로 관계형 데이터베이스이지만 테이블 상속 및 함수 오버로딩과 같이 객체 데이터베이스와 더 자주 연관되는 기능도 포함합니다.

Postgres는 여러 작업을 동시에 효율적으로 처리할 수 있으며, 이를 동시성이라고 합니다. 이는 ACID 준수라고도 하는 트랜잭션의 원자성, 일관성, 격리 및 내구성을 보장하는 Multiversion Concurrency Control(MVCC) 구현 덕분에 읽기 잠금 없이 이를 달성합니다.

PostgreSQL은 MySQL만큼 널리 사용되지는 않지만 pgAdmin 및 Postbird를 포함하여 PostgreSQL 작업을 간소화하도록 설계된 여러 타사 도구와 라이브러리가 여전히 있습니다.

 

 

3-1. PostgreSQL의 장점

  • SQL compliance:SQL 준수: SQLite나 MySQL보다 PostgreSQL은 SQL 표준을 긴밀히 준수하는 것을 목표로 합니다. 공식 PostgreSQL 설명서에 따르면 PostgreSQL은 전체 핵심 SQL:2011 준수에 필요한 179개 기능 중 160개를 지원하고, 긴 목록의 옵션 기능도 제공합니다.
  • 오픈 소스 및 커뮤니티 중심: 완전한 오픈 소스 프로젝트인 PostgreSQL의 소스 코드는 대규모의 헌신적인 커뮤니티에서 개발했습니다. 마찬가지로 Postgres 커뮤니티는 공식 설명서, PostgreSQL 위키, 다양한 온라인 포럼을 포함하여 DBMS를 사용하는 방법을 설명하는 수많은 온라인 리소스를 유지 관리하고 기여합니다.
  • 확장성: 사용자는 카탈로그 중심 작업과 동적 로딩 사용을 통해 PostgreSQL을 프로그래밍 방식으로 즉시 확장할 수 있습니다. 공유 라이브러리와 같은 개체 코드 파일을 지정할 수 있으며 PostgreSQL은 필요에 따라 이를 로드합니다.


3-2. PostgreSQL의 단점

  • 메모리 성능: 모든 새 클라이언트 연결에 대해 PostgreSQL은 새 프로세스를 포크합니다. 각 새 프로세스는 약 10MB의 메모리를 할당받으며, 이는 많은 연결이 있는 데이터베이스의 경우 빠르게 누적될 수 있습니다. 따라서 간단한 읽기 중심 작업의 경우 PostgreSQL은 일반적으로 MySQL과 같은 다른 RDBMS보다 성능이 떨어집니다.
  • 인기: 최근 몇 년 동안 더 널리 사용되기는 했지만 PostgreSQL은 역사적으로 인기 면에서 MySQL보다 뒤처졌습니다. 이로 인해 PostgreSQL 데이터베이스를 관리하는 데 도움이 되는 타사 도구가 여전히 적습니다. 마찬가지로 MySQL 경험이 있는 관리자에 비해 Postgres 데이터베이스를 관리한 경험이 있는 데이터베이스 관리자가 많지 않습니다.


3-3. PostgreSQL을 사용해야 하는 경우

 

  • Data integrity:  PostgreSQL은 2001년부터 ACID를 완벽하게 준수해 왔으며 데이터가 일관되게 유지되도록 다중 버전 통화 제어를 구현하여 데이터 무결성이 중요한 경우 강력한 RDBMS 선택이 되었습니다.
  • 다른 도구와의 통합: PostgreSQL은 광범위한 프로그래밍 언어 및 플랫폼과 호환됩니다. 즉, 데이터베이스를 다른 운영 체제로 마이그레이션하거나 특정 도구와 통합해야 하는 경우 다른 DBMS보다 PostgreSQL 데이터베이스가 더 쉬울 가능성이 큽니다.
  • 복잡한 작업: PostgreSQL은 더 빠른 속도로 쿼리에 응답하기 위해 여러 CPU를 활용할 수 있는 쿼리 계획을 지원합니다. 여러 동시 작성자에 대한 강력한 지원과 함께 데이터 웨어하우징 및 온라인 트랜잭션 처리와 같은 복잡한 작업에 적합한 선택입니다.
    PostgreSQL을 사용하지 말아야 하는 경우
  • 속도: PostgreSQL은 속도를 희생하더라도 확장성과 호환성을 염두에 두고 설계되었습니다. 프로젝트에 가능한 가장 빠른 읽기 작업이 필요한 경우 PostgreSQL은 최상의 DBMS 선택이 아닐 수 있습니다.
  • 간단한 설정: 광범위한 기능 세트와 표준 SQL에 대한 강력한 고수 때문에 PostgreSQL은 간단한 데이터베이스 설정에는 과도할 수 있습니다. 속도가 필요한 읽기 중심 작업의 경우 일반적으로 MySQL이 더 실용적인 선택입니다.
  • 복잡한 복제: PostgreSQL은 복제에 대한 강력한 지원을 제공하지만 여전히 비교적 새로운 기능입니다. 일부 구성(예: 기본-기본 아키텍처)은 확장을 통해서만 가능합니다. 복제는 MySQL에서 더 성숙한 기능이며 많은 사용자는 MySQL의 복제가 구현하기 더 쉽다고 생각하는데, 특히 필요한 데이터베이스 및 시스템 관리 경험이 부족한 사용자에게 그렇습니다.

 

 

MySQL, PostgreSQL, SQLite은 세계에서 가장 인기 있는 세 가지 오픈소스 관계형 데이터베이스 관리 시스템입니다. 각각 고유한 기능과 한계가 있으며 특정 시나리오에서 탁월합니다. RDBMS를 결정할 때는 여러 변수가 작용하며, 솔루션이 필요할 때 가장 적합한 것을 찾아보면 좋습니다. 보통 회사에서는 이미 사용하고 있는 데이터베이스 관리 시스템이 있으니, 현재 사용하고 있는 시스템과 비교해보아도 좋겠죠?!

반응형

'통계 & 데이터분석 > SQL' 카테고리의 다른 글

PostgreSQL 데이터 타입과 예시  (1) 2024.10.11

댓글