[번역] MySQL vs PostgreSQL in 2024

DyungE_100·2024년 4월 26일
0

원문 링크: https://medium.com/dbconvert/mysql-vs-postgres-in-2024-ba44cc07234a

본 글은 원문 내용을 전달하기 쉽게 하고자 원문 내용과 일부 다를 수도 있습니다. 오역이나 잘못된 부분이 있다면 아래 댓글로 달아주세요.

PostgreSQL과 MySQL은 클라우드 채택으로 인한 쉬운 배포로 인해 급부상하게 되었습니다.
PostgreSQL이 2023년을 지배했지만, 여전히 MySQL은 학습자들에게 매력적입니다.
2024년에 PostgreSQL은 sharding, logical replication 등을 개선하는 것을 목표로 하고 있고, MySQL은 availability, security, analytics 에 초점을 두고 있습니다.

PostgreSQL과 MySQL의 인기가 급증한 것은 주요 클라우드 업체들에서 이들을 채택한 덕분입니다. Amazon Web Services, Microsoft Azure, 그리고 Google Cloud까지 다양한 클라우드 업체가 PostgreSQL과 MySQL 서비스를 제공하며, 데이터베이스 배포와 관리를 간소화해주고 있습니다. AWS는 2021년에 Amazon Aurora의 PostreSQL와의 호환 서비스에 대한 급속한 성장을 강조한 바 있습니다.

2010년 오라클이 MySQL을 인수하면서 오픈 소스 데이터베이스 사용자들 사이에서 MySQL의 미래에 대한 우려가 쏟아져 나왔습니다. 그도 그럴 것이 많은 사람들은 오라클이 상업적 이익으로 인해 MySQL의 오픈 소스 정신에 타격을 줄 것이라 우려했습니다. 이러한 불확실성 때문에 일부 사용자들은 강력한 기능과 견고한 오픈 소스 커뮤니티 지원을 받고 있는 PostgreSQL을 대안으로 삼기 시작했습니다.

DB-Engines winners

PostgreSQL은 2023년 DB-Engines에서 발표한 올해의 데이터베이스 관리 시스템으로 선정되었습니다. 지난 10년 동안 PostgreSQL은 DB-Engines DBMS 올해의 수상자로 가장 자주 선정되며, 데이터베이스 커뮤니티 내에서도 지속적인 인기를 과시하고 있습니다.

작년 “MySQL vs PostgreSQL in 2023” 가이드는 이 두 인기 있는 RDBMS 사이의 기본적인 유사성, 성능, 유연성, 규모 그리고 사용 용이성을 분석합니다.
MySQL과 PostgreSQL을 비교하는 표는 db-engines.com에서 찾아보실 수 있습니다.

역사와 발전(History and Development)

PostgreSQL은 1996년에 처음 출시되었으며 널리 사용되는 오픈 소스 RDBMS가 되었습니다. SQL 표준을 강력히 준수하고, 강력한 성능과 데이터 무결성 및 보안에 중점을 두고 있는 것으로 잘 알려져 있습니다.

반면 MySQL은 1995년 처음 출시되어 높은 성능과 사용 편의성으로 인해 웹 애플리케이션에 널리 사용되었습니다. 2008년에는 썬 마이크로시스템즈에게 인수되었고, 이후 2010년에 오라클이 MySQL을 인수되었습니다.

특징(Features)

