카테고리

Show All (635)
ZeLkOvA (346)
Study (45)
Wizard Works (17)
ETC. (226)
Trash Box (0)

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday

최근에 올라온 글

최근에 달린 댓글

글 보관함

MySQL 사용자들이 2년 이상의 개발기간 동안 애타게 기다려 왔던 MySQL 데이터베이스 서버 5.0 버전의 발표가 이제 11월로 다가왔다. MySQL은 많은 버전업에도 불구하고 크게 눈에 띄는 기능상의 변화가 적었다. 하지만 그 동안의 MySQL 사용자들이 다른 데이터베이스 서버에 비해 부족하다고 생각했던 기능들을 이번 5.0 버전에서는 대부분 충족시켜줄 정도로 혁신적인 업그레이드가 이뤄졌다. MySQL AB사가 새로운 도약을 위해 심혈을 기울인 MySQL 5.0에서는 어떠한 변화가 이뤄졌는지 자세히 살펴보자.


MySQL은 3.x 버전에서 본격적으로 사용되기 시작했고 4.x 버전에서 기본 기능들을 안정화시키는 기간을 거쳐 이제는 성숙기에 접어드는 5.0 버전을 발표하기에 이르렀다. 이제까지는 기본 기능들을 안정화시키고 여러 스토리지 엔진의 도입에 따른 혼란을 해결하는데 중점을 뒀었다면 이번 5.0 버전은 그 동안에 쌓은 토대 위에 본격적으로 기능 추가에 주력했다. 5.0 버전에 도입되는 새로운 기능들은 MyISAM이나 InnoDB 등의 특정 스토리지 엔진에만 해당되는 것이 아닌 서버 전반에 모두 적용되도록 설계됐다. 먼저 그동안 MySQL이 어떻게 변화해 왔는지 살펴보고 5.0 버전에는 어떤 기능들이 추가됐는지 알아보자.


MySQL 진화의 역사


MySQL 데이터베이스 서버가 5.0까지 발전하면서 크게 세 번의 메이저 업그레이드가 있었다. 그 첫 번째는 3.23으로의 버전업은 현재 MySQL의 토대가 되었다. 메인 스토리지 엔진이 ISAM 엔진에서 My ISAM 엔진으로 변화됐고 트랜잭션 지원을 위해 InnoDB 엔진과 Berkeley DB를 지원하기 시작했다. 두 번째 메이저 버전업은 4.0으로의 버전업으로 주요 내용은 쿼리 캐시의 지원과 본적적인 풀 텍스트 인덱스의 지원이었고 5.0 이전의 마지막 메이저 버전업인 4.1에서는 서브쿼리의 지원과 UTF-8 유니코드의 지원이 가장 큰 특징이다. <그림 1>에서 주요 기능 변화 내역을 살펴보자.


MySQL 5.0의 주요 기능


MySQL 5.0에서 추가되는 기능들의 특징이라면 그 동안 오라클이나 IBM의 DB2와 같은 상용 데이터베이스 시스템에서 많이 활용되었으나 MySQL에는 없었던 기능들이다. 사실 이런 부분으로 인해 MySQL이 기업환경의 핵심 업무에 적용되는 것을 어렵게 해왔으며 그 만큼 MySQL 사용자들이 오랜 기간 추가되길 요구했던 기능들이다. 이번 5.0 버전에 추가되는 주요 기능은 다음과 같다.


- 스토어드 프로시저(Stored Procedures)와 함수(functions)
- 트리거(Triggers)
- 뷰(Views)
- 인포메이션 스키마(Information Schema)
- 서버사이드 커서(Server-side Cursors)
- 분산 트랜잭션(XA Transactions)
- 아카이브 스토리지 엔진(Archive Storage Engine)
- 페더레이티드 스토리지 엔진(Federated Storage Engine)
- 인스턴스 매니저(Instance Manager)


스토어드 프로시저와 함수


