세미나 광고 이미지
  • 커리어

SQL 질문 잘 하는 방법

세미나 광고 이미지
세미나 광고 이미지
공부를 한다는 것은 문제 해결의 연속인 것 같습니다. 끊임없이 해결해야 하는 문제가 발생합니다.
 
  • 문제가 잘 안풀리는데 원인을 모르겠음
  • 에러가 도저히 해결이 안됨
  • 멘토의 설명이 이해가 안됨
  • SQL 문제의 서술이 이해가 안됨
 
 

✌🏻 문제를 해결하는 두 가지 방법

내가 해결하기 어려운 문제를 돌파하는데에 크게 두 가지 방법이 있습니다.
 
  1. 인터넷 검색창에 물어본다.
  1. 같이 공부하고 있는 사람 또는 멘토에게 물어본다.
 
어디에다가 물어보느냐만 다를 뿐, 결국 나 말고 다른 사람에게 물어봐야 문제를 해결할 수 있는 것이지요. 각각 어떤 전략으로 접근해야 내가 원하는 답변을 빠르게 얻어내고 문제를 해결할 수 있을지 생각해보겠습니다.
 
 

질문 전 체크리스트

본론으로 들어가기 앞서서, 질문 전에 체크해봐야 하는 SQL 초보자들이 자주 하는 실수들을 정리해봤습니다. 아래 사항을 꼭 스스로 점검해보고 다음 단계로 넘어갑시다. 아마 이 단계에서 대부분의 문제는 해결이 될거예요.
 
✔️ 코드에 오탈자가 있는지 확인해보셨나요?
✔️ 쿼리 실행 후 에러메시지를 읽어보고 그에 맞는 조치를 취했나요?
✔️ 문제에서 요구하는 조건을 빠짐없이 작성하셨나요? 특히 WHERE 절의 필터링 조건, ORDER BY 절의 정렬 조건, SELECT 절의 컬럼명이 정확하게 정의됐는지 확인해주세요.
✔️ 질문에 포함된 쿼리를 실행해보셨나요? 질문 사항 이외에 다른 에러가 발생하지 않는지 꼭 확인해주세요.
✔️ 여러 DBMS를 선택할 수 있는 플랫폼을 사용하고 있다면 문법에 맞는 DBMS가 선택되어 있는지 확인해주세요. (예를 들어, 데이터리안의 SQL 캠프 수강생이라면 solvesql에서 SQLite 대신 MySQL이 선택되어 있는지 확인해주세요.)
 
 

검색

나는 검색을 한다고 했는데 한참 검색을 해도 원하는 결과가 잘 안나온다면 검색 방법을 바꿔보는 것이 좋습니다! 쉽게 실행해 볼 수 있는 팁을 다섯 가지 공유해드릴게요.
 

1. 구글에서 검색하기

여러분은 정보를 어디에서 가장 먼저 검색하나요? 저는 쇼핑은 네이버, 취미 생활은 유튜브(TMI이지만 키보드 연주가 취미입니다), 가십은 트위터에 검색하는데요. 기술 검색은 반드시 구글에 합니다.
네이버에 검색하던 것을 구글로만 바꿔도 검색의 품질이 좋아지는 것을 느낄거예요. 네이버는 네이버 블로그나 카페 위주로 검색 결과를 보여주기 때문에 전문가의 지식보다는 다른 초심자가 공부를 위해 블로그에 남겨놓은 정보나 카페에서 오고간 잡담이 검색 결과로 나올 확률이 높습니다. 반면 구글에 검색을 하면 관련 공식 문서나 잘 구축된 기술 커뮤니티인 stackoverflow가 검색 결과로 자주 등장합니다. 일단 구글에서 검색하는 습관을 들여주세요.
 

2. 영문으로 검색하기

기술 문서는 한글로 쓰여지거나, 영어에서 한글로 번역된 것도 물론 있지만, 영어 문서의 양이 압도적으로 많습니다. 아쉬운 일이지만 영어 사용자가 많기 때문에 어쩔 수 없는 현실이라고 생각해요. MySQL, PostgreSQL 같은 대표적인 DBMS의 웹사이트도 일부 문서의 경우 번역본이 있지만 기본 언어는 영어입니다.
구글에서 영문으로 검색을 하더라도 언어 설정이 한국어로 되어있으면 한글 문서들이 검색 결과 상위로 올라오니 언어 설정을 영어로 바꿔놓는 것이 좋습니다.
그리고 이 부분에서 제가 생각하기에 가장 중요한 점은 “영어를 잘 할 필요는 없다”라는 거예요. 제가 토박이 한국인이라 그런지는 몰라도 영어 문장을 쓸 때에 문법에 대해 생각을 많이해요. 하지만 적어도 검색을 할 때에는 전혀 신경 쓸 필요가 없습니다. 어떻게 써도 구글이 찰떡같이 알아들을거예요. 예를 들어, 윈도우 함수 중에 lag, lead 함수에 대해서 궁금하다면 “sql window function lag lead”라고 단어만 나열해놓는 것으로도 충분합니다.
 

3. 검색 키워드를 잘 넣기

