2004년 봄쯤이었나 보다. 단지 Sybase ASE를 많이 사용해 보았다는 이유로(SQL Server 초기 버전은 Sybase의 영향을 많이 받았기 때문에 T-SQL 문법, 저장 프로시저, 시스템 테이블 등이 매우 비슷하다), 그전까지 접속조차 해 본 적이 없는 Microsoft SQL Server 2000을 튜닝하게 되었다.
RDBMS의 기본 원리와 튜닝 기법을 어느 정도는 알고 있었지만, 대부분 오라클과 Sybase ASE에 기반을 둔 것들이었다. SQL Server에 대한 실전 경험이 없었기 때문에, 낮에 새롭게 나타난 문제점을 퇴근 후 밤늦게까지 연구하고서 그다음 날 출근하자마자 해결하고는 했다. 다행히 타 DBMS에 대한 지식과 경험을 바탕으로 순조롭게 진행할 수 있었고 프로젝트는 성공적으로 마무리되었다.
한 달이 채 되지 않는 짧은 기간이었지만, RDBMS를 관통하는 핵심 원리를 이해하면 어떤 제품에서도 해법을 찾아낼 수 있다는 것을 몸소 깨달았다. 그리고 이때 축적된 연구 자료와 프로젝트 결과물을 뼈대로 삼아, 앞으로 살을 붙여 나가서 언젠가는 책으로 엮어내겠다고 마음먹었다.
그로부터 6년이 지난 2010년이 되어서야, 'SQL Server 튜닝, 원리와 해법'이라는 제목으로 책을 출간하게 되었다. 세월이 흐른 만큼 SQL Server도 2005를 거쳐 2008 버전까지 출시되었다. 버전이 높아지고 새로운 기능이 추가되는 모습을 보면서 왠지 뿌듯한 마음도 들었지만, 다른 한편으로는 그동안 연구하고 축적해 온 자료가 점점 낡아지는 게 걱정스러웠다.
혹시 2008 버전을 넘어 새로운 버전이 출시되기라도 하면 도저히 책을 쓰지 못할 것 같았다. 2009년 가을이 끝나갈 즈음, 더는 미룰 수 없다는 생각에 틈틈이 원고를 쓰기 시작했다. 이미 2008 버전이 널리 사용되기 시작했지만, (필자가 생각하기에 SQL 튜닝에 유용한) 주요 기능의 대부분은 2005 버전에 추가되었기 때문에 이 책은 2005 버전을 기준으로 2008 버전의 신기능을 소개하는 형태로 쓰였다.
제목인 'SQL Server 튜닝, 원리와 해법'을 통해 알 수 있듯이, 이 책은 SQL 튜닝에 기본이 되는 핵심 원리를 바탕으로 성능 문제에 대한 해법을 제시하는 데 집중하고 있다. 그밖에 SQL Server가 제공하는 유용한 도구 및 기능에 대해서는 거의 소개하지 않았는데, 이런 내용을 다룬 책들은 이미 시중에 충분히 나와 있다고 생각한다(게다가 새로운 도구와 기능에 대한 일반적인 내용은 온라인 설명서에 잘 설명되어 있다). 필자는 다른 책과의 차별화를 위해 철저하게 SQL 튜닝 관점에서만 접근하고자 노력했다.
이 책의 목차는 다음과 같다.
1. 인덱스 기초
2. 인덱스 활용
3. 조인 원리와 활용
4. 정렬의 최적화
5. 파티션
6. 2005, 2008 버전의 신기능
필자가 생각하기에, SQL 튜닝 전문가로 나아가는 데 반드시 필요한 기초 지식은 인덱스, 조인 그리고 정렬이다. 목차를 보면 알겠지만, 이 책은 이들 요소를 차례대로 다루고 있다. 다시 한 번 강조하지만, (남들이 잘 모르는 신기능과 잔기술을 먼저, 그리고 많이 익히려고 애쓰기보다는) RDBMS 고유의 핵심 원리와 해법을 정확히 이해하고 이를 적시적지(適時適地)에 응용, 활용할 줄 아는 능력이 더 중요하다.
기초가 튼튼한 사람은 어느 순간 실력이 빠르게 향상되는 것을 느낄 것이다. 모쪼록 1장 아니 그전에 '시작하기 전에' 부분을 먼고 읽고서 각 장을 차근차근 머릿속에 담아 나가기 바란다.
지난 7개월 동안 바쁜 프로젝트 일정 속에서도 꾸준히 집필할 수 있도록 응원해 주신 조광원 사장님, 김형태 부사장님 그리고 모든 임원분께 감사드린다. 그리고 출퇴근 시간을 쪼개가며 원고 전체를 세심하게 검토하고 조언을 아끼지 않은 조시형 수석께 특별히 감사의 말을 전한다. 아울러, 어려운 부탁임에도 마다하지 않고 원고 교정에 힘을 보태 준 손진영, 김익서 두 후배 그리고 SQL Server FOI 팀원 모두에게 감사한다.
그리고 사랑하는 아내와 귀여운 두 딸에게는 미안한 마음과 고마움의 뜻을 동시에 전하고 싶다(특히 아내는 바쁜 척하는 아빠 대신 아이들과 놀아주는 것도 모자라 틈틈이 원고를 읽고 오타까지 찾아 주었다. 덕분에, 유치원 교사인 아내는 SQL, 인덱스, 테이블 등의 용어를 이해하게 되었다). 마지막으로, 필자의 인생 롤모델이자 영원한 후원자인 부모님께 진심으로 감사드리며 두 분이 항상 건강하시기를 기원한다.
2010년 7월 31일 정재우
---저자 서문 중에서