스토어드 프로시저란 일련의 SQL문을 하나의 묶음으로 데이터베이스 서버에 저장하는 기능이다. 이로써 한번 서버에 저장되면 클라이언트는 매번 각각의 SQL문을 보낼 필요가 없이 저장된 스토어드 프로시저를 호출한다. 스토어드 프로시저는 다음과 같은 경우에 특히 유용하다.


• 여러 클라이언트 애플리케이션이 각각 다른 프로그래밍 언어로 작성되었거나 다른 플랫폼에서 작동하지만 동일한 데이터베이스 작업이 필요할 때 • 은행과 같이 보안이 가장 중요한 경우에는 일반적으로 모든 데이터베이스 작업을 스토어드 프로시저로 처리한다. 이로써 애플리케이션이나 데이터베이스 사용자는 테이블에 직접 접근하지 않고 모두 스토어드 프로시저를 통해서만 접근하게 되어 뛰어난 보안성을 보장한다. 또한 하나의 작업단위로 적절히 수행되었는지 로깅을 할 수 있다.


은행의 예와 같이 스토어드 프로시저는 기업의 핵심 업무에 적용되는 데이터베이스에서는 반드시 필요한 기능이며 MySQL의 5.0 이전 버전에서 스토어드 프로시저가 지원되지 않았던 것이 MySQL이 기업시장으로 진출하는데 많은 걸림돌이 되었던 것이다. 이번 버전에서 도입된 스토어드 프로시저는 IBM의 DB2와 같은 SQL2003 표준 문법을 따르며 기능은 아직도 계속 보강되고 있는 중이다. MySQL 5.0에서 스토어드 프로시저의 기본적인 사용법은 다음과 같다.



트리거


트리거에 대한 기본적인 지원은 MySQL 5.0.2 버전부터 포함되었다. 트리거란 테이블에 연결되는 하나의 데이터베이스 오브젝트로서 테이블에 특정 이벤트가 발생하면 동작하게 된다. 예를 들어 다음의 SQL문은 하나의 테이블을 생성한 후 그 테이블에 INSERT에 대한 트리거를 만든다. 생성된 트리거는 테이블에 INSERT가 수행되면 amount컬럼(column)의 합계를 구하게 된다.



현재 트리거의 기능은 계속 추가되는 중이며 최신 베타버전에서 가진 트리거 관련 제한 사항은 다음과 같다.


• 트리거는 CALL을 이용해 스토어드 프로시저를 호출할 수 없다

• INSERT, UPDATE, DELETE 등 하나의 동작에는 하나의 트리거만을 설정할 수 있다. 하지만 하나의 동작에 BEGIN과 END 사이에 여러 SQL문을 넣을 수 있기에 크게 제한되는 부분은 아니다.

• 트리거에서는 START TRANSACTION, COMMIT, ROLLBACK과 같은 트랜잭션 관련 SQL문을 쓸 수 없다.


뷰 뷰는 데이터베이스 사용자가 관계된 테이블이나 정보에 쉽게 접근할 수 있도록 해주며, 또 특정 유저가 테이블의 정보 중 허용된 정보만 볼 수 있도록 하는 권한권리의 용도도 가지고 있다. 다음은 뷰의 기본적인 사용법이다.



MySQL 5.0의 뷰 기능이 가진 주요 제한사항은 다음과 같다.


• SELECT문에서 FROM절에 서브 쿼리를 사용할 수 없다. • SELECT문에서 시스템이나 유저 변수를 참조할 수 없다. • 임시 테이블을 참조할 수 없으면 임시 뷰 역시 사용할 수 없다. • 뷰에서 참조하는 테이블 명은 먼저 존재하고 있어야 한다. • 트리거와 뷰를 연결시킬 수 없다.


인포메이션 스키마


