본문 바로가기

와사비크래커 IT Tip/DB

[DB] MySQL

728x90
반응형

1     MySQL

1.1    MySQL의 배경

-      오픈 소스 데이터베이스이다.

-      1979년 스웨덴의 TcX라는 호사의 터미널 인터페이스 라이브러리인 UNIREG로부터 시작되었다. 사내에서만 사용하다가 1996년이 되어서야 일반인에게 공개되었다.

-      2000년에 TcX에서 MySQL을 개발한 중심인물인 몬티와 데이비드가 MySQL AB사라는 회사로 독립함과 동시에 FPL[1] 라이선스 정책으로 바뀌었다.

-      2006년 최종적으로 현재와 같은 두 가지 라이선스 정책을 취하게 되었다.

-      이 후 선마이크로시스템즈로 인수되고, 오라클로 인수되었다.

-      MySQL은 GPL [2]컨트리뷰터와 PHP+Apache의 힘을 얻어 가장 많이 사용되는 오픈 소스 DBMS로 자리 잡았다.

1.2    MySQL의 특징

-      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 테이블에서 InsertAuto Increament 지원

s Select문에서 UNION 사용 가능

s 다중 테이블에 대한 DELETE 사용 가능

s 임베디드 서버 라이브러리인 Libmysqld 지원

s 동적으로 서버 변수의 설정이 가능해 짐으로써 서버의 재 시작 없이 설정의 변경이 가능해 짐

s 리플리케이션에 대한 대폭적인 수정 및 안정화

4.1

버전

s Prepared statementparameter binding을 지원하는 더 빠른 서버/클라이언트 간 프로토콜 사용

s Heap(memory)테이블에 B-Tree 인덱스를 지원함으로써 훨씬 빨라진 검색 가능

(이전 버전까지는 Heap 테이블에서는 hash 인덱스만을 지원)

s MyISAM 스토리지 엔진에서 OpenGIS 기반의 지리정보 데이터의 처리를 지원

s SSL을 통해 보안이 강화된 리플리케이션을 지원

s 새로운 서버/클라이언트 라이브러리를 통해 한 번에 다수의 Warning을 처리할 수 있게 되어 벌크 데이터 삽입 시 발생하는 경고를 훨씬 편리하게 추적 가능

s 다양한 지역 언어를 완벽하게 지원하기 위해서 MySQLUTF-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