up icon

읏쇼읏쇼 데이터 엔지니어링

written by.
코이
작성일 :
September 25, 2025
- 셀피쉬클럽 데이터 대시보드 구성 모두 공개 👀
- 실무에 쓸 수 있는 루커 스튜디오 제작 방법
- 대시보드 제작 '진짜' 트러블슈팅까지
‍
셀피쉬클럽에서는 데이터 엔지니어링을 어떻게 하고 있는지 알려드릴게요!

‍

안녕하세요, 셀피쉬클럽의 크루 코이예요! 💟

저를 처음 보시는 분들도 있을텐데요, 저는 올해 7월 합류한 따끈따끈한 신입입니다.

셀피쉬클럽에서는 데이터 엔지니어링 파트에서 여러분의 소중한 데이터를 관리하고 있어요.

‍

지난 AI 비즈니스 미션 해결 토스 공유회, 기억하시나요?

무려 1,415명의 신청자를 만들어내며 놀라운 성과를 기록했는데요.

‍

오늘 글을 통해서

그 과정 속에서 데이터 엔지니어링 파트는 어떤 것을 했는지

데이터 엔지니어링의 읏쇼읏쇼를 보여드릴게요!

‍

데이터 워크샵 - 뜨개질하기 🧶

그 전에, 셀피쉬클럽의 이기적멤버십 데이터에 대해서 온보딩 하는 과정을 거쳤어요.

이기적멤버십 데이터가 어떻게 돌아가고 있는지, 어떤 것들을 고려해서 구조를 짰는지 파악하는 시간을 가졌답니다.

‍

‍

셀피쉬클럽의 데이터는 사진과 같은 흐름을 갖고 있어요.

‍

데이터 흐름을 어떻게 구축했는지 더 딥한 이야기가 궁금하다면?

🔽 판다의 글을 확인해 보세요 🔽

www.selfishclub.xyz/blog/ai-membership-data1

‍

러 테이블이 있어 복잡하게 느껴질 수도 있는데요,

여러분의 신청 데이터는 이벤트 테이블로 들어오게 된답니다!

‍

자 이제 데이터가 어떻게 흐르는지 알았으니, 본격적으로 토스 공유회에서 사용할 수 있는 대시보드를 만들어야겠죠!

저희는 루커 스튜디오 (Looker Studio)를 활용해 대시보드를 제작했어요.

‍

잠깐! 루커 스튜디오란?

‍

구글의 데이터 시각화 도구로, 다양한 종류의 차트를 만들 수 있는 무료 툴이에요.

다양한 데이터를 합칠 수 있는 커넥터를 제공하고 있어요.

저희는 구글 애널리틱스 4 데이터와 스프레드 시트 데이터가 있었기 때문에 두가지의 커넥터를 사용했어요.

‍

‍

근데… 어떤 대시보드를 보고 싶으세요?

기본적으로 우리가 확인하고 싶은 데이터는

유입 | 신청 | 결제 (option)

이 세 가지 관계의 데이터였어요.

‍

유입 대비 얼마나 신청했는지,

유입 대비 얼마나 결제했는지 등의 데이터가 기본적으로 필요했는데요.

‍

이 외에도 확인하고 싶은 데이터를 각각 파트들에게 물어봤어요.

‍

바이럴 파트의 경우, 짧은 시간 안에 최대한 많은 액션을 하는 것이 중요하기 때문에 대체로 매일 액션이 나갑니다.

그렇다면 데일리, 일자별로 얼만큼의 유입과 전환이 일어나게 되었는지 필요하겠죠?

‍

CRM 파트의 경우, 바이럴과는 다르게 매일 액션이 있는 것이 아니라, 정해진 날짜에 다양한 채널로 액션을 진행해요.

그렇다면 채널별 데이터가 필요하겠죠?

‍

‍

이외에도, 파트별로 얼만큼의 성과를 내고 있는지,

우리가 획득한 데이터의 어느 정도(%)가 어떤 파트에서 이뤄지고 있는지,

최근 일주일 / 혹은 어제 오늘 데이터를 통해 내일의 액션을 어떻게 할 지,

우리가 얼만큼의 목표를 달성하고 있는지 등등

다양한 요구를 바탕으로 대시보드를 기획하게 되었어요.

