MySQL vs PostgreSQL

이재훈·2024년 10월 12일
0

업무

목록 보기
2/2

회사에서 신규 서비스를 만들기 위해서 기술 스택을 정하는 기간이다. 나는 데이터베이스를 조사하는 역할을 맡아 아래와 같이 정리하였고 PostgreSQL을 선택 후 현재 hammerDB를 사용하여 데이터베이스 부하테스트 진행중에 있다.

해당 내용은 AWS의 문서를 작성한 내용이다.
AWS - MySQL과 PostgreSQL의 차이점은 무엇인가요?

MySQL

데이터를 행과 열이 있는 테이블로 저장할 수 있는 관계형 데이터베이스 관리 시스템이다. 많은 웹 애플리케이션에서 널리 사용된다.

PostgreSQL

MySQL보다 더 많은 기능을 제공하는 객체 관계형 데이터베이스 관리 시스템이다. 데이터 유형, 확장성, 동시성 및 데이터 무결성에 있어 유연성이 더 뛰어나다.

PostgreSQL과 MySQL의 유사점?

PostgreSQL과 MySQL은 모두 관계형 데이터베이스 관리 시스템이다. 공통 열 값을 통해 서로 관련된 테이블에 데이터를 저장한다.

둘 다 구조화된 쿼리 언어(SQL)를 인터페이스로 사용하여 데이터를 읽고 편집 가능

둘 다 오픈 소스이며, 강력한 개발자 커뮤니티 지원 제공

두 제품 모두 데이터 백업, 복제 및 액세스 제어 기능이 내장되어 있음

주요 차이점

ACID 규정 준수

원자성, 일관성, 격리성, 지속성(ACID)는 예상치 못한 오류가 발생한 후에도 데이터베이스를 유효한 상태로 유지하는 데이터베이스 속성이다.

MySQL은 InnoDB 및 NDB 클러스터 스토리지 엔진 또는 소프트웨어 모듈과 함께 사용하는 경우에만 ACID 규정 준수를 제공한다. PostgreSQL은 모든 구성에서 ACID와 완벽하게 호환된다.

동시성 제어

다중 버전 동시성 제어(MVCC)를 사용하면 여러 사용자가 데이터 무결성을 손상시키지 않고 동일한 데이터를 동시에 읽고 수정할 수 있다.

MySQL은 MVCC를 제공하지 않지만 PostgreSQL은 이 기능을 제공한다.

인덱스

데이터베이스는 인덱스를 사용하여 데이터를 더 빠르게 검색한다. 자주 액세스하는 데이터를 다른 데이터와 다르게 정렬 및 저장하도록 데이터베이스 관리 시스템을 구성하여 자주 액세스하는 데이터를 인덱싱할 수 있다.

MySQL은 계층적으로 인덱싱된 데이터를 저장하는 B-tree, R-tree 인덱싱을 지원한다. PostgreSQL 인덱스 유형에는 트리, 표현식, 부분 인덱스 및 해시 인덱스가 포함된다. 크기를 확장할 때 데이터베이스 성능 요구 사항을 세밀하게 조정할 수 있는 더 많은 옵션이 있다.

데이터 유형

MySQL은 순수 관계현 데이터베이스이다. 반면 PostgreSQL은 객체 관계형 데이터베이스이다. 즉, PostgreSQL에서는 데이터를 속성을 가진 객체로 저장할 수 있다. PostgreSQL을 사용하는 것은 데이터베이스 개발자에게 더 작관적이다. PostgreSQL은 배열 및 XML과 같은 다른 추가 데이터 유형도 지원한다.

View

View는 데이터베이스 시스템이 여러 테이블에서 관련 테이블을 가져와서 만드는 데이터 하위 집합이다.

MySQL은 View를 지원하고, PostgreSQL은 고급 보기 옵션을 제공한다. ex) 특정 기간 동안 모든 주문의 합계 금액과 같은 일부 값을 미리 계산하여 구체화된 뷰를 생성할 수 있다. 구체화된 뷰는 복잡한 쿼리의 데이터베이스 성능을 향상시킨다.

저장 프로시저

저장 프로시저는 미리 작성하고 저장할 수 있는 구조화된 쿼리 언어 (SQL) 쿼리 또는 코드 명령문이다. 동일한 코드를 반복해서 재사용할 수 있으므로 데이터베이스 관리 작업에 효율적이다.

MySQL과 PostgreSQL 모두 저장 프로시저를 지원하지만 PostgreSQL을 사용하면 SQL 이외의 언어로 작성된 프로시저를 호출할 수 있다.

트리거

트리거는 데이터베이스 관리 시스템에서 관련 이벤트가 발생할 때 자동으로 실행되는 저장 프로시저이다.

MySQL 데이터베이스에서는 SQL Insert, Update, Delete 문에 Alter, Before 트리거만 사용할 수 있다. 즉, 사용자가 데이터를 수정하거나 전이나 후에 프로시저가 자동으로 실행된다. 반대로 PostgreSQL은 Insted of 트리거를 지원하므로 함수를 사용하여 복잡한 SQL문을 실행할 수 있다.

PostgreSQL과 MySQL 중 하나를 선택하는 방법

두 관계형 데이터베이스는 모두 대부분의 사용 사례에 적합하다.

애플리케이션 범위

PostgreSQL은 쓰기 작업이 빈번하고 쿼리가 복잡한 엔터프라이즈급 애플리케이션에 더 적합하다.

사용자 수가 적은 내부 애플리케이션을 만들거나, 읽기 횟수가 많고 데이터 업데이트가 자주 이루어지지 않는 정보 스토리지 엔진을 만들고 싶다면 MySQL 이 적합하다.

데이터베이스 개발 경험

