_D_ata_B_ase _M_anagement _S_ystem | |||
{{{#!wiki style="margin: 0 -10px;" {{{#!folding [ 주요 DBMS ] {{{#!wiki style="margin-bottom: -15px;" | |||
그 외 DBMS |
||<-2><table width=400><table align=right><table bordercolor=#00758F><table bgcolor=#ffffff,#1f2023><color=#00758F> MySQL ||
<colbgcolor=#ffffff,#1f2023><colcolor=#00758F> 최초 개발사 | MySQL AB |
개발사 | 오라클 |
발표일 | 1995년 5월 23일 |
라이선스 | GPL v2[1] 상용 라이선스[2] |
| |
[clearfix]
1. 개요
1995년에 발표된 오픈 소스 RDBMS. '마이에스큐엘'이라고 읽는다. 'SQL' 부분을 '스큐엘'로 읽는게 공식인[3] PostgreSQL과는 달리 MySQL은 SQL을 '에스큐엘'로 끊어서 읽는 게 공식으로 정해진 발음이다. 상징 동물은 돌고래이다.최초 제작사는 스웨덴의 MySQL AB였는데, 2008년에 썬 마이크로시스템즈에게 10억 달러에 인수되었고, 이후 2010년에 오라클이 썬을 72억 달러에 인수하면서 같이 넘어갔다. 따라서 MySQL의 소유주는 오라클이다. 그런데 오라클은 자체 상용 RDBMS인 오라클 데이터베이스를 가지고 있고, 오픈 소스에 대해 호의적이지 않은데다 프로그램이 갈수록 복잡해지고 있어서 MySQL 사용자들 사이에서도 불안감이 커지고 있다.
그래서 오픈 소스 진영에서 MySQL을 모태로 MariaDB라는 RDBMS를 만들었다. 현재 대부분의 리눅스 배포판 들은 MySQL과 MariaDB를 둘 다 기본적으로 지원하고 있다.
2. 라이선스
라이선스는 제품 종류에 따라 GPL과 자체적인 상용 라이선스 두 가지가 적용된다.무료 버전은 GPL로 커뮤니티 에디션(Community Edition)이라는 이름이고, 유료 버전은 Standard, Enterprise, Cluster Carrier Grade라는 세 가지 제품군으로 되어 있다. 유료 버전의 연간 사용료는 $2,000 ~ $10,000 달러 사이이다. 기본적으로 오픈 소스 소프트웨어이므로 무료 버전과 유료 버전 모두 필요 시 소스 코드를 고쳐 쓸 수도 있지만, 무료 버전은 GPL이 적용되어 있어 소스 코드를 수정 후 고객에게 납품할 경우에는 수정된 코드도 함께 제공해야 한다. 납품하는 것이 아니고 자체적으로 사용하는 경우에는 소스 코드를 수정하더라도 공개 의무가 없다. 유료 버전은 자체 상용 라이선스이기 때문에 수정한 소스 코드의 공개 의무가 없다. 유료 버전에는 공식 고객 지원도 포함되어 있다.
무료 GPL 버전도 개인이나 기업이 사용하는 데는 전혀 문제가 없고, 영리 목적으로 솔루션을 데이터 저장 및 DB 운용 목적으로 사용하더라도 아무 문제가 없다. 문제가 될 수 있는 상황은, MySQL 소프트웨어를 가져다가 그 소스 코드를 대폭 수정해서 고객에게 납품하는, 즉 "수정해서 배포하는" 경우에 수정한 소스 코드까지 모두 공개해야 하는 GPL의 제약 사항을 지키고 싶지 않은 경우를 말하는 것이지, 기업에서 영리적 목적의 서비스를 개발할 때 사용하는 "영리" 목적을 가리키는 게 아니다. 인터넷 서비스 회사 같은 경우 보통 서비스에서는 소프트웨어를 수정했든 안 했든 소프트웨어는 서버에서 돌아갈 뿐이지 직접 배포되지 않기 때문에 GPL 버전을 사용해도 소스를 공개할 필요가 없다. GPL은 소프트웨어를 배포할 때 소스 코드를 같이 배포하는 조건일 뿐, API를 통한 입/출력만 외부에 공개되는 경우에는 소스 코드를 공개할 의무가 없다.[4] 또 MySQL 소프트웨어를 배포해야 하는 상황이라고 해도, 수정 내용을 GPL에 따라 배포하면서도 얼마든지 영리를 추구할 수 있다[5]. 하지만 종종 오라클이나 오라클의 리셀러들은 고객에게 이런 사실을 정확히 알리지 않은 채 "영리 목적"으로는 유료 버전을 써야 한다고 공포 마케팅을 하는데 사실과 다르다. GPL이 정확히 어디까지 허용하는지 모르기 때문에 하는 소리다.
커뮤니티 버전과 상용 버전의 차이는 기술 지원만 있는 것이 아니라 백업, 모니터링, 고가용성(High-Availability, HA) 등의 고급 기능들도 있다.
참고로 오픈 소스 소프트웨어들은 이렇게 상업화하는 경우가 많다. 리눅스, 오픈오피스, 각종 서버 관련 프로그램 등. 기업에서 중요한 것은 돈이 들더라도 문제가 생겼을 때 빠르게 해결할 수 있어야 하는데, 오픈 소스 무료 프로그램은 그런 면에서 단점이 있다. 물론 오픈 소스 커뮤니티에서 지지고 볶고 하면 답이 나오지만, 시간이 돈인 기업에서 그런 짓을 하지 않는다. 그리고 무엇보다도 오픈 소스 진영에서도 결국은 돈이 들어와야 개발을 이어갈 수 있다.
기업 입장에서 상용화된 오픈 소스 소프트웨어는 일반 상용 소프트웨어보다 저렴한 비용을 내며 사후 지원을 받을 수 있어 좋고[6], 오픈 소스 진영 입장에서 고객 지원에 대한 요금 부과는 후원 없이 수익 수단이 생겨서 좋아 일석이조다. 다만 MySQL의 경우, 이와 같은 서비스를 제공하는 곳이 오픈 소스의 적인 오라클이다 보니 썩 호의적이지는 않다.
3. 이용 현황
점유율은 상당히 높다. 설치형 블로그나 게시판 등등 거의 대부분의 CMS(컨텐츠 관리 시스템)가 MySQL을 지원한다. 한국에서는 제로보드와 그누보드가 이걸 지원하면서 폭발적으로 점유율을 높였고, 현재는 라이믹스나 XpressEngine도 MySQL을 지원한다. 세계적으로도 워드프레스나 Joomla, Drupal, phpBB, 미디어위키 등의 유명한 CMS에서 사용되고 있다. 전통적으로 리눅스에 설치하는 APM 패키지(Apache+PHP+MySQL)에 기본 포함될 정도로 인기가 많다. 물론 윈도우용도 있다.그런데 오라클에 넘어간 이후로 MySQL에서 발을 빼는 기업들이 생겼다. 2010년부터 시작된 구글에 대한 오라클의 Java 저작권 소송을 보고 저작권 분쟁 위협을 느낀 일부 기업들은 서서히 MySQL을 걷어내고 MariaDB, PostgreSQL 등으로 넘어갔다. 그러나 예상과 달리 오라클은 MySQL에 대해서는 저작권 분쟁을 일으키지 않아서[7] 이런 불안감은 점차 사그러들고 있다. 그래서 현재는 오라클 DB 다음으로 2번째 RDBMS 자리를 차지하고 있다.[8]
4. MySQL에서 지원하는 엔진 종류
- InnoDB: MySQL 8.3의 기본 스토리지 엔진이다. InnoDB는 사용자 데이터를 보호하기 위한 커밋, 롤백 및 충돌 복구 기능을 갖춘 MySQL용 트랜잭션 안전(ACID 호환) 스토리지 엔진이다. InnoDB 행 수준 잠금 및 Oracle 스타일의 일관된 비잠금 읽기는 다중 사용자 동시성과 성능을 향상시킨다. InnoDB는 기본 키를 기반으로 하는 일반 쿼리에 대한 I/O를 줄이기 위해 클러스터형 인덱스에 사용자 데이터를 저장한다. 데이터 무결성을 유지하기 위해 InnoDB는 FOREIGN KEY 참조 무결성 제약 조건도 지원한다.
- MyISAM: 이 테이블은 설치 공간이 작다. 테이블 수준 잠금은 읽기/쓰기 작업 부하의 성능을 제한하므로 웹 및 데이터 웨어하우징 구성에서 읽기 전용 또는 대부분 읽기 작업 부하에 자주 사용된다. 예전에 MySQL에서 많이 쓰였던 엔진으로, 쓰기 쉽고 가볍지만 트랜잭션 불가하고, 내용이 변경/삭제될 경우 찌꺼기(Overhead)를 남기고, 과부하가 걸리면 테이블이 와장창 깨진다.
- Memory: 중요하지 않은 데이터를 빠르게 조회해야 하는 환경에서 빠른 액세스를 위해 모든 데이터를 RAM에 저장한다. 이 엔진은 이전에는 HEAP 엔진으로 알려져 있다. 사용 사례가 감소하고 있다. 왜냐하면 버퍼 풀 메모리 영역을 갖춘 InnoDB 엔진은 대부분 또는 모든 데이터를 메모리에 유지하는 범용적이고 내구성 있는 방법을 제공하며, NDBCLUSTER 엔진은 대규모 분산 데이터 세트에 대한 빠른 키-값 조회를 제공하고 있기 때문이다.
- CSV: 해당 테이블은 실제로 쉼표로 구분된 값이 포함된 텍스트 파일이다. CSV 테이블을 사용하면 CSV 형식으로 데이터를 가져오거나 덤프하여 동일한 형식을 읽고 쓰는 스크립트 및 애플리케이션과 데이터를 교환할 수 있다. CSV 테이블은 인덱싱되지 않기 때문에 일반적으로 일반 작업 중에는 InnoDB 테이블에 데이터를 유지하고 가져오기 또는 내보내기 단계에서는 CSV 테이블만 사용한다.
- ARCHIVE: 이 컴팩트하고 인덱싱되지 않은 테이블은 거의 참조되지 않는 기록, 아카이브 또는 보안 감사 정보를 대량으로 저장하고 검색하기 위한 엔진이다.
- Blackhole: Blackhole 스토리지 엔진은 Unix /dev/null 장치와 유사하게 데이터를 허용하지만 저장하지 않는다. 쿼리는 항상 빈 집합을 반환한다. 이러한 테이블은 DML 문이 복제본 서버로 전송되지만 원본 서버가 자체 데이터 복사본을 유지하지 않는 복제 구성에서 사용할 수 있다.
- NDB(NDBCLUSTER라고도 함): 이 클러스터형 데이터베이스 엔진은 가능한 최고 수준의 가동 시간과 가용성이 필요한 애플리케이션에 특히 적합하다.
- Merge: MySQL DBA 또는 개발자가 일련의 동일한 MyISAM 테이블을 논리적으로 그룹화하고 이를 하나의 개체로 참조할 수 있다. 데이터 웨어하우징과 같은 VLDB 환경에 적합하다.
- Federated: 별도의 MySQL 서버를 연결하여 여러 물리적 서버에서 하나의 논리적 데이터베이스를 생성하는 기능을 제공합니다. 분산 또는 데이터 마트 환경에 매우 적합하다.
- Example: 이 엔진은 새로운 스토리지 엔진 작성을 시작하는 방법을 보여주는 MySQL 소스 코드의 예제 역할을 한다. 이는 주로 개발자의 관심사이다. 스토리지 엔진은 아무 일도 하지 않는 "stub"이다. 이 엔진을 사용하여 테이블을 생성할 수 있지만 테이블에 데이터를 저장하거나 검색할 수는 없다.
5. 버전
1995년 5월 23일에 첫 버전이 출시되었고, 2018년 4월 19일에 8.0 버전이 발표되었다. 8.0으로 업데이트되면서 새로운 기능을 넣기 위해 하위 호환을 많이 포기했으므로, 버전 업데이트 시 주의할 필요가 있다.버전 목록 | |||||
버전 | 최초 배포일 | 최신 버전 | 최신 버전 배포일 | 지원 종료 | |
5.1 | 2008.11.14. | 5.1.77 | 2015.08.17. | 2013년 12월 | |
5.5 | 2010.12.03. | 5.5.63 | 2018.12.21. | 2018년 12월 | |
5.6 | 2013.02.05. | 5.6.51 | 2021.01.20. | 2021년 2월 | |
5.7 | 2015.10.21. | 5.7.43 | 2023.06.21. | 2023년 10월 | |
8.0 | 2018.04.19. | 8.0.* | 현재 | 2026년 4월 |
오래된 CMS를 아직까지 사용하는 경우에는 4.0대 MySQL 버전을 사용하는 경우도 있는데, 예를 들면 제로보드와 같이 EUC-KR을 사용하는 CMS는 4.1 이후 버전을 지원하지 않기 때문이다. 최신 CMS들은 UTF-8를 지원하기 때문에 이런 문제가 없다.
이모지에는 3바이트짜리 이모지도 있고 4바이트짜리 이모지도 있는데, 4바이트짜리 이모지를 지원하려면 MySQL 버전이 최소 5.5는 되어야 한다.[9] 인코딩 옵션에 utf8mb4라는 것이 있으면 4바이트 이모지를 정상적으로 지원하는 MySQL 버전이라고 볼 수 있다. 이렇게 된 이유는 MySQL 쪽에서 최적화를 위해 3바이트까지만 저장되는 BMP만 지원하다가 나중에 4바이트짜리 이모지가 쓰이기 시작하면서 부랴부랴 추가했기 때문이다.
8.0.28 버전에서 2038년 문제에 대한 일부 개선이 있었다.
TIMESTAMP 와 관련된 함수만 해당 문제가 해결되었으며, DATA TYPE 인 TIMESTAMP 의 경우 여전히 문제가 해결되지 않았다.
이에 대한 개선 여부는 불확실하다.
실제 MySQL 8.0.28 Release Notes 에서도, `2038-01-19 03:14:07.999999` 를 초과하는 값을 저장할 필요가 있는 경우, TIMESTAMP 대신 DATETIME 을 이용하라고 권고하고 있다.
6. 관련 문서
[1] 커뮤니티 에디션[2] 표준, 엔터프라이즈, 클러스터[3] 정확히는 Post+Gres+Q+L로 끊어 읽는 것이다. SQL의 S를 앞과 합쳐 단어처럼 읽어버린다.[4] 예를 들어 구글은 오래전부터 MySQL를 사용해 왔고, 현재는 MariaDB로 옮겨 갔으나 유료 라이선스를 구입해서 쓰고 있는 것도 아니다. 구글은 구글의 서비스에 맞춰 MySQL/MariaDB의 많은 부분을 수정해 사용하고 있다고 알려져 있지만, 자발적으로 수정 사항을 개발자들에게 제출한 것을 제외하면 구글이 내부적으로 정확히 어떻게 수정한 버전을 쓰고 있는지 공개된 적이 없다. 구글은 GPL 버전을 수정했는데도 소스 코드를 공개하는 이유는 그 DB 소프트웨어를 배포하지 않기 때문이다. 단, LGPL이나 AGPL의 경우에는 조금 다르다. 자세한 내용은 GPL 문서 참고.[5] 많은 SI 외주 업체는 소스 코드까지 모두 납품을 하므로 문제가 되지 않는다. 또 소스 코드가 공개되지 않은 소프트웨어를 배포하더라도 그 소스 코드가 MySQL의 소스 코드나 MySQL에서 파생된 작업이 아니면 GPL의 공개 범위에 들어가지 않아 문제가 되지 않는다.[6] 오라클의 오라클 데이터베이스나 마이크로소프트의 MS SQL Server는 정말 억 단위의 비용이 나온다.[7] 앞에서 말한 GPL 관련한 공포 마케팅은 계속되고 있으나 이는 MySQL AB 시절부터 있었기 때문에 오라클이라서 새롭게 일어났다고 보기는 힘들다.[8] RDBMS의 세계 시장 점유율 도표[9] SMP가 이 버전에서부터 지원된다.