[리뷰] 러닝 SQL
in Review on Review, Book, Sql, Join, Set, Group, Subquery, Case, Transaction, View, Metadata, Bigdata
한빛미디어
출판사의"러닝 SQL(앨런 볼리외 저/류수미, 송희정 역)"
를 읽고 작성한 리뷰입니다.
- 책의 구성과 개요
SQL의 전반을 깔끔하게 그리고 단계별로 잘 정리한 책이다. 다루고 있는 내용을 간단히 정리하면 다음과 같다.
RDBMS가 탄생하기까지 역사의 전반과 시대적 필요성을 훑어본 후 데이터베이스를 설치하고 실습할 데이터를 마련한다. 이후 기본적인 CRUD
를 다룬 후, Where
절에 해당하는 필터링을 배운다.
다중 테이블을 기반으로 한 기본 조인
, 데카르트 연산에 속하는 수학의 집합 연산
, 자주 활용하는 데이터의 기본 조작
을 다룬다. 이어서 SQL 연산 중 가장 많이 활용되는 집계
연산과 목적을 달성하기 위한 임시 거처 서브쿼리
를 익힌다.
10장부터는 중급 수준에 첫 발을 내딛는데 OUTER JOIN과 같은 심화과정의 조인
에 대해 학습한다. RDBMS의 이름에서도 알 수 있듯 여러 테이블 간의 관계가 가장 중요한 개념이기 때문에 이 Join 연산을 자유 자재로 다룰 수 있어야 의미있는 데이터 활용이나 분석을 위한 내공을 쌓을 수 있다. 개인적으로 10장은 가장 중요한 장이라 생각한다.
이어서 Case
문을 학습하고 트랜잭션
의 기본 개념을 다룬다. 트랜잭션 또한 RDBMS의 중요한 개념 중 하나인데 ACID를 보장하기 위해 하나의 트랜잭션을 Lock을 통해 보호하는 과정을 쉽게 잘 설명하고 있다.
다음으로 설명하는 인덱스
와 각종 제약조건
은 성능과 RDBMS의 특성을 유지하기 위한 수단으로 중요한 개념들이며 View, Metadata
로 보다 편리한 데이터 활용 방법을 익힌다. 그 외 한 차원 높은 분석을 위한 데이터 윈도우나 리포팅 함수
를 익히며 파티션
을 통한 대용량 데이터베이스 처리 기술을 익힌다.
마지막으로는 아파치 오픈 소스인 드릴
을 소개하며 MongoDB를 SQL로 접근하는 방법을 익히게 되는데 RDBMS 자체에 그치지 않고 NoSQL 진영과의 호환성을 고려한 점이 인상적이었다.
- SQL의 중요성
SQL을 실전에서 20년 가까이 다뤄온 사람으로써 이 정도면 SQL을 고급으로 다루는 데 필요한 80%의 기초는 충실히 반영한 책이라고 평가하고 싶다.
SQL은 RDBMS를 다루기 위한 태생적인 목적으로도 중요하지만, 특히 요즘은 더 중요한 스킬이 된 것 같다. AI와 빅데이터 시대에 수요가 높아졌기 때문이다. 데이터는 성격에 따라 RDBMS와 같은 Tabular 성격의 정형데이터만 존재하는 것도 아니고, Json과 같은 반정형 데이터에서부터 이미지, 텍스트와 같은 비정형 데이터도 존재한다.
지금까지 인류가 쌓아 온 대다수의 유의미한 지식들이 여전히 RDBMS로 구축되어 있는데다 SQL이 가지고 있는 깔끔함과 쉬운 난이도라는 장점 때문에 NoSQL 진영 반정형 데이터의 영역도 SQL로 접근하려는 시도가 지속적으로 이어지고 있다. 이 책 18장에서 다루는 아파치 드릴이 그런 시도 중 하나이다. Hadoop 에코 진영의 Hive도 마찬가지다.
데이터 분석 진영에서의 변화에서도 SQL의 중요성을 느낄 수 있다. R의 데이터프레임은 정형 데이터를 분석하는데 가장 많이 활용하는 데이터 구조인데 자체 기능 외 SQL을 활용할 수 있도록 지원하고 있으며, Python의 Pandas는 SQL을 지원하지는 않지만, SQL로 필요로 하는 데이터 구조에 가깝게 미리 추출해 놓는다면 이어지는 Pandas의 분석이 얼마나 수월해지는지는 실전에서 경험해 본 사람이라면 누구나 공감할 것이다.
Python의 특성이 어떤 표현이든 사용할 수 있다는 유연성에 있다면 그만큼 다양한 분석 방법이 존재하여 유지보수하거나 커뮤니케이션 하는 측면에서는 어려움이 있는 것 또한 사실이다. 단 몇 줄의 SQL의 실행결과와 동일한 결과를 구현하기 위해 Pandas로 접근하면 코드 라인이 길어지거나 중복 단어를 여러번 중첩해서 사용해야 하는 불편함이 있기 때문이다.
물론 SQL은 통계학에서 말하는 기초 통계 수준의 연산과 가공을 완벽하게 지원하기에는 비 효율적인 측면이 분명히 있으며, 나아가 추론 통계에 적용하기에 적합한 형태가 아니며, 2차원처럼 보이지만 컬럼 축의 변환이 불가능한 고정형으로 되어있다. 나아가 머신러닝에 적용하는 것은 더욱 비효율적이며 딥러닝과 같은 비정형 데이터는 커버를 못한다.
따라서 이런 장단점을 십분 활용하여 Python(R)과 SQL 간 적정 경계선을 찾는 능력이 중요하다. 데이터 분석 진영의 최근 핫한 프로그램들이 커버하기 비효율적인 부분을 SQL로 커버한다면 시간이 생명인 요즘 생산성이나 가독성을 높이는데 큰 도움이 될 것이다.
이 책을 추천하고 싶은 이유 중 하나는 이런 시대적 필요성을 반영하는 목적에 충실하도록 쓰여졌다는 점을 들 수 있겠다.
책의 장점
책의 가장 큰 장점은 SQL을 쉽게 익힐 수 있도록 단계적으로 깔끔하게 설명하는 구성이라고 할 수 있다. 쉽고 구현 가능한 눈에 보이는 것을 먼저 시작하여
조금씩 살을 붙여나가며 중간중간 상세한 설명으로 보충
하고 있어 가독성이 뛰어난 책이라는 생각이 들었다.오라클 중심의 SQL 책은 시중에 많지만,
MySQL이 중심
이 된 책은 찾기 어렵다.MySQL만 다루고 그치는 것이 아니라
Oracle이나 SQL서버에서 활용 방식이 다른 경우
함께 설명하고 있어 SQL 진영 종사자라면 누구에게나 도움이 될 만한 책이다. MariaDB는 이미 많은 분들이 알고 있듯 아파치 재단과의 싸움끝에 MySQL 원년 개발자들이 뛰쳐나와 만든 DB이기에 굳이 추가적인 설명은 필요 없을 듯 하다.RDBMS에만 국한되는 것이 아니라 연계되어 활용될 수 있는
확장성
도 고려한 점이 마음에 들었다. 아파치 드릴을 다룬 것이 그런 예시라 할 수 있다.각 단원 마지막에
예시
들이 배운 내용을 복습하고 정리하는데 알맞은 수준으로 잘 구성되어 있다.
책의 단점
10장 조인 심화 부분의 내용이 아쉬웠다. SQL을 접하면서 중급에서 고급으로 넘어가는 걸림돌이 하나 있다면 Outer Join을 들 수 있겠다. 단순 Outer Join이라면 그리 어려울 것이 없으나
일부 컬럼에만 Outer Join
이 걸린다면 머릿속으로 전체 데이터 결과의 형상이 직관적으로 떠 오르지 않게 된다. 그런 부분들을 보다 심도있게 다뤘다면 더욱 각광을 받지 않았을까 싶다.SQL92 표준을 다룬 것은 좋았으나
ANSI
표준 전반을 같이 언급, 비교하는 시도도 있었으면 했다. 이 책의 큰 장점 중 하나가 위에서 언급한대로 각 분야의 연계부분도 고려한 호환성이라 할 수 있겠는데, SQL92만 다룬 점은 대통합에 2% 부족한 약간 아쉬운 느낌이다.진영마다 말은 많지만 outer join을 단순히 (+) 기호로만 표현한다는 것은 가독성 측면에 도움이 되고, 코드라인의 길이를 줄여 오류에 대한 잠재가능성을 낮춰준다는 점에서 분명 다룰만한 가치가 있기 때문이다.
어느 책이나 그렇듯이 명작도 난이도와 눈높이를 맞추지 못한 독자가 읽으면 졸작이 되는 법이기에 난이도도 추가로 언급하려 한다.
데이터나 SQL을 전혀 다루지 않은 왕초보 분들이라면 조금 어렵게 느껴질 수 있으며, SQL이 처음일지라도 엑셀 등으로 데이터에 친숙하거나 감이 좋은 분들이라면 처음부터 이 책으로 시작해도 괜찮을 거라 생각한다. 반면 일부 컬럼만 활용한 Outer Join에 능숙한 분이라면 혹은 그 이상의 실력이 있는 분들께는 너무 쉬운 책이 되어 많은 것을 얻지는 못할 것이다.
총평을 내리자면 전반적으로 SQL을 지식의 흐름에 맞춰 깔끔하게 정리하고 있어 SQL을 처음으로 익히는 분들이 좋은 메타 지식을 형성하기에 도움이 될 만한 책
이라는 평을 내리고 싶다. SQL에 입문하거나 데이터 분석 업계 종사자 분들 중 SQL을 처음으로 배우는 분들께 추천하고 싶다.
한빛미디어 “나는 리뷰어다” 활동을 위해서 책을 제공받아 작성된 서평입니다.