뿅뿅뿅/돌아라 회전목마

Data Pipeline 쉽게 이해하기

우주먼지의하루 2021. 4. 8. 00:02
728x90

Data Pipeline 개요

IT 서비스를 사용하는 입장에서는 전혀 눈치채지 못하지만 뒤에서는 생성된 데이터를 무사히 저장소에 저장하기 위해 여러 서버 컴퓨터들이 분주하게 일을 하고 있습니다. 데이터를 생성해서 무사히 저장하기까지 일련의 과정을 데이터 파이프라인이라고 합니다.

 

데이터 파이프라인 예시

 

데이터 파이프라인을 큼지막하게 본다면 아래와 같이 나눌 수 있어요.

 

1. 데이터 생성
2. 데이터 수집
3. 데이터 가공 후 저장(ETL)
4. 데이터 시각화(BI)

 

데이터를 저장하는 과정이 복잡한 이유는 데이터가 누수되지 않고 안전하게 저장되게 하기 위해서죠. 실제로 수많은 사용자들을 둔 서비스의 경우 매 초마다 수천, 수만의 데이터가 생성됩니다. 이들이 모두 데이터 저장소(데이터 웨어하우스, 데이터 레이크 등)에 저장되기 위해선 각자의 역할을 가진 컴퓨터들이 협동해야 합니다. 

 

데이터 파이프라인을 구축하기 위해 IT 회사에서는 데이터 엔지니어를 필요로 합니다. 역할 별로 데이터를 처리하는 서버 컴퓨터들을 관리하고 분석할 수 있는 형태로 데이터를 가공하고 시각화하는 작업을 하죠.


소규모의 서비스에는 SAAS 형태의 분석 툴(GA, Amplitude 등)로 충분하지만, 규모가 커지면 데이터 엔지니어가 직접 데이터 환경을 구축하는 게 낫습니다. (경제성, 데이터 정합성 측면 등)

데이터 생성

먼저 데이터의 종류는 두 가지로 나눌 수 있습니다. 서비스 운영에 필요한 서비스 데이터와 서비스에서 발생한 로그 데이터로 구성됩니다.

 

서비스 데이터는 데이터베이스에 논리적으로 저장됩니다.

 

서비스 데이터는 쿠팡을 예로 들면 상품 정보, 고객 정보, 결제 정보 등을 생각하면 됩니다. 이들은 서비스 운영에 꼭 필요한 친구들이고 철저한 보안 관리를 받는 데이터베이스에 저장됩니다. 만일 이 데이터베이스가 해킹 당한다는 건 IT 회사의 생명이 끝나는 것과 다름이 없죠.

 

일반적으로 서비스 데이터는 따로 데이터 파이프라인을 거치지 않습니다. 해당 데이터의 생성 속도가 빠르지 않으며 오히려 데이터의 관리(보안, 성능)에 더 신경을 써야 하기 때문입니다. 그래서 서비스 데이터를 따로 관리하는 직군으로 DBA가 있으며 여러 클라우드 사에서 보안, 성능을 최적화한 데이터베이스 상품을 앞다투어 판매하고 있죠.

 

쿠팡 웹에서는 대부분의 클릭, 스크롤, 경유 시간 등을 전부 로그로 남깁니다.

 

로그 데이터는 서비스를 운영하면서 생기는 모든 행위를 기록(로그)으로 남긴 데이터예요. 유저가 서비스(웹, 앱 등)를 이용하면서 클릭, 스크롤, 머무르기 같은 이벤트가 발생하게 됩니다. 이때 이런 이벤트를 기록한 결과들은 전부 로그 데이터라고 볼 수 있습니다.

 

로그 데이터는 크게 유저들이 서비스(웹, 앱)를 사용하면서 생성되는 클라이언트 로그와 백엔드 서버에서 발생하는 서버 로그로 나눌 수 있어요. 서버 로그는 보통 백엔드 개발자들이 서버에 발생한 이상 징후나 패턴을 찾을 때 사용합니다. 반면 클라이언트 로그는 고객들의 행동을 분석하는 데 사용되기 때문에 다양한 직군이 클라이언트 로그를 활용하게 되죠.

 