인포메이션 스키마는 데이터베이스의 메타데이터, 즉 데이터베이스, 테이블의 이름, 접속권한 등에 대한 접근을 제공한다. MySQL 5.0에 도입된 인포메이션 스키마는 ANSI/ISO SQL 2003 표준 정의의 11챕터 ‘Schemata’를 따르고 있으며 SQL 2003 표준의 핵심 정의인 ‘Basic Information Schema’를 대부분 만족시킨다. MySQL 5.0에서 인포메이션 스키마에 대한 접근은 일반적으로 사용하는 SELECT문을 통해 이뤄지며 사용법은 다음과 같다.



서버사이드 커서


MySQL 5.0에서는 스토어드 프로시저와 함수에서 사용할 수 있는 단순한 ‘서버사이드 커서’ 기능을 지원한다. 현재 MySQL 5.0에서 지원하는 커서는 읽기 전용이며 스크롤을 지원하지 않고 결과 테이블의 복사본을 만들지 않는다.


MySQL 5.0에서 스토어드 프로시저 또는 함수에서 커서를 사용하려면 반드시 핸들러를 선언하기 전에 커서를 선언해줘야 하며 변수와 조건은 반드시 커서나 핸들러가 선언된 후에 선언되어야 한다. 다음은 MySQL 5.0에서 커서의 사용 예제이다.



분산 트랜잭션


MySQL은 5.0.3 버전부터 분산 트랜잭션을 지원하며 현재는 InnoDB 스토리지 엔진에서만 지원된다. MySQL에 도입된 분산 트랜잭션은 Open Group에서 출판한 『Distributed Transaction Pro cessing: The XA Specification』을 따르고 있다.


분산 트랜잭션을 사용하기 위해서는 클라이언트 측면에서는 XA 키워드를 사용하는 SQL문을 받아들일 수 있어야 한다는 것 이외에는 특별한 제약 사항이 없으며 MySQL의 클라이언트 라이브러리와 링크될 필요도 없다. 현재 MySQL의 커넥터 중에서는 ‘MySQL Connector/J 5.0.0’이 XA를 직접 지원하고 있다. MySQL이 지원하는 분산 트랜잭션에서는 다양한 트랜잭션 가능한 리소스들이 글로벌 트랜잭션 안에서 함께 처리될 수 있도록 하고 있다. 여기서 말하는 트랜잭션 가능한 리소스들이란 MySQL이나 오라클과 같은 관계형 데이터베이스 시스템이거나 기타 다른 것일 수도 있다. 분산 트랜잭션의 예를 들면 다음과 같다.


• 애플리케이션에서 서로 다른 데이터베이스 서버에 영향을 미치는 동작을 수행하는 경우로써 데이터베이스는 MySQL과 오라클이거나 여러 대의 MySQL 서버일 수 있다. 이런 경우 각각의 데이터베이스 서버는 글로벌 트랜잭션의 일부로써 포함되며 각각 별도의 로컬 트랜잭션을 거치지 않고 수행할 수 있다.

• 은행이 계정 정보를 관계형 데이터베이스에 저장하고 현금 인출기를 통해 현금이 인출될 때 계정에서 돈이 인출되는 트랜잭션은 현금인출기와 데이터베이스에서 글로벌 트랜잭션을 통해 이뤄질 수 있다.


분산 트랜잭션에 관한 자세한 내용은 MySQL 레퍼런스 매뉴얼이나 앞에서 언급한 책을 참조하기 바란다.


아카이브 스토리지 엔진


데이터베이스에는 빈번하게 사용되는 데이터뿐만 아니라 의사 결정이나 통계에 사용하기 위해 계속 누적되는 데이터도 많은 부분 존재한다. 이런 경우 데이터베이스의 용량은 필연적으로 계속해서 증가하기 마련이고 이러한 데이터가 차지하는 공간을 줄이고 효율적으로 사용하기 위해 도입된 것이 바로 아카이브 스토리지 엔진이다.


MySQL에서는 그 동안 빈번히 사용되지 않는 대용량 데이터를 처리하기 위해 압축 MyISAM 테이블이라는 것을 사용했다. 아카이브 스토리지 엔진이 압축 MyISAM 테이블에 비해 어떤 장점이 있는지 살펴보자.