### 셀피쉬클럽 대시보드 구성 👀 - 유입 대비 신청 전환율 (%) - 유입 대비 결제 전환율 (%) - 목표 달성률 (%) - 신청 기간 진행률 (%) - 전체 신청/결제 누적 스코어카드 차트 - 어제의 신청/결제 스코어카드 차트 - 오늘의 신청/결제 스코어카드 차트 - 신규/리텐션 비율 도넛 차트 - 일자별 신규/리텐션 꺾은선 그래프 - 유입 일자별 꺾은선 그래프 - 유입 일자별 및 utm_medium별 꺾은선 그래프 - utm 전체의 유입/신청/결제 테이블 차트 - utm_source별 유입/신청/결제 테이블 차트 - utm_content별 유입/신청/결제 테이블 차트 여기에 utm_medium을 선택해 필터링 할 수 있는 **드롭다운 리스트 필터**와 날짜를 선택해 필터링 할 수 있는 **날짜 범위 컨트롤 요소**를 추가했어요! 📌 단, 공유회, 챌린지 등의 상황에 따라서 필요한 차트를 유동적으로 변경하고 있어요.

‍

필요한 차트를 생각해봤으니…

본격적인 데이터 뜨개질을 해보아요!

뜨개질을 할 때, 한 종류의 실로만 뜨개질을 한다면 사실 어렵지 않아요.

그러나 우리는 알록달록하고 다채로운 직물을 뜨고 싶기도 하죠.

‍

다양한 색과 굵기의 실을 이용해서 뜨개질을 하게 되면,

코의 개수를 맞춰주는 등의 새로운 작업이 필요하게 돼요.

(왜? 다른 실이니까!)

‍

데이터도 마찬가지였는데요,

신청과 결제 데이터는 스프레드 시트 데이터베이스로 확인이 가능하지만,

유입 데이터의 경우, 웹사이트로 들어오는 데이터들이기 때문에 구글 애널리틱스 4, 즉 GA4 데이터를 통해서 확인해야 했어요.

‍

때문에 두 종류 이상의 데이터를 합치는 과정에서 데이터 블렌드 (Data Blend)가 필요했어요.

저희는 루커 스튜디오의 블렌드 데이터 (Blend Data) 기능으로 유입을 측정할 수 있는 GA4 데이터와, 나머지 신청, 결제 데이터인 스프레드 시트를 합쳤어요.

‍

앞서 리스트업한 대시보드 구성 중 이 데이터가 필요한 곳은

utm별로 유입>신청>결제 데이터를 보는 테이블 차트였어요.

‍

그렇기 때문에 utm의 종류별로 데이터를 모두 연결시켜주어 새로운 데이터 테이블을 만드는 과정이 필요했어요.

이렇게 블렌드 데이터 기능으로 두 가지 이상의 데이터를 엮을 때는 합쳐주는 JOIN 과정이 필요해요.

‍

utm 종류별로 신청 데이터와 이벤트 데이터를 연결시켜주었고,

한 쪽에 null (없는 데이터) 값이 있더라도, 양쪽 테이블을 모두 결과에 포함시켜줘야 하기 때문에 Full Outer Join으로 데이터를 조인시켜줬어요.

‍

스프레드 시트끼리의 데이터인 신청 테이블과 결제 테이블은 연결이 되었어요.

‍

그러나,

유입 데이터를 확인하기 위한 GA4 데이터와 스프레드 시트 데이터를 엮는 과정에서,

null 값이 각각 따로 찍히는 문제가 발생했습니다.

‍

‍

원인은,

GA4에서 정의한 null 값, 즉 ‘데이터가 없음’을 의미하는 것과

우리의 스프레드시트 데이터에서 정의한 ‘데이터가 없음’을 의미하는 것이

다르기 때문에 발생하는 문제였는데요.

‍

때문에 ‘데이터가 없음’을 나타내는 값을 통일시켜주는 과정이 필요했습니다.

‍

‍

즉, 문제를 다시 정의하자면

GA4에서는 null 값이 ‘(not set)’, ‘(null)’ 등의 문자열 형태로 들어오고, Sheets DB에서는 null로 들어오기 때문에 통합된 집계가 어려움

‍

‍

그래서 해결 방안은

빈 값과 그에 준하는 값들을 모두 null로 변경하는 데이터 가공을 통해 통합시켜주는 과정 필요

‍

루커 스튜디오에는 테이블에 있는 값을 가공해, 새로운 프로퍼티를 만들 수 있는 Field를 추가할 수 있어요.

‍

Resource의 Manage added data sources에서

‍

원하는 데이터의 Edit을 선택해 주세요.