업종마다 다르겠지만 IT 회사에서 다루는 데이터 양의 대부분은 로그 데이터가 차지합니다. 한 명의 유저가 웹 사이트나 앱에 잠깐 접속하더라도 적게는 10개 많게는 100개 이상의 로그 데이터가 생성되는데 수천, 수만 명의 유저가 방문한다면 정말 많은 트래픽의 데이터를 견뎌야겠죠?


데이터 생성

데이터를 생성한다는 것은 각 도메인을 맡는 개발자가 데이터를 생성해서 서버로 전송하는 코드를 짠다는 것을 의미합니다. 예를 들어 웹 서비스에서 결제 버튼 클릭을 표현하는 클라이언트 로그를 추가하고 싶다면 프론트엔드 개발자가 코드를 추가합니다. 만일 API 서버에서 회원가입 요청이 얼마나 왔는지 확인하고 싶다면 백엔드 개발자가 코드를 추가해야겠죠. 

데이터 저장소에 따라 각기 다른 데이터 형식으로 생성해야 합니다.

참고로 데이터가 저장되는 서비스에 따라 데이터의 형식이 달라집니다. Google Analytics나 Amplitude 같이 SAAS 형태로 제공되는 분석 툴의 경우 그곳에서 요구하는 데이터 형식에 맞게 코드를 새롭게 짜는 과정이 필요합니다. 만일 서드 파티 툴과 함께 자체적으로 데이터를 관리한다면? 데이터를 관리하기가 더욱 복잡해지겠죠. 그래서 데이터를 생성할 때도 아키텍처를 잘 설계해서 관리하는 게 중요합니다

 

[참고]
요새 데이터 관리를 손쉽게 도와주는 CDP(Customer Data Platform)가 급부상하고 있습니다. CDP를 이용하면 한 번의 데이터 생성만으로 다양한 데이터 저장소에 맞는 형식으로 저장을 합니다

데이터 수집

일반적으로 프론트엔드(웹, 앱)에서 생성된 유저 행동 데이터는 ① SAAS 분석 툴 ② 회사 데이터 수집 서버로 전송됩니다.

 

SAAS 분석 툴의 경우 자주 언급했던 Google Analytics, Amplitude 등의 서비스를 생각하시면 됩니다. 이들은 규격에 맞게 데이터를 전송하면 트래픽에 관계없이 안전하게 데이터를 저장해주는 동시에 분석 & 시각화를 해준다는 장점이 있습니다. 실제로 규모에 상관없이 거의 모든 IT 회사들은 SAAS 데이터 분석 제품을 사용하고 있어요.

 

하지만 여타 SAAS 제품과 동일하게 제공해주는 환경 밖에서는 커스터마이징이 불편합니다. 원하는 형태로 데이터를 가공하고 분석하기에 한계가 있죠. 이들이 관리하는 데이터들을 Export해서 다시 저장하고 가공하는 과정이 여간 귀찮은 게 아닙니다.


또한 Ad Block 같은 광고 차단 프로그램을 사용하게 되면 데이터 전송이 막힐 수 있습니다. 이들은 유저가 사용하는 서비스의 도메인이 아닌 서버의 네트워크 트래픽을 차단하곤 합니다. 그렇게 되면 데이터의 손실이 발생할 수 있겠죠?

 

그래서 규모가 있는 IT 회사에서는 자체적으로 데이터 인프라를 구축합니다. 외부 트래픽 차단 프로그램에서 자유로우며 데이터 손실을 최소화할 수 있게 됩니다. 그렇다고 SAAS 분석 제품을 안 쓰는 건 아니에요. IT 회사들은 거의 대부분은 규모에 따라 무료부터 유료까지 다양한 분석 제품을 혼용해서 사용하고 있습니다.

 

 

수 많은 유저들이 사용하는 서비스에서 발생하는 데이터들은 곧바로 데이터베이스(데이터 레이크 혹은 데이터 웨어하우스 등)에 저장되지 않습니다. 대신 수집 서버를 거치게 됩니다.

 