• 압축 MyISAM 테이블은 MyISAM 테이블을 압축해 보관하는 것으로써 반드시 테이블이 오프라인 상태여야 했지만 아카이브 테이블은 온라인 상태에서 모든 작업을 할 수 있다.

• MyISAM 테이블을 압축하기 위해서는 DBA가 운영체제 상에서 myisampack이라는 유틸리티를 실행시켜야 했지만 아카이브 테이블은 MySQL 클라이언트 상에서 MySQL SQL 커맨드로써 가능하다.

• 압축 MyISAM 테이블은 오직 SELECT만 가능하였지만 아카이브 테이블은 SELECT와 INSERT가 모두 가능하며 끊김 없는 읽기 메커니즘을 통해 쓰는 동안 읽기 작업이 중단되지 않는다.

• 아카이브 테이블은 일반 MyISAM 테이블에 비해 75%나 용량이 감소하며 압축 MyISAM 테이블에 비해서도 7% 이상 용량이 작다.


페더레이티드 스토리지 엔진


페더레이티드 스토리지 엔진은 오라클의 DB Link와 같은 기능의 스토리지 엔진으로써 원격 서버에 있는 테이블을 로컬 테이블과 같이 사용할 수 있도록 한다. 이를 통해 여러 대의 MySQL 서버를 용도에 따라 구분하고 필요한 경우에는 서로 참조해 사용할 수 있다.


페더레이티드 스토리지 엔진의 사용은 매우 간단한 작업만으로 가능하다. 두 대의 MySQL 서버를 사용한다고 가정하고 어떻게 페더레이티드 스토리지 엔진을 사용할 수 있는지 알아보자. 먼저 실제로 테이블이 생성되고 데이터가 저장될 MySQL 서버에 다음과 같이 테이블을 만들었다.



그리고 이 테이블은 원격에서 사용하는 서버에 다음과 같이 페더레이티드 스토리지 엔진 기반의 테이블을 만들어서 바로 사용할 수 있다.



맨 아래의 COMMENT 부분만 주의해서 보면 쉽게 사용할 수 있으며 COMMENT 부분에 대한 문법은 다음과 같다.


scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name

<화면 1> MySQL 관리자 실행화면


인스턴스 매니저


MySQL 인스턴스 매니저는 TCP/IP 포트 위에서 동작하는 데몬으로써 MySQL 데이터베이스 서버의 인스턴스를 관리하고 모니터링한다. MySQL 인스턴스 매니저를 통해 원격에서도 MySQL 데이터베이스 서버를 시작하고 중단할 수 있다. 또 MySQL 데이터베이스 서버 인스턴스가 중단될 경우 자동으로 재시작시키며 한 서버 내의 여러 개 MySQL 서버 인스턴스를 관리할 수 있다.


현재 MySQL 인스턴스 매니저는 리눅스나 유닉스 계열 운영체제에서만 사용할 수 있으며 환경설정은 /etc/my.cnf 의 [manager] 탭에서 하게 된다. 일반적인 인스턴스 매니저 환경설정은 다음과 같다.



다양한 GUI 도구모음


MySQL의 경우 MySQL 자체에서 제공하는 관리 및 개발도구가 부족했었다. 하지만 MySQL 5.0의 출시에 발맞춰 다양한 GUI 기반 도구들을 발표했다.


- MySQL 관리자(MySQL Administrator)
- MySQL 쿼리 브라우저(MySQL Query Browser)
- MySQL 마이그레이션 툴킷(MySQL Migration Toolkit)


이 세 가지 도구들은 모두 기본적으로 윈도우, 리눅스, 맥 OS X 버전을 제공하고 있으며 주로 5.0에 새로이 추가된 기능들을 활용하기 위해 제작되었다.


<화면 2> MySQL 쿼리 브라우저 실행화면


MySQL 관리자


