관계형 데이터베이스: MySQL, PostgreSQL, SQLite 모두 관계형 데이터베이스 관리 시스템(RDBMS)이다. 공통 열을 통해 관련된 테이블에 데이터를 저장하며 SQL을 사용하여 데이터를 읽고 편집할 수 있다.
오픈소스: 세 시스템 모두 오픈소스이며, 강력한 개발자 커뮤니티의 지원을 받는다.
ACID 지원: 이 세 시스템은 트랜잭션 관리에 있어 ACID(원자성, 일관성, 고립성, 지속성) 규정을 지원한다.
2.1 ACID 규정 준수
MySQL: ACID는 InnoDB와 같은 특정 스토리지 엔진을 사용할 때만 준수된다.
PostgreSQL: 모든 구성에서 완전한 ACID 규정을 준수한다.
SQLite: 기본적으로 ACID 준수를 제공하며, 간단한 트랜잭션 관리를 지원한다.
2.2 동시성 제어
MySQL: 롤백 세그먼트를 활용해 MVCC(다중 버전 동시성 제어)를 구현한다.
PostgreSQL: Pessimistic Lock을 사용하는 MGA(Multi-Generation Architecture)로 MVCC를 지원하며, 동일한 데이터를 여러 사용자가 동시에 안전하게 읽고 수정할 수 있다.
SQLite: 단일 쓰기 잠금을 사용하며, 다중 읽기는 가능하지만 동시 쓰기 성능이 제한적이다.
2.3 인덱스
MySQL: B-트리, R-트리 인덱스를 지원한다.
PostgreSQL: 다양한 인덱스(B-트리, 해시, 표현식 인덱스 등)를 제공해 더 유연한 쿼리 최적화가 가능하다.
SQLite: 기본적으로 B-트리 인덱스를 사용하지만, 기능이 제한적이다.
2.4 데이터 유형
MySQL: 기본적인 숫자, 문자, 날짜, JSON 데이터 유형을 지원한다.
PostgreSQL: 기하학, 배열, 범위 등 복잡한 데이터 유형과 사용자 정의 데이터 타입을 지원한다.
SQLite: 단순한 텍스트, 정수, 실수, BLOB(Binary Large Object) 유형만 지원한다.
2.5 보기(View)
MySQL: 일반 보기를 지원하지만, 고급 옵션은 제한적이다.
PostgreSQL: 구체화된 뷰(Materialized View)를 포함한 다양한 고급 뷰를 지원한다.
SQLite: 보기를 지원하지만, 구체화된 뷰는 제공되지 않는다.
2.6 저장 프로시저
MySQL: SQL로 작성된 저장 프로시저를 지원한다.
PostgreSQL: SQL 외에도 다른 언어로 작성된 저장 프로시저를 호출할 수 있다.
SQLite: 저장 프로시저를 직접적으로 지원하지 않는다.
2.7 트리거
MySQL: AFTER 및 BEFORE 트리거만 지원한다.
PostgreSQL: INSTEAD OF 트리거를 지원해 더 복잡한 동작을 처리할 수 있다.
SQLite: 기본적인 트리거를 지원하지만 기능이 제한적이다.
3.1 성능 요구사항
읽기 성능: MySQL이 더 나은 읽기 성능을 제공하는 경향이 있다.
쓰기 성능: PostgreSQL이 더 나은 쓰기 성능을 제공한다.
SQLite: 경량 애플리케이션에 적합하며, 대용량 트랜잭션 처리에서는 성능이 제한적이다.
3.2 애플리케이션 범위
MySQL: 프로토타입, 소규모 애플리케이션, 읽기 위주의 애플리케이션에 적합하다.
PostgreSQL: 복잡한 쿼리와 대규모 엔터프라이즈 애플리케이션에 적합하다.
SQLite: 임베디드 시스템이나 단일 사용자 데스크톱 애플리케이션에 적합하다.
3.3 개발 경험
MySQL: 초보자가 쉽게 접근할 수 있고 학습 곡선이 완만하다.
PostgreSQL: 복잡한 설정과 고급 기능으로 인해 초보자에게는 다소 어려울 수 있다.
SQLite: 설정이 거의 필요 없으며 가벼운 애플리케이션에 적합하다.
MySQL은 순수 관계형 데이터베이스로, 빠른 읽기 성능을 제공하며 초보자가 접근하기 쉽습니다. InnoDB 스토리지 엔진을 사용할 때만 ACID를 완벽히 준수하며, B-트리 및 R-트리 인덱스를 지원합니다. 간단한 보기와 트리거만 제공하지만, 소규모 애플리케이션이나 읽기 위주의 시스템에 적합합니다.
PostgreSQL은 객체 관계형 데이터베이스로, 복잡한 쿼리와 대규모 애플리케이션에 적합 합니다. 기본적으로 ACID를 준수하며, 다양한 인덱스(B-트리, 해시, 표현식 인덱스 등)와 구체화된 뷰를 지원합니다. INSTEAD OF 트리거와 다수의 언어로 작성된 저장 프로시저도 활용할 수 있어 고급 기능이 풍부합니다.
SQLite는 경량의 관계형 데이터베이스로, 임베디드 시스템이나 단일 사용자 애플리케이션에 적합합니다. 설정이 거의 필요 없으며, 기본적인 B-트리 인덱스를 지원하지만 성능이나 기능이 MySQL과 PostgreSQL에 비해 제한적입니다.