수집 서버는 데이터가 흐르는 중간 매체(미들웨어)라고 생각하시면 되는데요. 이 수집 서버를 거쳐서 데이터베이스에 저장시키는 경우가 있고 아니면 데이터를 가공하는 서버로 전달하기도 합니다. 보통 데이터의 가공된 정도(비정형, 정형)에 따라 달라집니다.

 

수집 서버는 기본적으로 트래픽을 견딜 수 있도록 견고하게 설계되어야 합니다. 또한 다양한 목적지로 데이터를 전송해주기까지 잘 보관하고 있어야 합니다. 즉 대용량의 데이터를 실시간으로 처리하는 기능이 뛰어나야 하죠. 그래서 데이터 엔지니어가 가장 신경써야 하는 영역 중 하나입니다. 

 

[참고]
개발자가 대표적으로 많이 쓰는 수집 서버 솔루션으로 AWS의 Kinesis, Apache의 Kafka 등이 있습니다. 혹은 개발자들이 더 손쉽게 데이터를 관리할 수 있도록 도와주는 Segment 이벤트 콜렉터도 사용하곤 합니다.

데이터 가공

시간이 지날수록 데이터를 저장하는 디스크(SSD)의 성능이 점점 좋아지고 있으며 클라우드에서도 더 값싸게 데이터를 저장해주는 공간을 제공해줍니다. 그래서 이제 개인도 충분히 원하는 데이터를 저렴한 가격에 저장할 수 있게 됐습니다.

 

IT 회사에서는 정말 많은 데이터들을 저장하고 관리해야 합니다. 회사 내에서는 ERP 같이 사내 데이터를 관리하는 데이터베이스가 필요합니다. 그리고 서비스를 제공하기 위해서 서비스 데이터베이스가 꼭 있어야 하며 사용자들이 서비스를 이용하면서 남기는 클라이언트 로그도 저장해야 하죠. 이 뿐만 아니라 각 서버들의 로그도 남겨야 하고, 3rd party 서비스에서 발생하는 데이터들까지.

 

현재는 데이터 춘추 전국 시대입니다. 데이터 저장을 제공해주는 서비스마다 장단점이 있어 자연스럽게 여러 서비스를 사용할 수밖에 없는 거죠.

 

이렇게 다양한 데이터 소스로부터 데이터를 분석해야 한다면 어떨까요? 예를 들어 '페이스북 광고를 타고 들어와 A 상품을 구매한 고객들이 관심 있어하는 상품들' 을 추출하고 싶다면 어떨까요?  기본적으로 아래와 데이터 소스로부터 데이터를 가져와서 가공하는 작업까지... 

 

1. 페이스북 광고 픽셀 데이터
2. 서비스 데이터베이스(유저, 상품, 결제 데이터)
3. GA 데이터(유저 행동 분석 데이터)

 

이 글을 쓰는 와중에 데이터와 홀연히 싸우고 계시는 데이터 분석가 분들에게 심심한 위로를 보냅니다. 실제로 데이터 분석가는 핸썸하게 SQL로 데이터를 분석하는 일만 하지 않습니다. 정상적으로 데이터를 추출하고 데이터 형식을 통일시키기 위해 수많은 노가다 작업이 포함되어 있죠

 

그래서 데이터가 많은 IT 회사에서는 다양한 데이터 소스의 데이터를 한 곳에 취합하는 작업을 합니다. 그렇게 되면 데이터를 관리하고 분석하는 데에 맨먼스(manmonth)가 확연히 줄어들 겁니다. 

 

ETL

ETL 프로세스

 

다양한 데이터 소스들을 관리하기 쉽게 한 군데로 취합하는 대표적인 프로세스로 ETL가 있습니다. ETL은 Extract, Transform, Load의 약자로 데이터를 가공하는 과정이라고 보시면 됩니다.

 

[참고]
요새는 ETL 프로세스를 자동화하도록 도와주는 SAAS 제품도 늘어나고 있습니다. 대표적으로 FiveTran, Panoply 등이 있으며 더 로우 레벨로 개발하는 대신 확장성이 높은 Airflow도 업계에서 점점 표준이 되고 있습니다. 

 