PostgreSQL과 MySQL은 모두 관계형 데이터베이스 관리 시스템으로서 광범위한 기능을 제공하지만 둘 사이에는 몇 가지 주요한 차이점이 존재합니다.

  1. 데이터 타입(Data Types)

    • PostgreSQL은 array(배열), hstore(key-value 저장소), JSONB(바이너리 JSON)를 포함한 다양한 고급 데이터 유형을 지원합니다.
    • 반면, MySQL은 더 제한된 데이터 유형 세트를 가지고 있으며, 보다 단순한 웹 애플리케이션을 위해 구성되어 있습니다.
    • MySQL의 JSON 바이너리 저장 포맷은 PostgreSQL의 JSONB와 비교할 수 있으며, 단순한 JSON 구조와 직관적인 웹 애플리케이션에 적합합니다.
  2. 지리 공간 데이터 지원(Geospatial Support)

    • PostgreSQL은 지리적 데이터를 다루기 위한 풍부한 데이터 유형, 함수 및 연산자를 포함하여 지리 공간 데이터를 강력하게 지원합니다. (PostGIS)
    • MySQL도 일부만 지원하지만 이 분야에서 더 강력할 수도 있습니다. (R-tree 인덱스 등)
  3. 인덱싱(Indexing)

    • MySQL에서는 대부분의 사용 사례에 적합한 B-tree 타입이 기본 인덱스 유형입니다. 그 밖에도 Hash, R-tree, Full-text와 같은 인덱스를 지원합니다.
    • PostgreSQL은 B-tree, Hash, GisT(Generalized Search Tree), GIN(Generalized Inverted Index), BRIN(Blocking Range Indexes)와 같은 인덱스들을 포함하여 MySQL보다 더 세밀한 인덱싱 시스템을 가지고 있습니다. 이는 쿼리 성능 최적화 및 데이터 검색을 위한 더 많은 옵션을 제공합니다.
  4. 그룹 복제(Replication)

    • PostgreSQL과 MySQL은 둘 다 master-slave 형식의 데이터베이스 복제를 수행하지만, 복제 방법과 옵션이 다릅니다.
    • PostgreSQL은 서드파티 확장을 사용하여 multi-master 복제를 지원합니다.
    • MySQL은 최근 그룹 복제(Group Replication)라는 새로운 복제 모델을 도입했지만, 아직은 새로운 기능으로 일부 제한이 있습니다.
  5. 트랜잭션(Transactions)

    • PostgreSQL과 MySQL InnoDB는 MVCC(다중 버전 동시성 제어)를 사용하여 동시 데이터 접근을 처리합니다.
    • PostgreSQL은 트랜잭션 격리 수준(transaction isolation levels), 원자 트랜잭션(atomic transactions), 세이브포인트(savepoints)와 같은 발전된 트랜잭션 관리 기능을 제공합니다.
    • 반면, MySQL의 트랜잭션 관리 옵션은 더 제한적입니다. 높은 동시성 또는 복잡한 트랜잭션 로직이 필요한 애플리케이션에는 PostgreSQL이 더 적합할 수 있습니다.
  6. 저장 프로시저(Stored Procedures)

    • PostgreSQL과 MySQL은 저장 프로시저를 지원하지만, 저장 프로시저의 언어와 기능이 다릅니다.
    • PostgreSQL은 PL/pgSQL, PL/Tcl, PL/Perl 등 다양한 언어로 작성된 저장 프로시저를 지원합니다.
    • 반면, MySQL은 주로 SQL로 작성된 저장 프로시저를 지원합니다.
  7. 확장 기능(Extensions)

    • PostgreSQL은 개발자가 사용자 정의 기능을 추가하고 데이터베이스의 핵심 기능을 확장할 수 있는 강력한 확장 프레임워크를 갖고 있습니다.
    • MySQL도 일부 확장 지원을 제공하지만, PostgreSQL과는 다른 수준의 확장성을 가지고 있습니다.

데이터 캡처 변경(Change Data capture)

CDC(change data capture) 측면에서 MySQL 바이너리 로그(binary logs)와 PostgreSQL의 WALs(write-ahead logs)는 모두 데이터베이스에 대한 변경 사항을 캡처할 수 있습니다. 그러나 CDC의 구체적인 기능과 용도는 다를 수 있습니다.

