1 MySQL
1.1 MySQL의 배경
- 오픈 소스 데이터베이스이다.
- 1979년 스웨덴의 TcX라는 호사의 터미널 인터페이스 라이브러리인 UNIREG로부터 시작되었다. 사내에서만 사용하다가 1996년이 되어서야 일반인에게 공개되었다.
- 2000년에 TcX에서 MySQL을 개발한 중심인물인 몬티와 데이비드가 MySQL AB사라는 회사로 독립함과 동시에 FPL[1] 라이선스 정책으로 바뀌었다.
- 2006년 최종적으로 현재와 같은 두 가지 라이선스 정책을 취하게 되었다.
- 이 후 선마이크로시스템즈로 인수되고, 오라클로 인수되었다.
- MySQL은 GPL [2]컨트리뷰터와 PHP+Apache의 힘을 얻어 가장 많이 사용되는 오픈 소스 DBMS로 자리 잡았다.
- SQL에 기반을 둔 관계형 DBMS 중 하나이다.
- 작고 빠르다
s MySQL 서버는 다른 DBMS에 비해서 상당히 작고 빠르다. 오라클이나 MS-SQL보다 기능이 적은 것이 단점이지만, 단순한 쿼리를 사용하는 경우에는 상당히 빠르다.
- 누구나 쉽게 설치하고 사용할 수 있다.
s MySQL 서버는 다양한 OS를 지원하기 때문에, 누구나 쉽게 설치하고 따라 할 수 있다. 윈도우, 리눅스, 솔라리스, MacOS, HP-UX, AIX 등등 거의 모든 OS에 설치할 수 있고 95% 이상 호환되므로 OS 전환이 어렵지 않다.
- 개발 속도가 빠르다.
s MySQL은 GPL 라이선스로 오픈 소스이기 때문에, 전 세계 개발자 누구나 참여할 수 있다. C언어와 C++로 구성되어 있고, C언어와 C++언어를 사용하여, 새로운 버전의 DBMS를 만들어 낼 수 있는 것이다.
- Oracle, IBM, Infomix 등의 데이터베이스는 고가이지만, MySQL은 무료이다.
1.3 MySQL의 장점
- MySQL서버는 일반적으로 PostgreSQL보다 빠르다. MySQL 4.0.1은 쿼리 캐시 기술을 통해 read-only site에 대해 최선의 성능을 발휘한다.
- 많은 사용자를 가지고 있다.
- 많은 API를 개발언어에 제공하고 있다.
- Replication[3]은 거의 완벽하게 테스트되었다.
- 풍부한 문서
- Multi-Thread: Context switching과 공용자원 접근 속도가 빠르다.
- Backup이 편리하다(InnoDB 제외): 테이블당 파일 하나의 storage를 갖는다.
- 디스크의 물리적 결함에 의한 손실을 대부분 복구할 수 있는 툴을 제공한다.
- 업그레이드 시 데이터의 덤프 및 리스토어가 불필요하다.
1.4 MySQL의 단점
- 트랜잭션 지원이 완벽하지 않다(MyISAM의 경우 Table locking을 사용한다).
- 사용자정의 함수(UDF)의 사용이 쉽지 않고 유연하지 못하다.
- 다중 테이블에 update가 쉽지 않다(4.0.2에서 수정).
- SUB SELECT가 지원되지 않는다(4.1-alpha버전에서 지원).
- MySQL의 장단점을 살펴보면, MySQL의 최대 단점인 완벽한 트랜잭션을 지원하지 못하고 복잡한 다중질의를 사용할 수 없다는 것으로 인해 MySQL의 많은 장점들을 무시되는 경향이 있다. 이는 기업용 솔루션이나 Mission Critical 한 솔루션 제작에 MySQL의 사용을 주저하게 하는 부분인 것이 사실이다. 그러나 일반적인 솔루션이나 솔루션 제작 시 MySQL의 단점을 보완해 개발한다면 충분히 기업용 솔루션 제작에 사용될 수 있는 명실상부한 오픈 소스의 데이터베이스가 될 것이다.
1.5 MySQL의 경쟁력
1.5.1 MySLQ VS Oracle
- MySQL은 오픈 소스이므로, 가격적인 면에서 오라클보다 유리하다.
- MySQL은 Oracle에 비해 주로 규모가 더 작은 데이터를 관리한다.
- MySQL은 소규모 장비를 확장(Sale-out)해서 사용하기 때문에 데이터 저장 시 드는 비용이 오라클에 비해 저렴하다. 이처럼 수많은 장비를 사용하지 않으니 이에 드는 유지 관리 비용도 저렴하다.
1.5.2 MySQL VS MSSQL
- 라이선스 가격 비용이 MSSQL보다 저렴하다.
- MySQL은 윈도우 서버를 포함한 다양한 플랫폼에서 사용할 수 있다. 하지만 MSSQL은 오직 윈도우 계열의 플랫폼에서만 사용 가능하다.
- 보통 우리나라에서는 윈도우 기반의 게임 서버는 주로 윈도우 기반의 MSSQL을 사용하는 경우가 많고, 자바 기반의 웹 서비스에서는 MySQL이 주로 사용된다.
1.6 MySQL 버전별 차이점
버전 |
변경내용 |
3.23 버전 |
s 대용량 파일과 더 나은 SQL 지원을 위해 MyISAM스토리지 엔진의 지원 s 로우 레벨 락킹과 오라클과 비슷한 구조를 가진 트랜잭션 지원 스토리지 엔진인 InnoDB의 탑재 s 트랜잭션 지원을 위해 Berkeley DB라이브러리를 스토리지 엔진으로 사용 가능 s 마스터/슬래이브 구조의 리플리케이션 지원 s 기본적인 폴 텍스트 인덱스의 지원 |
4.0 버전 |
s InnoDB엔진이 기본 바이너리에 포함 s 쿼리와 완전한 결과 값을 캐싱하는 쿼리 캐시를 도입함으로써 큰 폭으로 성능 향상 s 폴 텍스트 인덱스를 통해 Boolean 및 문장 검색이 가능해지면서 본격적인 폴 텍스트 인덱스 지원 s Merge 테이블에서 Insert와 Auto Increament 지원 s Select문에서 UNION 사용 가능 s 다중 테이블에 대한 DELETE 사용 가능 s 임베디드 서버 라이브러리인 Libmysqld 지원 s 동적으로 서버 변수의 설정이 가능해 짐으로써 서버의 재 시작 없이 설정의 변경이 가능해 짐 s 리플리케이션에 대한 대폭적인 수정 및 안정화 |
4.1 버전 |
s Prepared statement와 parameter binding을 지원하는 더 빠른 서버/클라이언트 간 프로토콜 사용 s Heap(memory)테이블에 B-Tree 인덱스를 지원함으로써 훨씬 빨라진 검색 가능 (이전 버전까지는 Heap 테이블에서는 hash 인덱스만을 지원) s MyISAM 스토리지 엔진에서 OpenGIS 기반의 지리정보 데이터의 처리를 지원 s SSL을 통해 보안이 강화된 리플리케이션을 지원 s 새로운 서버/클라이언트 라이브러리를 통해 한 번에 다수의 Warning을 처리할 수 있게 되어 벌크 데이터 삽입 시 발생하는 경고를 훨씬 편리하게 추적 가능 s 다양한 지역 언어를 완벽하게 지원하기 위해서 MySQL은 UTF-8과 UCS-2 캐릭터 셋을 지원 s 캐릭터 셋을 데이터베이스, 테이블 그리고 칼럼 단위로 지정 가능해 짐으로써 다중 언어를 지원하는 웹사이트 등의 개발 시 훨씬 유연한 작업 가능 s 커넥션 별 타임 존 설정이 가능해져 접속하는 클라이언트 별로 다른 타임 존 사용 가능 s GROUP_CAT() 기능이 추가되어 그룹핑된 row들 사이에서 단일 결과 값을 편리하게 얻어낼 수 있게 됨. |
5.x 버전 |
s 스토어드 프로시저와 함수 s 인스턴스 매니저 s 페더레이티드 스토리지 엔진 s 아카이브 스토리지 엔진 s 분산 트랜잭션 s 서버사이드 커서 s 인포메이션 스키마 s 뷰, 트리거 |
[1] Free Public License
[2] General Public License: 자유 소프트웨어 재단에서 만든 자유 소프트웨어 라이선스이다. GPL은 가장 널리 알려진 강한 카피레프트 사용 허가이며, 이 허가를 가진 프로그램을 사용하여 새로운 프로그램을 만들게 되면 파생된 프로그램 역시 같은 카피레프트를 가져야 함.
[3] 복제: 데이터베이스 작업을 분산시키기 때문에 처리의 효율화와 백업의 수단임. 원본 데이터베이스를 Master, 복사본을 Slave라고 부름.
'와사비크래커 IT Tip > DB' 카테고리의 다른 글
[DB] 저장 프로시저(Stored Procedure) (0) | 2020.08.26 |
---|---|
[DB] MySQL 환경 설정 (0) | 2020.08.25 |
[DB] SQL (Structured Query Language) (0) | 2020.08.24 |
[DB] 관계 대수와 관계 해석 (0) | 2020.08.24 |
[DB] RDBMS (0) | 2020.08.21 |