Extract

산발적으로 흩어져 있는 데이터 소스로부터 데이터들을 가져오기 위해선 추출하는 과정이 필요합니다. 이를 Extract라고 합니다. 보통 클라우드 서비스에서 손쉽게 데이터를 추출하도록 많이 자동화가 되어있는 편입니다.

 

Transform

Transform은 데이터를 가공하는 작업입니다. 여러 데이터베이스에 저장된 데이터는 형식이 각기 다릅니다. 이들을 한 군데로 이쁘게 정렬시키기 위해선 데이터 형식에 맞게 데이터를 변형해주는 작업이 꼭 필요합니다. 또한 회사에서 지향하는 데이터 목적성에 맞게 필터링을 하는 과정도 필요하겠네요. 

이때 가공되기 전의 데이터, 즉 데이터 소스에 저장된 데이터를 비정형 데이터라고 한다면 가공된 데이터를 정형 데이터라고 합니다. 보통 빅데이터라는 키워드의 핵심 중 하나로 비정형 데이터들을 정형 데이터로 가공하는 작업이 있답니다.

 

Load

최종적으로 데이터 변형이 완료됐다면 데이터 웨어하우스에 적재(Load)하는 과정이 남아있습니다. 데이터 웨어하우스는 규칙적(Relational)으로 데이터를 저장하도록 돕는 일종의 데이터베이스로 대용량의 데이터를 관리하기에 최적화된 데이터베이스라고 보시면 됩니다. 

최종적으로 데이터 분석가, 사이언티스트, 머신러닝 엔지니어 등이 데이터 웨어하우스에 저장된 데이터를 사용한다고 보시면 됩니다. 그리고 데이터 웨어하우스에 데이터를 안전하게 적재하는 작업은 데이터 엔지니어가 맡게 되죠.

 

 

ELT?

ELT 프로세스

 

최근에는 ELT 프로세스가 화두가 되고 있어요. 기존에 ETL 프로세스에서 Transform 과정은 생각보다 많은 컴퓨팅 파워(=비용)를 필요로 하며 생각보다 손을 많이 타는 작업이에요. 그래서 데이터를 우선 한 곳에 먼저 적재(Load)한 후 필요에 따라 Transform을 하는 ELT 과정이 인기를 끌고 있습니다. 이때 데이터들을 한 곳에 빠르게 저장하는 공간을 데이터 레이크라고 부릅니다(데이터 웨어하우스에서 비슷한 역할을 제공해주기도 합니다)

데이터 시각화와 분석

데이터 시각화

옛날에는 데이터 시각화를 돕는 프로그래밍 언어 R, SAS 등을 이용해서 데이터를 시각화했습니다(저도 학부생 시절 SAS를 배웠었죠) 하지만 데이터 시각화를 위해 프로그래밍 언어를 직접 배워야 한다는 러닝 커브가 있고 결정적으로 이쁘지 않습니다.

 

데이터가 중요해지면서 데이터 시각화를 편리하게 지원해주는 도구들이 많이 늘었습니다. 이때 데이터 시각화 템플릿과 분석할 수 있는 환경을 제공해주는 도구를 Business Intelligence(BI)이라고 합니다. 대표적으로 Tableau, Power BI, Google Data Studio(무료)가 있습니다. 

 

BI를 사용하면 데이터 소스들(데이터 웨어하우스, 3rd party 데이터(페이스북 픽셀, GA, 등))을 연결시키고 템플릿을 조금만 건들면 손쉽게 데이터 분석 결과를 볼 수 있습니다. 또한 데이터를 분석할 수 있는 도구들을 제공해주며 직접 SQL문으로 분석도 가능합니다.

 

정말 다양한 기능들을 제공해주므로 궁금하신 분들은 한 번 사용해보시는 걸 추천드립니다. 간단한 엑셀 데이터로도 테스트할 수 있습니다.

 

보통 BI를 기존 데이터 소스와 연동하는 것까지 데이터 엔지니어가 책임지게 됩니다. 

 


데이터 분석

