본문 바로가기

데이터베이스(DA, AA, TA)/MySQL

[데이터베이스] 개발자와 DBA를 위한 Real MySQL

개발자와 DBA를 위한 Real MySQL

발 행 : 2012년 5월 8일
지은이 : 이성욱
  컴퓨터 과학을 전공하고, 금융권 CRM/DW 프로젝트의 리더로 참여했으며 2년여간 DW용 ETL 도구 개발도 추진했다. NHN의 DB팀에서 MySQL DBA로 근무하면서 데이터 모델링과 DB 운영 및 기술 벤치마킹 그리고 전사 표준화 프로젝트를 진행했다. 현재는 카카오에서 데이터베이스 엔지니어링 업무를 맡고 있으며, <MySQL 성능 최적화>를 공동 번역했다.

책에서 다루는 내용 :
1. 필수 내용

실행 계획/쿼리 작성 및 최적화/확장 검색/사용자 정의 변수/스토어드 루틴/프로그램 연동/데이터 모델링/데이터 타입/제스트 프랙티스

2. 중급 내용
인덱스/파티션/쿼리 종류별 잠금

3. 고급 내용
설치와 설정/아키텍처/트랜잭션과 격리 수준/응급처치

머릿말 내용 발췌 :
2010년에 접어들면서 수많은 NoSQL 도구가 대용량 데이터 저장에 최적인 것처럼 온라인 사이트들을 장식했다. 예전에 오라클 데이터베이스가 그래 왔던 것처럼 말이다. 많은 사람들이 유행을 좇아 NoSQL을 공부하고 있지만 안타깝게도 우리가 익숙하게 사용하고 있는 SNS(Social Networking Service)나 SNG(Social Networking Game) 서비스에서 대용량의 핵심 데이터가 최적화된 MySQL 데이터베이스에서 관리된다는 사실을 알고 있는 사람은 많지 않다.

어떤 사람들은 곧 NoSQL이 RDBMS를 모든 부문에서 대체할 것이라고 생각하기도 한다. 물론 저자도 HBase와 같은 데이터 저장 소프트웨어에 대해서는 상당한 관심을 두고 있다. 카산드라나 HBase, 그리고 몽고DB와 같은 NoSQL 도구가 최고인 것처럼 언급되곤 했지만, 그 인기의 이면에는 부족한 관리 도구나 기대 이하의 성능으로 비롯되는 괴로움들이 있는 것도 사실이다. 그리고 몽고DB나 카산드리나는 유명세에 비하면 사용처가 그다지 많지는 않다. 현재 시점에서 그나마 사람들의 관심을 유지하고 있는 것은 HBase 정도이지 않을까 싶다. HBase를 포함한 NoSQL 도구는 INSERT나 UPDATE와 같은 쓰기 처리가 MySQL에 비해 빠르지만, SELECT와 같은 조회 쿼리는 MySQL 서버 만큼 고성능으로 처리하지 못하는 단점이 있다. 지금으로서는 HBase 같은 NoSQL 도구와 MySQL 서버는 그 용도가 나름 명백히 나뉜다고 볼 수 있다. NoSQL 도구의 사용법뿐 아니라 서비스 특성별로 적절한 솔루션을 선정하는 혜안도 필요한 것이다.

오라클이나 MSSQL과 같은 상용 데이터베이스와 비교해도 MySQL 서버이 성능이나 효율성은 전혀 손색이 없다. 예전에는 서비스의 가입자 수나 사용자의 수에 비례해 데이터의 양이 늘어났지만, 최근에는 소셜 네트워크 관련 기능이 만이 구현되면서 가입자나 사용자의 몇십 배 에서 몇백 배 수준으로 데이터의 양이 늘어나는 경향이 있다. 이처럼 기하급수적으로 늘어나는 데이터를 값 비싼 기업용 대형 장비와 소프트웨어를 사용해 관리하기란 거의 불가능한 일이다. MySQL 서버는 비용에 대한 부담이 없으며, 다른 상용 데이터베이스 서버와 동등하거나 더 우월한 성능을 제공하므로 최근의 소셜 네트워크 관련 업무 여건에 너무도 잘 들어맞는다.

하지만 아직 한국에서는 MySQL의 효용성이 별로 알려져 있지도 않을 뿐더러 주로 사용하는 곳은 일부 포탈 위주의 회사로 제한적이다. 심지어 지금도 MySQL 서버는 설치하고 기본 설정 파일로 기동해서 사용하면 되는 정도의 간단한 데이터베이스로 생각하는 사용자가 많다. 아마도 데이터베이스 관리를 하고 있는 DBA 중에서도 상당수가 그렇게 느끼고 있을지도 모른다. 이제는 MySQL에 대한 그런 선입관을 버려야 할 때다. 예전에 MySQL이 지니고 있던 MyISAM을 벗어나야 할 때이며, MySQL의 InnoDB는 오라클이 지닌 대부분의 기능과 안정성을 제공하고 있다는 사실을 받아들여야 한다. 지금의 MySQL 서버는 예전 MySQL 4.x 버전만큼 단순하지 않으며, 쿼리를 최적화하기 위해 다른 데이터베이스 못지 않은 공부와 준비가 필요하다. SQL 문장에 따옴표 하나를 찍었는지 아닌지에 따라서도 쿼리의 성능은 몇 백배까지 달라질 수 있다. 지금까지 지니고 있었던 생각으로 MySQL 서버를 사용한다면 초당 몇만 쿼리를 처리해 내는 고성능 MySQL 서버는 결코 얻지 못할 것이다.

더이상 MySQL은 커뮤니티나 소셜 네트워크 서비스와 떼어놓을 수 없는 관계에 있다는 것은 누구나 잘 알고 있을 것이다. 하지만 MySQL은 여기서 그치지 않고 빌링이나 결제와 같은 금전적인 처리용으로도 많이 사용되고 있는데, 이는 MySQL의 트랜잭션처리나 안전성이 오라클과 비교해서 전혀 뒤처지지 않음을 의미한다고 볼 수 있다. 사실 MySQL(InnoDB)의 내부 처리 방식은 오라클의 그것과 거의 다르지 않기 때문에 이는 당연한 결과라고 볼 수 있다.