내가 원하는 검색 결과를 얻으려면 검색 쿼리의 범위를 좁혀줘야 합니다.
예를 들어 볼게요. PostgreSQL의 CUBE라는 함수가 궁금해서 구글에 “cube”라고 검색하면 어떤 결과가 나올까요? 큐브 엔터테인먼트가 나옵니다! 원하는 결과를 얻으려면 ‘postgresql cube’라고 좀 더 범위를 좁혀서 검색해야 합니다.
 
구글에 cube라고 검색한 결과
구글에 cube라고 검색한 결과
 
반대로 너무 좁히는 것도 좋지 않습니다. 윈도우 함수의 사용 예시를 좀 보고싶다면 ‘postgresql window function’, ‘mysql window function’이라고 특정 DBMS를 검색어에 넣는 것보다 ‘sql window function’이라고 검색해야 더 다양한 검색 결과를 볼 수 있습니다.
 

4. 신뢰할 수 있는 사이트를 클릭하기

stackoverflow는 애용하는 좋은 기술 커뮤니티입니다.
공식 문서는 가장 정확한 정보를 제공합니다. 저는 공식 문서를 우선적으로 읽습니다. MySQL의 경우 http://dev.mysql.com/, PostgreSQL의 경우 https://www.postgresql.org/ 입니다. 영어로 쓰여져 있지만 공식 문서는 해석의 오해가 없도록 쉽고 명확하게 쓰여져 있는 경우가 대부분입니다. 만약 영어로 읽는 것이 아직 좀 부담스럽다면 deepl 같은 번역기를 통해 전반적인 내용과 글을 구조를 빠르게 파악하고, 정확한 이해가 필요한 부분만 영어로 다시 읽는 방법도 좋습니다.
이외에도 나만의 신뢰할 수 있는 사이트 목록을 만들어보세요. (신뢰할 수 있는 사이트 목록에 데이터리안 블로그도 한 자리를 차지했으면 좋겠네요 ☺️)
 

5. 언제 쓰여졌는지 확인하기

이외에, 언제 쓰여진 글인지 파악하는 것도 중요합니다. SQL은 다른 프로그래밍 언어나 프레임워크에 비해 발전이 매우 빠르지는 않고 표준이 정해져있어 최신 문서만 봐야 할 필요까지는 없지만, DBMS의 특정 버전 이후에서만 사용할 수 있는 함수가 있다던지 하는 시기가 중요한 정보도 분명히 있습니다.
예를 들어, MySQL은 2018년에 릴리즈한 8.0 버전부터 윈도우 함수를 지원하기 시작했기 때문에 ‘mysql cumulative sum(MySQL로 누적합 구하기)’를 검색해 2018년 이전 자료들만 살펴본다면 윈도우 함수가 아닌 서브쿼리를 이용한 풀이만 보게 될 확률이 높습니다.
 
notion image
 
검색결과의 꽤 상단에 stackoverflow에 2010년에 올라온 질문(링크)이 있죠. 들어가서 살펴보면 서브쿼리로 누적합을 구하는 답변이 가장 상단에 있습니다. MySQL 8.0 버전 이상을 쓰고 있다면 누적합은 서브쿼리로 계산하는 것보다 윈도우 함수로 계산하는 것이 훨씬 빠른데, 이 링크에 있는 정보만 보고 SQL을 작성하면 서브 쿼리로 작성을 하고 있겠죠. SQL에 대해서 검색을 할 때에도 정보의 최신성을 생각해야 하는 이유입니다.
 
지금까지 다섯 가지 정보 검색 팁을 드렸습니다.
  1. 구글에서 검색하기
  1. 영문으로 검색하기
  1. 검색 키워드를 잘 넣기
  1. 신뢰할 수 있는 사이트를 클릭하기
  1. 언제 쓰여졌는지 확인하기
 
위의 다섯가지 팁들을 적용해보고 문제 해결을 더 빠르게 할 수 있었다면 심화 학습으로 개발자를 위한 정보 검색 팁 글을 꼭 읽어보길 바랍니다.
 
 

질문답변방

검색을 했는데도 결국 문제 해결이 안 되는 경우도 있습니다. 그럴 때에는 슬랙의 질문답변방에 질문을 올려주세요. 같은 과정을 공부하며 시행착오를 미리 해 본 동료와 선배, 그리고 여러분들의 학습을 돕기 위해 기다리고 있는 멘토들이 있습니다.
 
💡
질문답변방은 데이터리안 캠프 수강생 분들에게 해당하는 내용이지만, 주변의 멘토에게 질문을 하거나 또는 stackoverflow 같은 커뮤니티를 이용할 때에도 아래의 ‘✅ 질문 템플릿’이 좋은 질문을 만드는 토대가 되어줄거예요.
 

슬랙 검색 이용

슬랙에 들어와서 가장 먼저 해야할 일은, 역시 검색입니다. 슬랙 앱 상단을 보면 ‘데이터리안 커뮤니티 검색’창이 있어요. 일단 여기에 나와 같은 질문을 한 사람은 없는지, 만약 있다면 문제를 어떻게 해결했는지를 먼저 살펴보세요.
notion image
 