‍

우측 상단의 Add a Field를 통해 Add calculated field를 선택해 주세요.

‍

그리고 null 값을 통일시켜주기 위해서 코드를 삽입해줍니다.

이름은 null을 확인한다!라고 해서 null-check를 붙여주었어요.

‍

// 스프레드 시트의 경우
CASE
  WHEN utm_@@@ IN ('', 'null') OR utm_@@@ IS NULL THEN NULL
  ELSE utm_@@@
END

‍

// GA4의 경우
CASE
  WHEN Session @@@  IN ('(direct)', '(not set)', '(none)', '(not provided)') OR Session @@@  IS NULL THEN 'null'
  ELSE Session @@@
END
  • utm campaign
  • utm content
  • utm medium
  • utm source
  • utm term

총 다섯개의 필드에 맞게 추가하여 새롭게 정의해주세요.

‍

이 과정을 필요한 테이블마다 적용해주면 된답니다.

저희의 경우 유입, 신청, 결제 테이블이 있기 때문에 5 * 3 = 총 15개의 필드를 새로 추가해줬어요.

‍

기존의 이렇게 되어있던 데이터를

‍

이렇게 새로 만든 null check 필드를 추가하고,

‍

동일하게 Full outer join으로 연결해줍니다.

‍

‍

그렇게 해서 완성된 데이터 대시보드!

여러 파트의 의견과

데이터 엔지니어링 파트의 합작으로 완성된 대시보드!

‍

매일매일 확인할 수 있도록 실시간 반영이 되기 때문에,

대시보드를 보면서 우리가 액션을 잘 하고 있는지 확인할 수 있었어요.

‍

당연히 공유회 이후의 데이터를 보며 회고를 할 때도 도움이 되었답니다.

‍

실을 맞춰주는 과정도 결국 같은 실처럼 보이도록 가공해주는 것과 마찬가지인데요,

모두가 볼 수 있는 데이터 대시보드를 제작하면서,

앞으로 다양한 데이터를 연결하게 될 때, 일관되게 데이터를 가공해주는 작업이 가장 중요하다는 것을 깨닫게 되었어요.

‍

‍

‍

앞으로의 데이터 엔지니어링 파트는?

사실 셀피쉬클럽의 데이터 엔지니어링은 이제부터 시작인데요.

앞선 데이터 대시보드를 좀 더 보기 쉽게 만드는 것은 물론이고,

‍

지난 마케팅 공유회를 들으신 분들이라면 아시겠지만,

여전히 사용하고 있는 휴먼 자동화와 복잡한 코드들이 있어요.

‍

그런 비효율적인 과정들을 없애고,

우리가 원하는 데이터를 보고, 더 쉽게 유연하게 관리할 수 있도록 여러가지를 시도 중이에요.

‍

요즘 핫한 n8n으로 이런 문제들을 해결하려고도 하고 있는데요,

‍

자율성이 더 있는 자동화 툴로 이관하는 과정을 통해

더 다양한 시도를 해보려고 해요.

‍

이외에도 AI 커뮤니티답게, AI agent를 사용하는 것도 준비하고 있는데요,

‍

우리 데이터를 이미 빠삭하게 알고 있는 AI 친구를 만들어,

  • 오늘 신청 데이터 전환율은 어제에 비해서 어땠어?
  • 오늘 데이터 보니까 내일 어떤 액션에 힘을 주면 좋을까?
  • 갑자기 데이터가 많아질 때 알려줄래?

등등

‍

셀피쉬클럽이 필요한 데이터를 더 쉽게 뽑아볼 수도 있을 것 같아

앞으로의 데이터 파트가 기대되는 요즘입니다!

‍

‍

-

‍

여러분, 코이의 뜻을 알고 계시나요?

코이는 일본어로 ‘사랑’을 뜻하는데요,

합류한지 비록 두 달밖에 되지 않았지만, 셀피쉬클럽과 함께하는 시간이 많아지면 많아질수록 셀피쉬클럽에 ‘사랑’을 느끼게 되는 것 같아요.

제가 데이터 엔지니어링을 계속해서 할 수 있는 진짜 원동력은 사실 팀에 대한 사랑이었을지도..? 🤭

‍

앞으로도 셀피쉬클럽에 대한 사랑을 바탕으로 데이터 엔지니어링에 힘을 더 쏟아보도록 할게요!

그럼 지금까지 코이였습니다 💟

‍

‍

‍