SQL, 수많은 정보에 압도당하지 않기
마케터의 데이터 분석 공부, 어디부터 시작해야 하나요?에서는 R이나 파이썬(Python) 등 프로그래밍 언어를 공부하기 전에 SQL부터 배워야 한다는 점을, 데이터 분석, SQL만 잘 다뤄도 먹고 들어갑니다에서는 SQL을 배워야 하는 이유를 이야기했습니다. 이번 글에서는 SQL을 어떻게 배우면 좋을지 이야기해보려 합니다.
이 글에서는 구체적인 SQL 문법이나 함수(function) 사용법을 다루지는 않지만, 데이터 분석을 위한 SQL을 처음 접하는 분들의 막막함을 조금이나마 줄이기 위한 안내도(무엇부터 시작하고, 어떤 강좌를 찾아 듣고, 어떤 자료를 참고하면 좋을지 등)를 제공해 드리려 합니다.
아무런 배경 지식이 없는 채로 SQL을 처음 접하면... 그야말로 막막합니다.
검색을 하면 할수록 뭐가 뭔지 알기 어려워집니다. SQL은 데이터를 저장하고 관리하는 커다란 체계이고, 그 중 데이터 분석을 위해 알아야 하는 지식은 극히 일부인데, 처음에는 뭐가 데이터 분석에 쓰이고 뭐가 쓰이지 않는지 걸러내기 어렵기 때문입니다. 자칫하면 어마어마한 정보의 양에 압도되어 방향을 잃게 됩니다. (만약 프로그래밍을 공부해 본 적이 없다면 더더욱 헤매기 쉽습니다.)
일례로, 위키백과의 'SQL' 항목을 보겠습니다(자세히 보실 필요는 없습니다).
다양한 항목이 등장하나, 수많은 내용 중 마지막에 나오는 SELECT를 제외하면 모두 데이터 분석과는 무관합니다.
코딩 입문자들이 접근하기 좋은 생활코딩의 MySQL 강좌도 마찬가지입니다. 데이터베이스를 설치하고, 테이블을 삽입하고 삭제하고, 사용자를 관리하는 등의 내용은 웹 서비스를 만들기 위한 것이지, 데이터 분석을 위한 것은 아닙니다.
그러니 검색을 하시다가
- '데이터베이스 설계', 혹은 '데이터베이스 모델링'이라는 말을 접하거나
- CREATE, ALTER, DROP, INSERT, DELETE 등의 SQL 명령어를 접하거든,
"이건 데이터 분석을 위한 내용은 아니야. 제껴야지" 하고 생각하세요. 마음이 한결 편안해질 겁니다.
SQL을 처음 접할 때 '압도당하는' 기분을 느끼게 만드는 요인이 또 있습니다. 바로 SQL 데이터베이스(DB)에도 여러 종류가 있다는 점입니다. 설상가상으로, 한 조직에서 여러 종류의 SQL DB를 사용하기도 합니다.
제가 일하고 있는 PUBLY만 해도 MySQL, Amazon Redshift, MariaDB 등 세 종류의 SQL DB를 사용하고 있습니다. (굳이 여러 종류를 쓰는 이유는 각 종류별로 장단점이 있기 때문이라고만 알면 됩니다. 이 부분은 엔지니어의 영역입니다.) 그러면 저는 MySQL, Amazon Redshift, Maria DB의 사용법을 각각 처음부터 배워야 할까요?
결론부터 말씀드리면, 아닙니다. 하나만 배워 두면, 나머지는 금방 금방 배울 수 있습니다.
그럴 수 있는 이유는, 데이터 추출과 분석에 사용되는 기본 문법은 SQL DB 종류와 상관 없이 같기 때문입니다. 마치 영어에 영국 영어/미국 영어/호주 영어/인도 영어(?) 등의 분파가 있고, 각 분파 사이에 일부 단어와 숙어에 차이는 있지만 기본 문법은 동일한 것과 같습니다.
실제로 데이터 분석 SQL 온라인 강좌를 찾아 보면, SQL의 특정 DB만을 가르치는 경우는 찾아보기 어렵습니다. 아래는 몇몇 강좌의 제목들입니다. 그냥 'SQL'이라고만 하지, 특정 SQL DB를 이야기하지는 않습니다.
- Introduction to SQL for Data Science (DataCamp)
- SQL Fundamentals (SOLOLEARN)
- The SQL Tutorial for Data Analysis (Mode Analytics)
그러니 부담 갖지 말고 일단 공통 문법부터 배우시면 됩니다. 나머지 세부적인 차이점은 그때그때 필요할 때 검색하며 익히면 됩니다.
이제 SQL 학습법을 다루겠습니다. 들어가기 전에 한 가지 명심하실 점은... SQL은 비교적 배우기 쉬운 언어에 속하지만, 언어를 배우는 게 결코 만만한 일은 아니라는 사실입니다.
꾸준히 반복 학습을 해야 하고, 배경이 되는 이론을 이해해야 하고, 암기도 해야 합니다. 이 글은 그런 학습을 시작하시는 분들께 조금이나마 시행착오를 줄여드리기 위한 글이지, 'SQL 쉽게 배울 수 있어요' 류의 글은 아닙니다.
그리고, 아래 열거하는 내용을 '선형적'으로 공부하는 것이 아니라는 점도 알아 두시길 바랍니다. 영어를 배울 때 단어를 마스터하고, 문법을 모두 마스터하고, 그 다음에 회화를 마스터하는 과정로 배우는 것이 아닌 것처럼, SQL도 마찬가지로 문법과 함수와 실습을 왔다갔다 하면서 배워야 합니다.
SQL은 일종의 언어입니다. 한국어, 영어, 중국어처럼 사람이 의사소통을 하기 위해 쓰는 언어(자연어)와는 다르지만, 그 안에 완성된 문법 체계를 갖추고 있습니다. 오히려 문법을 조금 무시해도 의사소통이 가능한 자연어와 달리, 문법을 조금이라도 무시하면 의사소통이 불가능한 특성이 있습니다. 그런 만큼, 데이터 분석에 SQL을 활용하려면 먼저 기본 문법을 배워야 합니다.
SQL 문법을 학습하는 방법은 크게 두 가지입니다.
- 문법 자체를 공부하기
- 실제 쿼리(query) 문장을 통해서 익히기.
학창시절에 문법책과 독해책으로 영어를 공부할 때를 떠올려 보시면 이해가 쉬울 겁니다. 어쩌면 그 때보다 어렵고 괴로운 공부가 될 수도 있겠지만, 그 결실은 달콤합니다.
(1) 문법 자체 공부하기: 책 또는 온라인 강좌.
문법 자체를 공부하기에는 책 또는 온라인 강좌가 좋습니다. 다만 앞에서 말씀드린 것처럼 '엔지니어'를 위한 책과 강좌가 다수인 만큼, 자료를 잘 걸러내는 것만 해도 부담스러운 일입니다. 그래서 쓸만한 자료를 몇 개 추천해 드겠습니다.
1) 책: 칼퇴족 김대리는 알고 나만 모르는 SQL 기초편
이전 글에서 언급했던 쏘카(SOCAR)의 마케터 몇 분은 이 책으로 SQL 기본 문법을 공부했습니다. (쏘카에서는 거의 베스트셀러 급이었습니다. 사무실에 이 책만 6권 이상 있었습니다.)
'기초편'이 있으니 '중급편', '심화편'도 있어야 할 것만 같지만, 후속작은 나오지 않았습니다.
- 장점: 몇 안 되는 우리말 자료입니다. 마지막 한 챕터를 제외하면 분석과 무관한 내용이 없습니다.
- 단점: 아래 열거할 온라인 강좌와 달리, 실습을 위한 환경을 제공하지는 않습니다.
2) 무료 온라인 강좌(초급): Introduction to SQL for Data Science (DataCamp)
* 2019년 3월 기준으로, 이 강의는 유료 강의입니다. 하지만 월 약 30달러 정도의 가격으로 데이터캠프의 모든 강의를 수강하실 수 있으니, 큰 부담은 아니실 거라 생각합니다. :)
데이터 분석을 위한 각종 강좌들이 모여 있는 DataCamp의 SQL 강좌입니다. SELECT, filtering, grouping, sorting 등 기초적인 내용을 다룹니다. 회원 가입을 해야 이용할 수 있지만, 무료 강좌입니다.
- 장점: 믿고 보는 DataCamp 강좌입니다. DataCamp는 온라인 강좌 전문 업체이기 때문에, 학습을 위한 인터페이스가 잘 만들어져 있습니다. 차근차근 실습을 하며 함께 강의를 따라가다 보면 기본 SQL 문법을 익힐 수 있습니다.
- 단점: 굳이 꼽자면, 영어 강좌라는 점? (그렇지만 기술적인 내용을 공부할 때 영어는 필수입니다.)
3) 무료 온라인 강좌(초급~고급): The SQL Tutorial for Data Analysis (Mode Analytics)
데이터 분석 솔루션 업체인 Mode Analytics에서 제공하는 강좌입니다. 실제로 실습을 하려면 계정을 만들어야 하지만, 강좌 자체는 로그인 없이 볼 수 있습니다.
- 장점: 초급, 중급, 고급 수준별로 SQL 문법을 잘 설명해 놓았습니다. 여기에 있는 내용만 잘 공부해 두면 어디 가서 SQL 좀 한다고 자랑할 수 있습니다.
- 단점: 강좌 전문 서비스가 아니니, DataCamp처럼 친절한 인터페이스를 기대하기는 어렵습니다. 그리고 자신들의 서비스(Mode Analytics)를 홍보하는 목적도 있어서, 중간중간 Mode Analytics에만 적용되는 내용이 나오기도 합니다. 그래도 크게 거슬리거나 학습에 방해될 정도는 아닙니다.
(2) 실제 SQL 쿼리(query)문을 통해 공부하기: 조직 내 데이터 분석가 또는 엔지니어를 괴롭히세요.
어느 정도 문법의 기초를 닦으셨으면, 이제 실제 문장을 볼 시간입니다. 영어를 배울 때 독해를 하듯이, SQL을 배울 때도 실제 쿼리문(query, 데이터를 추출하기 위해 서버에 내리는 명령문이라고 생각하세요)을 보면서 문법에 익숙해질 수 있습니다. 이 때 가장 좋은 학습 자료는 조직에서 이미 사용하고 있는 쿼리문입니다.
이 방법으로 공부하기 위해서 필수적인 것 두 가지가 있습니다.
첫째, 여러분 조직의 <데이터베이스에 접속해서, 데이터를 읽고 추출할 수 있는 권한>을 부여받는 것이 필수적입니다. 여러분이 속한 부서의 매니저, 그리고 엔지니어링 부서와 상의하세요. 분석용, 읽기 전용 DB가 있다면, 그 DB의 접근 권한을 받으시면 됩니다.
둘째, <DB에 접속하기 위한 프로그램을 컴퓨터에 설치하고, 접속 환경 설정>을 해야 합니다. 무료 프로그램으로는 MySQL Workbench, SQL Workbench, HeidiSQL 등이 있고, 유료 프로그램으로는 Toad, DataGrip 등이 있습니다.
어떤 프로그램을 사용할지, 접속 환경 설정 방법 어떻게 하는지는 엔지니어링 부서(혹은 데이터 분석가)에 문의하시면 됩니다!
1) 기존에 누군가 만들어 둔 쿼리문을 받아 보세요.
여러분의 조직이 일간, 주간, 월간 지표를 확인하고 있나요? 그렇다면, 아마도 누군가는 그 지표를 만들기 위해 데이터를 추출하는 쿼리문을 작성해 두었을 것입니다. 그 사람이 데이터 분석 담당자일 수도 있고, 엔지니어일 수도 있습니다. 그들에게 쿼리문 파일들을 달라고 부탁하세요.
저는 운 좋게도 전임 분석 담당자가 만들어 둔 쿼리문을 모두 받아서 볼 수 있었습니다.
그리고 다른 분들이 필요하다고 하시면, 제가 만들어 둔 쿼리문들을 폴더 째로 공유했습니다.
2)쿼리문을 씹고 뜯고 맛보고 즐기세요.
조직에서 기존에 사용하던 쿼리문은 간단할 수도 있고, 아니면 아래 스크린샷처럼 복잡할 수도 있습니다. 기본 문법을 어느 정도 익힌 상황이라면, 어렵더라도 길고 복잡해 보이는 쿼리에 도전해 보시길 바랍니다.
이런 점들을 유념하며 쿼리문의 각 부분을 살펴 보세요.
어떤 구문을 사용했는지(SELECT, FROM, WHERE, JOIN, GROUP BY, HAVING, ORDER BY 등)
어떤 함수(function)들을 사용했는지
어느 테이블(table)의 어떤 칼럼(column)에서 데이터를 불러내는지
쿼리를 실행했을 때 결과물이 어떤 모양으로 출력될지 예상해 보세요. 그리고 실제로 쿼리를 실행해서, 결과물이 예상에 얼마만큼 부합하는지 살펴 보세요.
결과물은 몇 줄인가요?
어떤 칼럼들이 있나요?
각 칼럼에는 어떤 값(텍스트, 숫자, 시각, 시간 등)이 들어가 있나요?
쿼리의 일부분을 바꿔 보면서 실행해 보세요. 쿼리의 일부분을 바꿨을 때 결과물이 어떻게 달라질지 예상해 보고, 실제로 쿼리를 실행해서 예상에 얼마나 부합하는지 살펴 보세요.
WHERE 절의 조건을 바꿔 보기도 하고
GROUP BY를 달리 해 보기도 하고
JOIN 방법을 달리 해 보기도 하고
LIMIT을 걸어 보기도 하고
서브쿼리를 추가해 보기도 하세요.
저 역시 어느 정도 기초 문법(SELECT, FROM, WHERE, ORDER BY, GROUP BY 사용법 정도만)을 익힌 다음 이렇게 남이 만들어 둔 쿼리문을 뜯어 보며 문법을 익혔습니다. 쿼리에 모르는 구문이 있으면 주로 검색을 해서 답을 찾아내고, 검색해도 모르겠으면 쿼리를 만든 사람에게 물어봤습니다.
굉장히 번거로운 방법이지만, 저 개인적으로 효과를 본 방법이기도 합니다. 쉽게 배운 것은 쉽게 잊어버리기 마련이지만, 어렵게 배운 것은 잘 잊혀지지 않기 때문일 겁니다.
이 공부 방법에는 아래와 같은 장점이 있었습니다.
- 기존의 쿼리문들을 원재료 삼아, 더 많은 쿼리를 만들 수 있었습니다.
바퀴를 새로 발명하려 하지 말라고 하죠. 굳이 모든 쿼리를 처음부터 일일이 만들 필요는 없습니다. 이렇게 원재료가 될 쿼리를 얻어 두면, 조금씩 응용하며 실제 분석에 활용할 수 있습니다.
- SQL 문법 요소 중 우리 조직에서 많이 쓰이는 요소를 알 수 있었습니다.
앞서 소개한 자료들에서 굉장히 많은 문법 요소를 배우지만, 그 모든 요소를 실무에서 자주 쓰지는 않습니다. 사업의 성격에 따라, 데이터의 성격에 따라, 자주 쓰는 문법 요소는 어느 정도 정해져 있습니다. 기존에 우리 조직에서 이용한 쿼리를 뜯어 보면, 우리 조직에서 어떤 문법 요소를 자주 쓰는지 알 수 있고, 배운 내용을 실무에 더 빨리 적용할 수 있습니다.
물론 주의할 점도 있습니다. 기존의 쿼리문을 무비판적으로 수용할 경우, 비효율적인 방식으로 만들어진 쿼리문을 답습하게 될 수 있습니다. 그렇기 때문에 더 나은 방식으로 쿼리문을 짜는 방법을 고민하는 과정도 필요합니다.
1편에서는 이렇게 SQL의 기본 문법을 익히는 방법을 살펴 봤습니다. 한 번에 끝내려 했는데, 생각 외로 글이 길어져서 나머지 내용은 2편에서 말씀드리겠습니다. (웹툰 작가들이 분량 조절에 실패하면 이런 기분일까요...)
2편에서는 다음과 같은 내용을 다루겠습니다.
- 엑셀(여러분이 아는 그 엑셀 맞습니다)을 활용해서 쿼리문 검증하기:
복잡한 쿼리문일수록 틀리기 쉽습니다. 이 때 비교적 익숙한 도구인 엑셀을 사용해서 교차검증하면, 쿼리문의 오류를 잡아낼 가능성이 높아집니다. (힌트: Raw Data를 먼저 뽑고, 엑셀에서 vlookup, 피벗 테이블 등을 사용해 쿼리문의 결과를 검증합니다)
- 관계형 데이터베이스에 대한 배경 이론 익히기:
이 글에서만 해도 벌써 테이블(table)이니, 칼럼(column)이니 하는 단어를 사용했습니다. 관계형 데이터베이스에 대한 배경 이론을 알면 SQL 문법을 익히는 데 한결 도움이 됩니다. 특히 JOIN에 관해서는 꼭 배경 이론을 숙지해야 합니다. 배경 이론을 익히는 법을 다뤄 보겠습니다. (힌트: MOOC를 이용합니다)
- 우리 조직의 데이터베이스 이해하기:
우리 조직의 데이터베이스를 모르면 SQL을 아무리 배워도 말짱 도루묵입니다. 어떻게 하면 우리 조직의 데이터베이스를 하루빨리 파악할 수 있을지 다뤄 보겠습니다. (힌트: 데이터 분석가 혹은 엔지니어를 괴롭힙니다)
- 수많은 함수(function) 사용법 익히기:
SQL에는 정말 많은 함수가 있습니다. 이 함수들을 어떻게 익히면 좋을지도 다뤄 보겠습니다. (힌트: 사전을 찾듯이, 레퍼런스 페이지를 즐겨찾기 합니다)
글을 읽으시다가 궁금하신 점, 잘 이해가 되지 않는 점, 더 알고 싶은 점이 있으면 언제든 댓글 달아 주세요. 감사합니다!