보통 회사에서는 데이터를 분석하기 위해 다양한 도구를 활용합니다. BI 툴과 별개로 데이터 분석가가 편하게 데이터를 분석할 수 있는 분석 환경을 구축합니다. 간단한 데이터 분석은 상용화된 서비스로 해결할 수 있지만 결국엔 직접 SQL, Python 등으로 데이터를 추출해야 합니다. 

 

이때 회사에서 데이터를 분석한다는 것은 크게 3가지로 나눌 수 있을 것 같습니다.

 

  • 회사의 다른 팀원이 데이터 분석을 요청해서 SQL문을 이용해 분석 결과를 제공해주는 것
  • 미리 정해진 방식으로 보여주기 위해 대시보드(BI 툴 등)에 시각화하는 것
  • 머신러닝 & 통계학 지식을 바탕으로 모델을 만들고 데이터들을 모델에 넣어서 결과를 얻어내는 것

여기서 데이터는 서비스 핵심 데이터베이스, 빅데이터가 저장되어 있는 데이터 웨어하우스에 저장된 폭넓은 의미의 데이터를 의미합니다.

 

1번째는 데이터 분석가가 담당합니다. 팀원들이 쌓여있는 데이터를 분석하고 싶을 때(지난달 가장 매출이 높은 상품, A라는 상품을 산 고객들이 다음에 산 상품 등) 데이터 분석가는 데이터베이스, 데이터 웨어하우스의 데이터를 가공하고 원하는 결과 값을 얻어냅니다. 

 

2번째 BI는 데이터 엔지니어가 관리합니다. BI는 회사에서 관리하는 데이터들을 시각화해서 보여줍니다. 이번 달 매출, 이번 달에 가장 많은 매출을 낸 상품 등을 대시보드 형태로 만들어 두면 데이터 분석가가 항상 데이터를 보여줄 필요가 없겠죠?

 

[참고]
1,2 번을 같이 작업할 수 있는 직군으로 Analytics EngineerBI Engineer도 존재합니다. 

3번째는 데이터 사이언티스트 혹은 머신러닝 엔지니어가 맡습니다. 이들은 데이터를 분석하는 모델을 개발합니다. 모델은 머신러닝 & 통계학 기술이 들어가며 데이터들을 넣었을 때 내부 자체 알고리즘을 거쳐서 결과 값을 반환합니다. 왓챠, 넷플릭스 같은 서비스에서 영화를 추천해주는 기술 등이 해당됩니다.

 

Azure로 데이터 파이프라인 이해하기

전체적인 데이터 흐름

 

위의 그림은 전체적인 데이터 흐름입니다. 그림이 제일 잘 나와서 골랐어요~

데이터를 생성하고 수집하는 과정입니다. 

빅데이터 시대니까 정형/비정형 데이터를 모으는 과정,

실시간 데이터 수집,

대량의 데이터를 수집해야하는 등

데이터를 생성하고 수집하는 과정에서도

여러가지 상황이 있기 때문에 기존 데이터 수집에서 고도화 과정이 필요합니다.

 

데이터를 저장하고 처리하는 과정입니다.

다양한 데이터 소스의 데이터를 한 곳에 취합하는 작업입니다.

어떻게 저장하냐에 따라 저장 공간의 차이가 크기 때문에

가장 중요한 단계입니다.

 

보통 클라우드 서비스에서 손쉽게 데이터를 추출하도록 많이 자동화가 되어있는 편입니다.

 

이제 데이터를 활용하는 단계로

데이터를 시각화하고 모델을 개발하는 단계입니다

 

데이터를 어떻게 수집하고 저장하는가에 따라 많이 달라지는 것 같아요

먼저, 누락되는 경우도 없어야 할 것이고

EDA하는 과정에서 데이터를 빠르게 볼 수 있어야하는 등

여러가지 이유가 있겠죠

 

시각화 및 모델을 생성하는 것까지 데이터 파이프라인의 마무리입니다

 

 

▼출처

 

IT 회사에서 데이터가 흐른다는 것 #2 - 데이터 생성

그랩의 IT 뉴스레터

maily.so

 

반응형