MySQL은 초보자에게 적합하며 학습 기간이 짧다. 반면 Postgresql이 훨씬 더 어려울 수 있다. 일반적으로 복잡한 인프라 설정 및 문제 해결 경험이 필요하다.

성능 요구 사항

애플리케이션에 잦은 데이터 업데이트가 필요한 경우 PostgreSQL이 더 나은 선택이다. 그러나 데이터베이스를 자주 읽어야 하는 경우에는 MySQL을 사용하는 것이 좋다.

쓰기 성능

MySQL은 쓰기 잠금을 사용하여 실제 동시성을 구현한다. ex) 한 사용자가 테이블을 편집하는 경우 다른 사용자가 테이블을 변경하려면 작업이 완료될 때 까지 기다려야 할 수 있다.

그러나 PostgreSQL에는 읽기-쓰기 잠금이 없는 다중 버전 동시성 제어 (MVCC) 지원이 내장되어 있다. 따라서 쓰기 작업이 빈번하고 동시에 수행되는 경우 PostgreSQL 데이터베이스가 더 잘 작동한다.

읽기 성능

PostgreSQL은 데이터베이스에 연결된 모든 사용자에 대해 상당한 메모리 할당량(약 10MB)을 포함하는 새로운 시스템 프로세스를 생성한다. 여러 사용자를 위해 확장하려면 메모리 집약적 리소스가 필요하다.

반면 MySQL은 여러 사용자를 위해 단일 프로세스를 사용한다. 따라서 MySQL 데이터베이스는 주로 데이터를 읽고 사용자에게 표시하는 애플리케이션에서 PostgreSQL보다 성능이 뛰어나다.

무조건 PostgreSQL이 더 좋을까 ?

gpt의 답변

PostgreSQL은 강력한 기능을 제공하지만, 몇 가지 단점도 있습니다. 아래는 PostgreSQL의 주요 단점들입니다:

복잡한 설정과 유지보수

PostgreSQL은 고급 기능을 많이 제공하기 때문에 설정과 유지 관리가 MySQL보다 더 복잡할 수 있습니다. 이를 처음 다루는 사용자에게는 학습 곡선이 가파를 수 있습니다.

메모리 사용량

PostgreSQL은 데이터를 효율적으로 처리하기 위해 더 많은 메모리를 사용할 수 있는데, 이는 고사양의 서버가 필요할 수 있다는 것을 의미합니다. 따라서 소규모 서버에서는 MySQL이 더 적합할 수도 있습니다.

쓰기 성능

PostgreSQL은 쓰기 성능에서 MySQL보다 상대적으로 느릴 수 있습니다. 특히 트랜잭션이 많이 발생하는 시스템에서는 성능에 차이가 날 수 있습니다.

MySQL에 비해 덜 친숙한 사용자층

MySQL은 웹 호스팅, 워드프레스 같은 대중적인 환경에서 많이 쓰이기 때문에 MySQL 관련 정보와 커뮤니티 지원이 PostgreSQL에 비해 더 활발할 수 있습니다.

윈도우에서의 성능 이슈

PostgreSQL은 리눅스 환경에서 매우 안정적이지만, 윈도우 운영체제에서 사용할 때는 성능이나 안정성 면에서 문제가 발생할 수 있다는 사용자 보고가 있습니다.

대규모 트래픽 처리 성능

PostgreSQL이 기능 면에서 우수하지만, 아주 대규모 트래픽 환경에서는 MySQL이나 다른 DB 시스템에 비해 쓰기 성능에서 약간 뒤처질 수 있습니다.

이런 단점들이 특정 상황에서 중요하게 작용할 수 있지만, PostgreSQL은 여전히 기능성, 확장성 측면에서 매우 강력한 선택입니다.

결론 - 개인적 의견

DB를 어떤 용도로 쓸 것인지 확인 필요

  • 단순 CRUD가 많다 → MySQL
  • 복잡한 쿼리가 많다 → PosgreSQL
  • PostgreSQL을 사용하므로써 장비의 성능을 올려야 할 수 있음 → 비용 증가
  • PostgreSQL를 사용한다면 학습 필요
  • 그럼에도 불구하고 PostgreSQL는 매력적이다!

용어 정리

원자성 (Atomicity)

트랜잭션은 분해가 불가능한 최소의 단위인 하나의 원자처럼 동작한다는 의미. 트랜잭션 내의 모든 연산은 반드시 한꺼번에 완전하게 정체가 정상적으로 수행이 완료 되거나 아니면 어떠한 연산도 수행되지 않은 all or nothing

일관성 (Consistency)

데이터가 항상 일관된 규칙을 따라야 한다는 의미. 트랜잭션이 끝나면, 데이터는 항상 정해진 규칙에 맞게 변해야 한다. ex) 은행 이체 시, 계좌의 잔액이 음수가 되면 안된다. 규칙에 맞게 데이터가 유지되는 것

고립성 (Isolation)

여러 트랜잭션이 동시에 실행돼도 서로에게 영향을 주면 안된다는 개념이다. ex) 두 사람이 동시에 같은 계좌에서 돈을 인출할 때, 한 사람의 트랜잭션이 끝나기 전에 다른 사람의 트랜잭션이 영향을 받지 않게 해야 한다. 서로 독립적으로 동작하도록 하는 것이다.

지속성 (Durability)

트랜잭션이 완료된 후에 시스템이 멈추거나 문제가 생겨도 그 결과는 계속 유지돼야 한다. ex) 은행에서 돈을 송금한 후에 시스템이 갑자기 멈춰도, 그 돈은 여전히 정상적으로 이체된 상태로 남아 있어야 한다.

profile
부족함을 인정하고 노력하자

0개의 댓글