✅ 질문 템플릿

만약 비슷한 질문을 한 사람이 없다면, 아래 항목들을 채워 질문을 올려주세요.
✔️ 질문과 관련된 강의 영상 제목과 시간대 또는 문제 링크
  • 강의 영상 제목과 시간대 O, 문제 링크 O
  • 노션 수업 자료 링크 X: 한 수업 자료에 많은 내용이 들어있기 때문에 어떤 내용에 대한 질문인지 파악하기 어려워요.
✔️ 작성한 코드
  • 코드 복사 붙여넣기 O
  • 스크린샷 X, 사진 X: 코드의 에러를 확인하기 위해서 답변자가 코드를 실행해봐야 하는데 스크린샷이나, 사진으로 올리면 긴 쿼리를 따라서 다시 작성해야 하는 번거로움이 있어요.
✔️ 문제 상황 서술: 기대했던 결과와 내 시도를 통해 얻은 결과의 차이를 중심으로 적어야 답변자가 문제 상황을 정확하게 파악할 수 있어요.
✔️ 기타 추가 설명: 구글 검색어, 참고한 자료 링크 등
 
모호한 질문에는 모호한 답변이 나갈 수 밖에 없는 것 같아요. 모호한 질문을 하게 되면 답변자가 질문의 의도를 정확하게 파악할 수 없기 때문에 질문의 의도와는 다른 답변을 할 수 있고, 결국 진짜 궁금했던 것의 답을 찾기 위해 더 많은 시간을 들여 커뮤니케이션을 해야합니다. 답변자의 편의를 위해서가 아니라, 질문자가 문제를 빠르게 해결하기 위해서 정확한 질문을 하는 것은 중요합니다.
질문 템플릿에 있는 항목을 채우다보면(특히 ‘기대했던 결과와 내 시도를 통해 얻은 결과의 차이’를 고민하는 부분에서) 스스로 문제를 해결하게 될 때도 있을거예요. 그런 경험을 질문답변방에 공유해주시는 것도 질문답변방의 좋은 활용 사례가 될 것 같습니다.
물론 꼭 이 템플릿에 맞지 않는 질문도 있을거예요. 그런 질문도 언제든 환영합니다! 좋은 질문과 답변을 주고받는 환경에서 가장 빠르게 성장할 수 있다고 생각합니다.
 
 

뻔하지만, 결국 스스로 해봐야 는다

앞에서 TMI로 얘기했지만, 저는 건반을 배웁니다. 아래에 색을 칠해놓은 외계어를 읽으면서 피아노를 쳐야하는데 처음에는 한 마디를 제대로 연주하기도 어렵더라구요. 아 너무 답답했어요. 매번 새로운 악보를 읽을때면 때려칠까 싶어요.
 
notion image
 
그런데 이걸 반복 연습을 하면 처음에는 한 마디도 안되다가, 결국 한 마디를 칠 수 있게 되고 그걸 다음 마디로도 연결할 수 있게 되고… 이걸 계속 하다보면 한 곡을 완주할 수 있게 됩니다. ‘이게 된다!’는 느낌이 들 때의 희열은 말로 설명할 수 없습니다. 선생님이 수업 시간에 아무리 잘 알려주고, 쉽게 할 수 있는 꼼수를 전수해줘도 결국 내가 연습하는 시간이 없으면 내 것이 되지 않더라구요. 뻔한 이야기지만요.
저는 이 과정에서 제가 프로그래밍을 처음 배울 때를 생각했어요. 그리고 수강생 분들도 생각이 나더라구요. ‘아 SQL 수업을 듣는 수강생 분들도 똑같겠구나. 똑같이 막막하고 무수하게 실패하겠구나.’하고요. 결국에 성장하는 사람은 이 막막함을 견디고 계속 시도를 해보는 사람인 것 같아요. 화면을 째려보면서 오류가 도대체 어디있나 찾아도 보고, 답답함에 ‘아~ 도대체 이게 뭐야’ 혼잣말도 해보고, 하루 종일 찾은 오류가 오타라는 것을 알고 허망한 웃음도 지었다가, 구글에 검색도 해보고, 스터디 팀원들한테 물어도보고, 질문답변방에 질문도 남겨보고 하는 그 과정에서 끊임없이 성장하는거예요. 그리고 그 과정을 지나다보면 어느 순간 ‘어? 내가 좀 능숙해졌네?’하는 마법같은 순간도 발견하게 되고요. 질문답변방에 이제는 질문이 아니라 답변을 남기는 선배 기수들이 바로 그 마법같은 순간을 지나온 사람들입니다.
 
막막함에 부딪혔을 때 이 글이 도움이 되길 바랍니다. 새로운 걸 배우는 모두가 멋있어요. 같이 성장해봐요! 🙌🏻
윤선미데이터 분석가

어느새 7년차 데이터 분석가이고, 4년째 데이터 분석 교육을 하고 있습니다. 데이터리안 멤버들과 함께 일하면서 데이터의 힘을 더 믿게 되었습니다.

함께 읽어보면 좋은 글

주식회사 데이터리안