MySQL 관리자는 기존의 MySQL 컨트롤 센터(MySQL Control Center)를 대체하는 도구로써 로컬이나 원격에서 MySQL을 관리하기 위한 GUI 기반의 관리도구이다. 이전 MySQL 컨트롤 센터에 비해 미려한 인터페이스를 가지고 있으며 특히 모니터링 측면에서 매우 뛰어난 성능을 보여준다. MySQL 관리자의 주요 기능은 다음과 같다


• 로컬이나 원격에서 인스턴스 매니저를 통한 MySQL의 시작과 중단
• 각종 환경설정 파일의 확인과 변경
• 사용자 권한 관리
• MySQL 데이터베이스 서버에 대한 자세한 모니터링
• 스케쥴링 백업 기능
• 원격에서 백업 및 복구
• 리플리케이션 설정과 모니터링
• 서버의 각종 로그에 대한 확인


MySQL 쿼리 브라우저


MySQL 쿼리 브라우저는 MySQL 데이터베이스 서버를 위한 SQL 쿼리를 제작, 실행, 최적화를 위한 편리한 GUI 기반 도구이다.


• 쿼리를 쉽게 생성하고 실행하며 쿼리 히스토리를 저장하는 쿼리 툴바
• SQL 구문을 생성하고 수정하는 스크립트 에디터
• 여러 쿼리의 결과를 비교하며 작업할 수 있는 결과창(Results Window)
• 웹 브라우저와 유사한 인터페이스를 가진 오브젝트 브라우저를 통해 데이터베이스, 북마크, 히스토리 등을 관리
• 테이블을 생성, 삭제하며 쿼리를 위한 테이블이나 필드를 선택할 수 있는 데이터베이스 익스플로러
• 테이블 에디터를 통해 쉽게 테이블을 생성하고 수정하고 삭제 가능


<화면 3> MySQL 마이그레이션 툴킷의 실행화면


MySQL 마이그레이션 툴킷


MySQL 마이그레이션 툴킷은 데이터베이스 마이그레이션 마법사를 기반으로 하는 강력한 GUI 기반 데이터베이스 이전 도구이다. 데이터베이스 마이그레이션 마법사를 그대로 따라하는 것만으로도 기존의 다른 데이터베이스에서 MySQL로 테이블 구조와 모든 데이터 그리고 스토어드 프로시저, 트리거, 뷰까지도 모두 이전할 수 있다. MySQL 마이그레이션 툴킷의 장점은 다음과 같다.


• 오라클, MS SQL 서버, MS Access로부터 쉽고 빠른 데이터베이스 이전
• 다양한 방법으로 테스트된 마이그레이션 툴킷을 사용함으로써 데이터베이스 이전에 따르는 각종 위험의 감소
• 시간과 인력 비용의 감소
• 확장 가능한 모듈기반 아키텍처를 통해 사용자가 원하는 대로 마이그레이션 가능
• 데이터베이스 서버의 플랫폼과는 상관없이 양쪽 모두 원격에 둔 상태로 마이그레이션 가능


기업시장의 문을 두드리는 MySQL 5.0


MySQL은 최근 몇 년간 계속해서 폭발적인 사용자 증가세를 기록해 왔지만 몇몇 주요 기능이 미비해 기업의 핵심 업무에 사용되기는 힘든 면이 많았다. 하지만 2년에 가까운 개발 기간과 8개월 이상의 배타 테스트 기간을 거치며 이제 곧 선을 보이는 MySQL 5.0은 그 동안 아쉬웠던 점들을 거의 모두 채웠다. 이번 기사에서 자세히 알아본 많은 새로운 기능들 외에도 MySQL 5.0은 속도와 안정성 면에서도 주목할 만한 발전을 이뤘으며 기업용 제품에 걸맞는 각종 관리도구도 갖췄다. 이제는 MySQL의 기업시장 공략 준비는 모두 끝났다. 앞으로의 MySQL의 선전을 기대하며 MySQL 5.0의 신기능에 대한 소개를 마친다.

Posted by 성주
, |