DBConvert Streams는 MySQL 및 PostgreSQL 트랜잭션 로그를 읽고 레코드를 다른 DB의 SQL(원문은 dialect이라고 적혀있음)로 변환할 수 있는 소프트웨어로, 실시간으로 다른 종류의 데이터베이스 복제에 적합합니다.

성능(Performance)

MySQL은 높은 성능을 자랑하며 대량의 데이터 처리 능력이 탁월합니다. MySQL은 읽기 중심의 작업에 최적화되어 있으며 빠른 인덱싱 시스템을 통해 쿼리 성능을 향상시키는데 도움을 줍니다. 그러나 쓰기 작업과 결합될 때 lock 경합(lock contention)과 같은 동시성 문제가 발생할 수 있으며, 이는 성능 저하로 이어질 수 있습니다. 테이블 수준에서 lock을 구현함으로써 발생한 문제로, 프로세스 중 쓰기 작업이 진행되는 동안 모든 작업을 중단합니다.

이러한 테이블 수준의 locking 문제를 해결하기 위해 InnoDB 스토리지 엔진이 사용됩니다. InnoDB는 MySQL 생태계에서 가장 인기 있고 널리 사용되는 스토리지 엔진 중 하나로, 행 수준(row-level) locking을 지원하여 쓰기와 읽기가 혼합된 작업에 대한 동시성을 향상시킵니다.

또한, 최근 개발된 고성능 스토리지 엔진인 MyRocks는 쓰기 중심의(write-intensive) 작업을 처리하는 MySQL의 능력을 더욱 향상시켰습니다.

PostgreSQL은 읽기 중심과 쓰기 중심 작업 모두를 처리하도록 설계되었지만, 읽기 중심 작업에 최적화된 MySQL보다 약간 낮은 성능을 보입니다. 그러나 PostgreSQL은 최근 버전에서 복잡한 쿼리 및 데이터 처리와 관련하여 성능을 향상시켰습니다.

게다가 PostgreSQL은 MySQL에 비해 더 세밀한 인덱싱 시스템을 가지고 있으며, 이는 복잡한 쿼리에 대한 성능을 향상시킬 수 있습니다. 또한, PostgreSQL은 배열과 JSONB와 같은 고급 데이터 유형을 지원하여 데이터 저장 및 검색을 더 효율적으로 할 수 있습니다.

결국, PostgreSQL과 MySQL의 성능은 하드웨어, 데이터 크기, 쿼리 복잡도와 같은 여러 요소에 따라 달라질 수 있습니다.

두 데이터베이스 중에서 선택할 때는 애플리케이션의 특정 요구 사항을 고려하고, 데이터 및 작업 부하와 함께 성능 테스트를 수행하여 가장 적합한 선택을 결정해야 합니다.
→ 즉, 성능 테스트를 수행하여 개발자의 판단 하에 더 적합한 RDBMS를 선택하면 됩니다.

확장성(Scalability)

MySQL과 PostgreSQL 모두 확장 가능하지만, 확장성에 있어서 각각 장단점이 존재합니다.

MySQL은 주로 수평적 확장성이 뛰어나다고 알려져 있습니다. 이는 데이터베이스 클러스터에 노드를 추가함으로써 확장할 수 있다는 의미로, 동시에 많은 연결(a large number of concurrent connections)을 처리해야 하는 웹 애플리케이션에 이상적입니다.

반면, PostgreSQL은 수직적 확장성이 뛰어나다고 알려져 있습니다. 이는 단일 노드에 메모리와 CPU와 같은 자원을 추가함으로써 대량의 데이터 및 처리 능력을 다룰 수 있다는 의미입니다. 또한 샤딩(sharding)과 같은 기술을 통해 수평적 확장도 지원합니다. 샤딩은 대규모 데이터 세트를 여러 노드로 분할할 수 있게 해줍니다. 복잡한 쿼리와 트랜잭션을 요구하는 애플리케이션, 데이터 웨어하우스 및 비즈니스 인텔리전스 작업에는 PostgreSQL이 선호됩니다.

