[SQL 레벨업 리뷰]
#1
최근 데이터베이스 분야는 Big Data, Machine Learning, 인공지능 등의 새로운 패러다임과 결합해 눈부시게 발전하고 있다. 그런데 이제 와서 구닥다리 관계형 데이터베이스(RDB)의 구조와 작동 원리를 공부할 필요가 있을까? 그 데이터베이스를 다루는 문장(SQL)의 최적화 방법론은 또 어떠한가? 백번 양보해서 SQL 입문서 정도는 한 번쯤 봐줄 수 있다고 가정해도 이후 시간과 노력을 들여서 "레벨업"까지 해야 할 필요가 있을까?
#2
IT 분야는 유행이 빠르게 변한다. 하루가 멀다 하고 등장하는 신기술들의 속도와 용어의 범람을 지켜보노라면 아찔한 위기감과 동시에 피로감이 들게 마련이다. 그래서 이 분야에서 내공이 깊은 사람일수록 유행에 신경 쓰기보다는, 자신이 좋아하는 분야를 찾아서 그 하나의 원리를 깊이있게 파고드는 경우가 많다. 결국, 대부분의 기술은 어느 정도 유사한 방식으로 문제를 해결하며, 학습자는 자신이 체득한 원리를 기반으로 유사분야를 어렵지 않게 익힐 수 있기 때문이다.
데이터베이스를 깊이있게 공부하기는 사실 쉽지 않다. 기술 입문이든 실무활용이든 정보 자체는 인터넷 검색엔진에도 넘치게 많지만, 초보자가 입문단계를 막 벗어난 이후에 빠르게 중고급자로 도약하기 위한 효율적인 정보는 상당히 제한적이기 때문이다.
인기 있는 데이터베이스인 Oracle의 경우, 입문서 한 권을 갓 떼고 난 초보자에게 주어지는 학습 선택권이 너무 많고 그 배움의 난이도도 이전과는 다르게 수직적으로 상승한다. 예를 들면 학습자는 Oracle의 백업과 복구 같은 관리영역을 공부해나갈 수도 있고, SQL 튜닝기법을 살펴보거나 오라클 내부 동작 구조를 찾아볼 수도 있다. 그런데 오라클의 내부 구조를 이해하는 일이나 SQL 튜닝 같은 내용은 초보자들이 접근하기에는 만만치 않은 난이도를 자랑한다. 그래서 꽤 많은 데이터베이스 입문자들이 초급과 중/고급 사이에 격차를 감당하지 못하고 좌절하게 된다.
여기에 혼란을 가중시키는 것은 적합한 교재 선택의 어려움이다. 인터넷 서점에서 ["오라클"], ["SQL"], ["데이터베이스"] 등의 단어로 검색해보자. 학술에 치우친 이론과 연습문제가 가득한 교수님들의, 교수님들에 의한, 교수님들을 위한 대학교재가 상위에 검색되거나, 아니면 한번 끝까지 따라서 쳐보기조차 어려워 보이는 방대한 분량의 책들이 순위에 등장한다. 초보 학습자가 이런 책들 사이에서 헤매다 보면 안그래도 높지 않았던 데이터베이스에 대한 열정이 금방 사그라들게 마련이다.
#3
이 [SQL 레벨업]은 초보자가 중급 이상으로 도약하기 위해 알아야 하는 데이터베이스의 구조와 원리를 핵심만 추린 책이다. 생선뼈를 다 발라내고 생선살만 남겼다고 해야 할까. 누구나 한 권쯤은 소장하고 있는 "** 정복", "*** Bible", "Mastering ***" 등 소위 말하는 바이블 급 도서가 마치 "수학의 정석" 같이 모든 것을 최대한 상세하게 다 모은 도서라면, 이 [SQL 레벨업]은 꼭 필요한 것만 추린 족집게 과외선생님의 교재에 가깝다고 볼 수 있다. 무엇보다 좋은 점은 현재 시장 점유율 선두그룹의 데이터베이스들이 고민해온 문제를 너무도 쉽게 설명한다는 점이다. 지금까지 이 DBMS 분야에 어떤 문제들이 있었고 어떻게 해결해왔는지, 그 과정에서 어떤 성과가 있었으며, 지금은 어떤 벽에 부딪혔는지를 말이다. 대부분의 데이터베이스 관련 서적이 세부 내용을 하나하나 암기해서 사용하는 기교에 집중하는 것과 비교해 볼 때, 이 책은 데이터베이스를 진지하게 공부해서 앞으로 문제를 해결할 수 있는 능력의 바탕을 다지기 위한 좋은 지침서이다.
#4
혹자는 "믿고 보는 일본서"라는 말까지 할 정도로 일본의 IT 서적은 우리나라 사람들의 성향에 잘 맞는 경우가 많다. 이해하기 쉬운 용어와 정제된 시각적 자료를 사용하여 상세하게 설명하는 방식을 취하고 있기 때문이다. 이 [SQL 레벨업]은 일본 도서의 공통적인 장점을 아주 잘 보여주고 있으며, 이 외에도 저자가 수십 년간 실무에서 데이터베이스를 다뤄온 전문가이기에 풍부한 경험에서 우러나오는 깊이가 있다는 점이 장점이다.
사실 외국서, 그중에서도 IT 분야의 책은 워낙 번역이 엉망인 경우가 많아서 출판사나 번역자를 잘 살펴보고 골라 사야 한다는 것은 이미 많이 알려진 사실이다. 이 [SQL 레벨업]은 최근 IT 저술/번역에서 독보적인 활동을 보여주며 많은 책을 베스트셀러로 히트시킨 윤인성 씨가 참여하여 번역의 질을 끌어올렸다. 특히 역자는 자연스럽게 읽히는 문장이라는 측면에 중점을 두는 경향이 있는 만큼, 이 책도 원저자의 딱딱한 문체와는 달리 부드러운 한국말로 번역되었다. 일반적인 IT 서적과는 달리 자그마한 크기로 출판되어 어디서든지 들고 다니며 가볍게 훑어볼 수 있을 정도로 접근성이 높아진 점도 좋은 번역과 어우러져 책의 가치를 더해준다.
#5
다만 "오라클과 100% 호환성을 목표로 하는 PostgreSQL을 이용한 레벨업" 등의 화려한 선전 문구는 [SQL 레벨업]의 주 독자층이 데이터베이스 문외한이 아니라는 점을 너무 간과한 것 같다. 이 책에서 설명과 예제로 다루고 있는 양대 축인 Oracle과 PostgreSQL 중 후자인 PostgreSQL은 오라클과 일정부분 유사한 문법을 가진 소형 데이터베이스지만 오라클과 100% 호환성을 목표로 해서 개발되지는 않고 있으며, 오히려 다른 소형 데이터베이스인 MYSQL과 경쟁하는 중이다. 오라클의 시장 점유율을 빼앗아 오려는 데이터베이스는 PostgreSQL를 기반으로 개발되어 오라클과 90% 이상의 문법 호환성을 제공하는 유료 데이터베이스인 EnterpriseDB사의 PPAS(Postgres Plus Advanced Server)라고 보는 것이 맞을 것으로 생각된다.
# 리뷰어 정보
웹 프로그래머입니다. SQL 쿼리를 종종 사용하지만, 복잡한/성능을 고려하는 쿼리는 작성하는 일이 드뭅니다.
# 평가
SQL을 쓰지만 SQL을 "각잡고" 익혀본 적이 없는/익혀보려는 모든 개발자에게 권할 수 있는 책.
# 장점 : 꼼꼼한 저자. 배우면서 흐름/맥락을 선명하게 구성하도록 도와준다.
. 번역서 문장이 어색함/위화감이 거의 없다. 번역자 + 언어의 유사성의 덕을 최대한 본 것이 아닐까.
. 연습문제가 있어서 배운 것을 포함해서 되짚어 볼 수 있다.
. 저자가 중요한 부분을 강조할 때, 앞 혹은 뒤에서 나오는 주제와 연결된다는 점을 알려주므로 맥락을 구성하기에 좋다.
. 이미지로 떠올리기 좋게 신경쓴 설명에 감동. ex) "Group By 구는 이때 케이크를 자르는 칼과 같은 역할을 합니다"
. "요령을 하나 말하자면, 어떤 문제가 있을 때 스스로 "문제를 절차지향형 언어로 해결한다면 어떤 IF 조건문을 사용해야 할까?"라고 사고할 때마다 "이것을 SQL의 CASE로는 어떻게 해결할 수 있지?"라는 것을 꾸준히 의식하는 것입니다." <- 훈련 방법과 유의사항을 친절하게 가르쳐준다.
. 큰 흐름도 챙기는 저자 주 : 12강 집약에서, "최근에는 분산,상관과 같은 통계적 자료를 구하기 위한 함수들이 많이 구현되고 있습니다.통계라는 학문 자체가 하나의 요소에 집중하는 것이 아니라, 요소의 집합에 집중하는 것이라는 걸 생각하면 당연한 이야기 입니다."
. 예제를 위해 설정한 상황/환경이라고 하더라도 짚을 것은 짚고 넘어간다 : "모델링이라는 관점에서 보아도, 사람이라는 엔티티를 나타내는 테이블은 이렇게 되어있어야 합니다."
. 원칙 위에서 지식을 구성하도록 유도 : "하지만 이러한 발상은 집합과 요소를 혼동한 것으로, SQL의 원리(=집합론의 원리)를 위배하는 것이랍니다. 따라서 귀찮더라도 집약 함수를 사용해서 [코드4-5]처럼 작성해야 합니다."
. 작은 의문도 풀고 지나간다 : ""집약할 때는 정렬 사용하는 것 아니었어?" 하는 사람이 있을 수도 있는데요, 틀린 이야기는 아닙니다. 경우에 따라서는 정렬을 사용하기도 합니다. 이때는 SORT GROUP BY(오라클의 경우)와 같은 실행 계획이 나타납니다."
. 원칙/기본 개념을 이미지화 할 수 있도록 돕는 그림 : 그림4-9 처럼, data를 집합으로 여기고 이것을 나누는 것을 쉽게 떠올릴 수 있게 한다.
# 단점 : 영어였을 개념(aggregation, join)이 일본에서 일본어로 바뀌었다가 다시 한국어로 번역을 하다 보니(집약, 결합) 한국어 용어를 잘 쓰지 않던 사람은 처음에 약간 적응하려고 시도 해야 한다. 각 장의 title 정도에라도 영어 단어를 병기해주었으면 더 좋았을 것이라는 생각이 들었다.
[도서리뷰]DB성능 최적화를 위한 SQL 실전가이드_SQL 레벨업(미크 지음, 윤인성 옮김, 한빛미디어)
대상 독자:
기본적인 SQL(SELECT, INSERT, UPDATE, DELETE)을 알고 있는 사람
실행 계획을 살펴보지 않은 데이터베이스 관련 개발자
본인(Reviewer) 소개:
기본적인 DB생성이 가능하고, 기초적인 SQL 언어의 사용경험이 있으며, 조작어에 대한 개념을 알고 있습니다. 관련 개발자는 아니지만, 책에서 소개했던 독자 수준에 아주 걸맞는(?) 수준에서 이 책을 접했다 생각합니다.
전체적인 평:
앞서 설명드렸듯이, 저는 SQL의 기본 지식만을 보유하고 있는 초보입니다. 기초 지식을 이미 습득한 상태에서 DB활용 관련해서 한단계 업그레이드 된 지식을 늘 학습하고 싶었던 터라 이 책을 선택하게 되었는데요. 개인적으로는 탁월한 선택이었다고 생각합니다.
책에 대한 전체적인 느낌은, 반전이랄까요? 겉 표지나 책 크기가 주는 인상은 다소 무겁지 않아 보여 목차를 읽지 않는다면. 가벼운 내용만을 다루는 것으로 오해할 수도 있겠다 싶었습니다. 물론 상세하고 친절한 개념 설명을 통해 내용을 좀 더 친근하게 전달하고자 하는 느낌은 많이 받았습니다.
다음 세 가지는 개인적으로 책에서 좋았다 생각했던 점입니다.
1. 다양한 예시의 활용
첫 번째로 좋았다 말하고 싶은 것은 책이 설명하고 있는 개념에 대한 다양한 예시입니다. "실전 가이드" 답게 다양한 실습 예시를 다루고 있는데요. 실습 예시가 다루는 개념에 대한 구체적인 설명과 함께 다양한 예를 들어 이해를 돕습니다. 책에서 예를 든 내용을 잠깐 언급하자면, "자르기" 기능을 케이크를 나누는 것에 비유하여 설명하였는데요. 이처럼 시각적인 이미지를 떠올릴 수 있는 예를 제공함으로써 독자가 좀 더 쉽게 내용을 이해할 수 있도록 돕는다는 느낌을 책을 읽는 내내 받았습니다. 전체적으로 예시가 많은 만큼 시각적인 이미지로 다양하게 제시되었습니다. 테이블 간의 구조라던지, 알고리즘에 대한 설명이라던지, 텍스트로 구구절절 설명했다면 자칫 지루할 수 있었겠지만 이미지 예시를 통해 재미와 더불어 이해를 더했던 것같습니다.
2. 직접 대화를 나누는 듯한 어체
제가 처음 SQL을 공부하던 때를 떠올려 보면, 당시 딱딱한 교과서 어투의 교재로 공부했던 기억이 납니다. 읽다보면 쉽게 지루해졌기 때문에 주로 직접 정리해가며 암기 위주의 학습에 좀 더 집중하고, 직접적인 실습을 한 후에야 이해를 했던 부분이 많았습니다. 그런데 이 책은 쉽게 대화체로 개념을 설명해주기 때문에 이해를 돕습니다. 차근차근 문장을 읽어나가며, 본문에서 제공하는 실생활의 예와 접목시켜 머리 속으로 개념을 떠올리고 고개를 끄덕이며 읽어나갔습니다. (여기에는 앞서 언급한 다양한 예시의 활용도 한 몫 했습니다.) 이해가 쉬웠던만큼 집중도 잘 되었던 것 같네요.
책에 나오는 모든 문장들의 길이가 길지 않습니다. 짧게 나눠지는 문장 덕에 머리에도 쏙 들어왔고, 카페에서 소리내어 읽다보니 직접 강의를 듣는 듯한 착각도 있었습니다. 다만 너무 문장이 딱딱 끊어진다는 느낌은 받았습니다. 그래서 자연스럽게 이어질 수도 있을 법한 내용이 계속 끊어지며 읽히고, 불필요한 접속어가 반복적으로 사용된 부분도 있었습니다. (쉬운 설명과의 트레이드오프라고 생각합니다. :))
3. 구성
다음은 책의 구성에 대한 내용인데요. 개인적으로 구성에 대한 점이 참 좋았다고 생각합니다. 큰 숲을 먼저 보고 각각의 나무들을 자세히 보는 듯한 느낌인데요. 저의 평소 학습 스타일도 크게 전체적인 그림을 보고 세부적으로 되짚어 나가는 편이라서 그런지도 모르겠습니다. 처음 2장에 걸쳐 기초 SQL 개념을 살펴볼 수 있었는데요. 이 책을 읽기 위한 준비운동이랄까요? 앞으로 읽어나가는데에 필요한 개념들을 되짚어볼 수 있는 계기가 되었던 것 같습니다. 앞서 설명한 내용들을 토대로 뒤에 나오는 각각의 챕터들을 살펴보기 때문에, 이미 한번 언급되었던 문제들에 대한 근거들을 보며 해당 내용을 한 번 더 상기시킬 수 있었던 점이 좋았다고 생각합니다.
개인적으로 다소 어렵게 느껴지면서도 동시에 친절한 설명 덕에 쉽게 느껴진 책입니다. DB개발 입문용으로, 또는 초보자가 막연하게 알고 있는 개념을 구체화하기에 참 좋은 책이라 생각합니다.
책은 전체적으로 크게 10장으로 나뉘어져 있고 세부적인 서브챕터들로 나뉘어지는데요. 각 챕터마다 처음 공부하면서 한번쯤은 생각해봤을 법한 궁금한 내용, 혹은 초보자로서 (혹은 중급자로서) 범할 수 있는 실수에 대한 사항들을 다루고 있고, 마무리로 학습포인트와 연습문제를 제시하여 독자들이 스스로 개념을 생각해볼 수 있도록 유도합니다.
개인적으로 이 책을 통해 얻을 수 있었던 개념은 옵티마이저의 역할, 즉 실행계획인데요. 전반적으로 책의 모든 실습 예제에서 실행계획을 통해 성능 검증을 하는 예시를 제공하기 때문에, 책을 거의 다 읽을 때 쯤이면 "실행계획"이라는 개념에 상당히 친숙해져있음을 느낄 수 있습니다. 이 방법을 통해 성능에 대한 고려, 그리고 트레이드오프에 관해서 생각을 해볼 수 있었던 계기가 되었네요.
DB에 대한 좀 더 큰 그림을 볼 수 있는 시각을 제공하는 책이라고 생각합니다.
추천합니다.
한빛리더스 2기
■ [리뷰어의 정보].
본 리뷰를 진행하는 사람은 IT업계에서 종사하는 사람입니다.
이제 3년차(만 2년 4개월) 개발자로써, 관련 학과를 전공하였습니다.
웹 개발자로써, 상대적으로 DB 쿼리 작성 빈도는 낮습니다.
■ 첫 인상.
다행히 얇다(?)라는 느낌이었습니다. IT에 관심이 있어서 검색해보신 분들이라면 아시겠지만, 대부분 다들 두껍습니다.
그래서 저 같은 경우 대부분 분철하여 책을 읽는 편입니다만, 다행히 일반 소설책 정도의 두께감이라 부담감은 없었습니다.
■ 주요 포인트
- 책 하단에 자주 등장하는 "저자주" 부분을 주의깊게 읽는 것을 권장합니다.
- 책이 두껍지 않아서 상대적으로 타 전공 서적에 비하여 심리적 부담은 덜 합니다.
- 책 재질이 고급스럽습니다.
- 쿼리 실행시 실행 계획과 관련하여 PostgreSQL과 Oracle 실행 계획 2가지 종류를 함께 제시하여, 비교하며 보기 좋습니다.
- 책의 전체적인 전개가 굉장히 부드럽습니다.
- 옆에서 저자가 조곤조곤 원리를 말해주는 기분, 또 책의 구성 자체가 암기가 아닌 생각해볼 기회를 주며 진행이 됩니다.
(사실 왼쪽 페이지만 보고, 아 뭔소린거냐아아.. 하다가 오른쪽 보고, 아? 이거구나를 수차례 하였습니다.)
- 기술적으로 이러이러하다라는 지식 외에도, 개발자로써의 자세를 되짚어 보는 좋은 기회를 얻을 수 있습니다.
■ 총점 및 평론
- 쿼리 작성 빈도가 낮다고는 하나, 이제 3년차 개발자로써 보자면.
- 처음에 두께만 보고 만만하게 본 것은 굉장히 후회.
- 그냥 아 그러하구나~ 하고 휙휙 넘어가기엔 아까운 책이었습니다.
(만약 쿼리와 상당히 친하다 그러신분 아니시라면, 함께 읽으면 좋을 책에 소개된 [SQL 첫걸음]을 먼저 읽으시는것을 추천합니다.)
대학생때 시험공부하듯 줄쳐가면서 봤네요 -_-;;
특히 "저자주"와 같은 부분까지 챙겨가며 읽은 책은 이 책이 처음이었습니다.
(진짜 이 책 읽으신다면, 저 부분 꼭 챙겨서 보시는 것을 강추합니다.)
덕분에 다 보는데 꽤 시간이 소요되었습니다만,
충분히 그만한 보람이 넘치는 책이었습니다.
쿼리의 기계적 사용이 아닌, 그 동작 원리와 더 나은 방법에 대해 고민하시는 분들이라면 진심으로 한번쯤 읽어보시기를 추천!
(다만 책에서 실행 계획이 자주 나오는데, 실행 계획을 보는 법에 대한 상세 안내는 없으므로, 이에 대한 사전 지식이 필요합니다.)