하도 데이터, 데이터 외쳐 대는 통에 SQL을 배웠지만, 아직도 회사에서 데이터 보려면 어디에서 무엇을 해야할지 헤매고 있지 않나요? 문법을 익히는 게 중요한 게 아닙니다. 우리 서비스의 데이터 구조를 모른 채 Query만 쓸 줄 아는 건, 통삽겹 구이 먹으려고 삼겹살도 없이 에어프라이어 설명서만 읽는 거랑 똑같은 거라고요! 데이터를 활용하려면 회사에 어떤 데이터가 있고, 어떤 형태로 쌓이고 있는지 알아야 합니다. 그리고 안타깝게도 이 정보들은 인터넷에 공개된 무료 SQL Guide처럼 말끔하게 정리되어 있지 않을 확률이 높아요. 엔지니어와 데이터 분석가를 찾아가기 전에 데이터 구조를 파악하고 활용할 수 있는 몇 가지 효과적인 방법을 소개합니다.
✋ 잠깐! 아래 내용은 SELECT, WHERE, JOIN을 포함한 SQL 기본 문법에 대한 이해도가 있는 분들께 권합니다. 아직 SQL 문법을 잘 모른다면, 데이터 플랫폼 서비스 Mode에서 제공하는 Tutorial을 추천합니다.
DBeaver, HeidiSQL, Redash, Superset 등 회사에서 사용하는 SQL 도구에 접속해보면 어떤 테이블이 있고, 그 안에서 어떤 정보가 관리되고 있는지 확인할 수 있어요. 목록을 보는 것만으로는 정확히 알 수 없지만, 테이블과 컬럼 이름을 보면 대략적인 의미를 유추할 수 있을 거에요. 참고로, 서비스와 관련된 데이터는 크게 두 가지 유형으로 구분됩니다.
로그는 서비스 로그와 행동 로그로 구분된다. 서비스 로그는 트랜잭션(transaction)의 결과를 기록하는 로그다. 가입하거나 예약하거나 결제를 하는 것처럼 하나의 트랜잭션이 완료되면 각각에 대한 서비스 로그가 남는다. 반면 행동 로그는 트랜잭션에 이르기까지 사용자가 서비스에서 하는 하나하나의 액션에 대한 로그를 의미한다. 특정 상품을 클릭하거나 검색하거나 배너를 스와이프 하는 등의 액션을 예로 들 수 있다. 양승화, <그로스 해킹>, 위키북스
왠지 필요할 것 같은 테이블을 발견 했다면, 그냥 지나치지 말고 Sample 값을 확인 해보아요. 🛠 SELECT * FROM table_a LIMIT 100; 테이블과 컬럼 이름만 확인하는 것보다, 실제 어떤 값이 입력되어 있는지 보면 훨씬 더 많은 정보를 얻을 수 있으니까요!
데이터는 목적에 따라 여러 개의 테이블로 쪼개어 관리됩니다. 그렇기 때문에 분석에 필요한 데이터를 추출할 때는 여러 테이블에 나누어져 있는 데이터를 합쳐서(Join) 확인 하는 경우가 많아요. 이 정보는 이 테이블에서 저 정보는 또 다른 테이블에서 가져오는 거죠. 먼저, 원하는 정보를 얻기 위해 필요한 값이 무엇인지 개념적으로 적어 보면 좋아요. 정확히 어떤 테이블에서 해당 정보를 가지고 와야 하는지는 몰라도 괜찮습니다. 하지만 내가 추출하고자 하는 데이터가 어떤 항목으로 구성되어야 할지는 구체적으로 정의 해보는 게 좋아요. 예를 들어, 지난 일주일 간 운영 중인 프로모션 페이지를 조회한 사용자 수를 지역별로 구분해보고 싶다고 가정 해볼게요. 이 경우, 프로모션 페이지를 방문한 사용자(User ID), 사용자가 거주 중인 지역, 프로모션 페이지를 방문한 시간이 필요할 거에요. 프로모션 페이지 방문은 사용자 Action의 일종이니, 행동 로그 테이블에서 프로모션 페이지 방문에 해당하는 Event와 원하는 기간에 맞추어 Filter 하면 됩니다. 한편, 행동 로그 테이블에는 사용자의 Demographic 정보가 기록되지 않는 경우가 많아요. 그러니 사용자의 거주 지역은 사용자 정보를 담고 있는 User 테이블을 참조하고, User ID를 Key로 행동 로그 테이블과 User 테이블을 Join하면 원하는 정보를 모두 얻을 수 있습니다. 아주 복잡하게 느껴지는 데이터를 추출하는 경우에도, Output 컬럼을 명확하게 정의하고, 각 컬럼 별로 필요한 조건이 무엇인지 쪼개어 생각하면, 생각보다 어렵지 않게 문제를 풀 수 있습니다.