확장성 측면에서는 애플리케이션의 특정 요구 사항을 고려해야 합니다. 많은 수의 동시 연결을 처리해야 하고 수평적 확장성이 필요한 경우, MySQL이 더 나은 선택일 수 있습니다. 그러나 복잡한 트랜잭션과 쿼리가 필요한 경우에는 PostgreSQL이 더 적합할 수 있습니다.

비용(Cost)

2023년 현재, PostgreSQL은 여전히 완전한 오픈 소스이며 커뮤니티 주도로 운영되고 있는 반면, MySQL은 라이선싱과 관련하여 좀 더 복잡합니다. MySQL은 원래 MySQL AB에 의해 상업 제품으로 개발되었으며, 무료 및 유료 버전이 제공되었습니다. 그러다 2010년 오라클이 MySQL AB을 인수하면서 개발자들 사이에서는 오픈 소스 유료화에 대한 우려가 많았습니다. 그러나 원본 MySQL의 여러 오픈 소스 포크 버전들, 특히 MariaDB와 Percona는 이러한 우려를 완화하는 데 도움을 주었습니다.

MySQL을 사용하는 경우는 언제일까요?(When to Use MySQL?)

PostgreSQL은 많은 최첨단 기능을 가지고 있으며 종종 MySQL보다 더 발전된 복잡한 데이터베이스 관리 시스템으로 간주되지만, 단점도 있습니다.

PostgreSQL의 일반적인 약점은 다음과 같습니다:

  1. PostgreSQL은 고급 기능과 능력에도 불구하고 MySQL만큼의 인기와 널리 사용되는 수준에 도달하지 못했습니다. 이로 인해 PostgreSQL 생태계에서 경험 많은 개발자나 데이터베이스 관리자가 적고, 지원하는 서드파티 툴의 수도 적습니다. → 한 마디로 생태계 자체가 MySQL에 비해 작습니다.
  2. 고급 기능 때문에 PostgreSQL은 MySQL보다 설정 및 관리가 더 복잡할 수 있어, 경험 많은 데이터베이스 관리자와 개발자에게 더 적합합니다. → 사용자 편의상 MySQL은 간단하지만 그에 비해 성능은 강력합니다.
  3. 더 복잡한 구조와 기능 때문에 특정 상황에서 PostgreSQL은 MySQL보다 느릴 수 있습니다. PostgreSQL은 특히 메모리와 CPU 사용 측면에서 MySQL보다 더 많은 자원을 요구할 수 있습니다.
  4. PostgreSQL은 오픈 소스이지만, 고급 기능과 증가된 자원 요구로 인해 구현 및 유지 관리 비용이 여전히 높을 수 있습니다.
  5. PostgreSQL은 새로운 클라이언트 연결마다 새로운 프로세스를 포킹하며, 일반적으로 연결 당 약 10MB의 메모리를 할당합니다. 그러나 이러한 아키텍처는 서로 다른 클라이언트 간에 향상된 보안 및 격리 기능을 제공하도록 설계되었으며, 일반적으로 더 나은 성능, 신뢰성 및 확장성을 위한 절충안으로 간주됩니다.
  6. PostgreSQL은 확장성, 표준 준수, 데이터 무결성을 우선시하도록 설계되었습니다. 이러한 기능들은 특히 단순 읽기 중심의 작업에서 MySQL에 비해 성능을 저하시킬 수 있습니다. 그러나 정확한 성능 차이는 데이터의 크기, 쿼리의 복잡성 및 사용되는 하드웨어와 같은 다양한 요소에 따라 달라집니다.

어떤 마이그레이션이 더 일반적인가?(Which migration is more common: MySQL to PostgreSQL or PostgreSQL to MySQL?)

