한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.
1. 이 책을 선택한 동기
프론트엔드 개발자로써 DB를 직접 다룰 일이 없어 SQL을 잘 몰랐었어요. 그럼에도 백엔드를 잘알고 싶은 욕구도 있었고, 특히 사이드 프로젝트를 할 때 supabase를 주로 사용하기 때문에 SQL를 익히고 싶었죠. SQL을 몰라도 테이블 에디터를 이용해서 만들 수도 있었지만, 결국은 SQL로 구성되기 때문에 더 효율적으로 테이블을 관리하기 위해서는 역시 SQL을 알아야겠다는 생각이 들었어요.
cursor를 쓸 때 SQL로 알려주기도 하고, supabase mcp를 사용할 때도 역시 SQL로 작성합니다. 답변에 대해서 옳고 그름을 판단하기 위해서는 SQL 문법에 익숙해질 필요가 있었고, 질문을 다시 할 때도 역시 SQL을 잘알아야 필요한 답변을 얻어낼 수 있겠다는 생각도 들었습니다. 때문에 이번 기회에 제대로 SQL을 익히기 위해 '실무에서 SQL을 다루는 기술'을 읽기 시작했어요.
2. 어떤 책인지
'실무에서 SQL을 다루는 기술'은 조재연 저자가 쓴 실무 중심의 SQL 가이드북입니다. 이 책은 단순한 SQL 입문서가 아니라, 실제 업무에서 마주치는 복잡한 데이터 문제들을 SQL로 해결하는 방법을 체계적으로 다루고 있어요. SELECT, INSERT, UPDATE, DELETE 같은 기본 문법은 이미 안다고 가정하고, 그 위에서 실무에서 진짜 필요한 고급 SQL 기법들을 단계별로 설명합니다.
책의 구성을 보면 윈도우 함수, 서브쿼리, 조인 최적화, 집계 함수 활용법 같은 고급 문법부터 시작해서, 실제 비즈니스 시나리오에서 자주 등장하는 데이터 분석 패턴들(순위 매기기, 이동평균, 전년 동기 대비 등)을 다뤄요. 마지막에는 쿼리 성능 최적화와 실행 계획 분석 같은 실무에서 꼭 필요한 내용까지 포함되어 있습니다.
특히 PostgreSQL, MySQL, SQL Server, Oracle 등 주요 DBMS별 문법 차이와 특화 기능들을 함께 설명해주는 점이 인상적이었어요. supabase(PostgreSQL)를 사용하는 저에게는 PostgreSQL 관련 내용을 바로 실습해볼 수 있어서 더욱 유용했습니다.
3. 특히 인상적이었던 점
가장 인상깊었던 건 윈도우 함수를 설명하는 방식이었어요. ROW_NUMBER(), RANK(), LAG(), LEAD() 같은 함수들을 단순히 문법으로만 설명하는 게 아니라, "월별 매출 순위를 구해보자", "전월 대비 증감율을 계산해보자" 같은 실제 비즈니스 상황과 함께 제시해주니까 '아, 이럴 때 이걸 쓰는구나!'라는 게 바로 이해되었어요.
또 하나 인상적이었던 건 복잡한 조인 쿼리를 단계별로 분해해서 설명하는 방식이었습니다. 처음에는 간단한 INNER JOIN부터 시작해서, 점점 복잡한 다중 테이블 조인과 서브쿼리가 결합된 형태까지 차근차근 빌드업해가는 과정이 정말 체계적이었어요.
그리고 CTE(Common Table Expression, WITH 절)를 활용한 복잡한 쿼리 구조화 방법도 눈에 띄었습니다. 기존에는 하나의 긴 쿼리로 모든 걸 처리하려고 했는데, CTE를 사용해서 단계별로 데이터를 가공하고 최종적으로 결합하는 방식을 보니까 훨씬 가독성 있고 유지보수하기 쉬운 코드를 작성할 수 있겠다는 생각이 들었어요.
4. 덕분에 무엇을 배웠는가
첫째, supabase에서 복잡한 쿼리를 직접 작성할 수 있게 됐습니다. 이전에는 테이블 에디터로만 데이터를 다뤘는데, 이제는 SQL 에디터에서 직접 복잡한 집계 쿼리나 조인 쿼리를 작성할 수 있게 되었어요. 특히 사용자 행동 데이터를 분석할 때 윈도우 함수를 활용해서 세션별 첫 방문 시간, 마지막 액션 등을 한 번의 쿼리로 구할 수 있겠다는 생각이 들었어요.
둘째, cursor나 AI 도구들이 생성해주는 SQL 쿼리를 이해하고 수정할 수 있게 되었어요. 이전에는 AI가 작성해준 쿼리를 그대로 복사해서 사용했는데, 이제는 쿼리의 의도를 파악하고 필요에 따라 수정하거나 최적화할 수 있을 것 같아요. 특히 WHERE 절의 조건을 바꾸거나 ORDER BY를 추가하는 정도는 자신있게 할 수 있게 되었습니다.
셋째, 데이터베이스 설계에 대한 이해도가 높아졌습니다. SQL을 제대로 배우다 보니 정규화, 인덱스, 외래키 같은 개념들도 자연스럽게 이해하게 되었어요. 테이블을 설계할 때 단순히 필드만 추가하는 게 아니라, 쿼리 성능을 고려해서 인덱스를 설정하거나 적절한 데이터 타입을 선택할 수 있게 되었죠.
5. 좋았던 점
1. 실무 시나리오 중심의 설명
각 개념을 설명할 때 추상적인 문법 설명에 그치지 않고, 실제 업무에서 마주칠 수 있는 구체적인 상황을 제시해준 점이 정말 좋았어요. "이달의 상위 10% 고객을 찾아라", "전년 동월 대비 매출 증감율을 구해라" 같은 현실적인 요구사항을 SQL로 어떻게 해결하는지 보여줘서 학습 동기가 계속 유지됐습니다.
2. 점진적 학습 구조
간단한 개념부터 시작해서 점점 복잡한 내용으로 넘어가는 구성이 정말 체계적이었어요. 예를 들어 집계 함수를 설명할 때도 단순한 COUNT, SUM부터 시작해서 GROUP BY, HAVING, 그리고 윈도우 함수와의 조합까지 자연스럽게 연결되는 흐름이 좋았습니다.
3. DBMS별 문법 차이 설명
PostgreSQL, MySQL, SQL Server, Oracle 등 주요 DBMS별로 문법 차이를 함께 설명해준 점도 큰 장점이었어요. 현재 저는 사이드 프로젝트를 위해 supabase(PostgreSQL)를 주로 사용하는데, PostgreSQL 특화 기능들도 별도로 설명되어 있어서 바로 실습해볼 수 있었어요.
4. 성능 관점에서의 접근
단순히 결과를 얻는 방법만 알려주는 게 아니라, 같은 결과를 얻는 여러 가지 방법 중에서 어떤 게 더 효율적인지, 실행 계획은 어떻게 다른지까지 설명해줘서 실무에서 바로 적용할 수 있는 지식을 얻을 수 있었습니다. 특히 인덱스 활용 전략이나 조인 순서 최적화 같은 내용이 유용했어요.
6. 아쉬운 점
1. 기초 문법에 대한 설명 부족
책 제목에 '실무에서'라고 되어 있어서 어느 정도 예상했지만, 정말 기본적인 SQL 문법은 안다고 가정하고 시작합니다. SELECT, FROM, WHERE 같은 기본 문법부터 차근차근 배우고 싶은 완전 초보자에게는 진입장벽이 있을 수 있습니다. 처음 몇 장은 따라가기가 좀 버거웠습니다.
2. 실습 환경 구축 가이드 부족
각 DBMS별 설치나 실습 환경 구축에 대한 가이드가 부족했어요. Github 저장소를 예제로 제공해주긴 했지만, SQL에 익숙하지 않다면 어떻게 구축을 해서 어떻게 테이블을 생성하고 DB를 만들어갈 수 있는지 막막할 수 있습니다.
3. 최신 SQL 표준 반영 부족
책에서 다루는 내용은 대부분 안정적이고 검증된 기법들이지만, 최근에 추가된 SQL 표준이나 각 DBMS의 최신 기능들에 대한 언급은 상대적으로 적었어요. 특히 JSON 데이터 처리나 새로운 윈도우 함수들 같은 최신 기능들도 다뤘다면 더 완성도 높은 책이 되었을 것 같습니다.
7. 이 책을 읽은 덕분에 기대되는 변화
이 책을 읽고 나서 데이터를 바라보는 관점이 많이 달라졌습니다. 앞으로는 사이드 프로젝트에서 supabase를 훨씬 활용도 높게 사용할 수 있을 것 같습니다. 복잡한 대시보드나 통계 페이지를 만들 때 프론트엔드에서 모든 계산을 처리하는 게 아니라, SQL로 필요한 데이터를 미리 집계해서 받아올 수 있게 될 것 같았어요.
또한 백엔드 개발자와의 협업에서도 더 구체적이고 정확한 소통이 가능해질 것 같습니다. "~한 데이터가 필요해요"라고 막연하게 요청하는 게 아니라, "~ 조건으로 조인해서 이런 집계 결과를 주세요"라고 구체적으로 요청할 수 있게 되었어요. 심지어 간단한 쿼리는 직접 작성해서 제안할 수도 있을 것 같아요.
특히 실질적으로 활용할 수 있는 것은 cursor나 AI를 사용할 때 데이터 설계 관련 질의를 할 때 더 효과적으로 활용할 수 있게 된 점입니다. 이제는 AI가 생성한 SQL 쿼리를 이해하고 검증할 수 있으니까, 더 정확한 질문을 하고 더 좋은 결과를 얻을 수 있을 것이라 생각해요. SQL을 모를 때는 AI가 작성해준 쿼리가 맞는지 틀렸는지도 몰랐는데, 이제는 어느 정도 판단할 수 있게 되었으니까요!