MySQL → PostgreSQL 또는 PostgreSQL → MySQL로의 마이그레이션은 각 조직의 필요와 요구에 따라 다릅니다. 일부 조직은 고급 기능, 더 나은 SQL 준수 및 오픈 소스 호환성을 활용하기 위해 MySQL에서 PostgreSQL로 이전([[MySQL에서 PostgreSQL로 마이그레이션하는 방법]])할 수 있습니다. 또한, PostgreSQL은 금융 서비스, 정부, 데이터 웨어하우징과 같이 성능, 확장성 및 보안이 중요한 특정 산업에서 더 널리 사용됩니다.

반면에, 어떤 회사들은 구현 비용이 낮고, 넓은 커뮤니티 지원 및 MySQL 그 자체로의 간편함 때문에 PostgreSQL에서 MySQL로 이전할 수도 있습니다.

마이그레이션 트렌드는 다양한 이유로 MySQL에서 PostgreSQL로 이동하는 방향입니다. 이러한 지표들은 MySQL에서 PostgreSQL로 전환하는 사람들이 그 반대보다 많다는 것을 의미합니다.

  1. 마이그레이션 도구의 가용성
    MySQL에서 PostgreSQL로 데이터를 이전하는 데 도움이 되는 오픈 소스 및 상업용 마이그레이션 툴이 많이 있습니다. 반면에 PostgreSQL에서 MySQL로 데이터를 마이그레이션을 도와주는 툴이 상대적으로 적습니다.

  2. 온라인 자료
    MySQL → PostgreSQL로 마이그레이션에 대한 온라인 튜토리얼과 자료가 더 많습니다.

  3. 커뮤니티 성장
    PostgreSQL 커뮤니티는 MySQL 커뮤니티보다 빠르게 성장하고 있으며, 이는 PostgreSQL에 대한 관심도가 MySQL보다 증가하고 있음을 나타냅니다.

  4. 오픈 소스 기여
    PostgreSQL에 대한 오픈 소스 기여의 수가 증가하고 있으며, 이는 더 많은 사람들이 이 기술에 시간과 자원을 투자하고 자신의 필요에 유용하다고 판단하고 있음을 나타냅니다.

  5. 기업들의 채택
    NASA, Fujitsu, 미국 연방 항공청(FAA)(관련 뉴스 링크)과 같은 세계 최대의 데이터 집약적인 조직들이 MySQL에서 PostgreSQL로 전환했다고 공개적으로 밝힌 바 있습니다.

  6. 사용자 설문조사
    산업 분석가들과 데이터베이스 전문가들이 수행한 설문조사에 따르면, 더 많은 사람들이 MySQL에서 PostgreSQL로의 전환을 고려하거나 계획하고 있다고 합니다.

이러한 사실들은 MySQL에서 PostgreSQL로의 마이그레이션이 그 반대보다 많이 일어난다는 것을 나타내며, 이는 일부 경우에만 해당할 수 있습니다.

결론(Conclusion)

PostgreSQL과 MySQL은 각기 독특한 기능과 한계를 가진 강력한 관계형 데이터베이스 관리 시스템입니다. 한 시스템을 다른 시스템보다 선호하는 결정은 프로젝트의 특정 요구 사항, 예를 들어 데이터의 성격과 양, 쿼리의 복잡성, 성능 및 확장성 요구에 기반해야 합니다. PostgreSQL과 MySQL 모두 2023년에 더욱 발전할 예정이므로, 그들의 최근 개발 상황을 지속적으로 업데이트 받는 것이 중요합니다.

또한, DBConvert Studio와 같은 도구를 사용하면 MySQL과 PostgreSQL 간에 데이터를 양방향으로 마이그레이션하는 데 도움이 될 수 있습니다. 이러한 도구들은 한 데이터베이스에서 다른 데이터베이스로 데이터를 전송하는 과정을 간소화할 수 있으며, 특히 한 시스템에서 다른 시스템으로 전환을 고려할 때 유용할 수 있습니다.

0개의 댓글