[ Data Engineering ] 데이터 엔지니어링 공부 01 : 데이터 엔지니어링이란? & 데이터 엔지니어는 무슨일을 하는가?

Data_Engineering

목록 보기
1/6
post-thumbnail

[ Data Engineering ] 데이터 엔지니어링 공부 01 : 데이터 엔지니어링이란? & 데이터 엔지니어는 무슨일을 하는가?

▽데이터 엔지니어링이란? & 데이터 엔지니어는 무슨일을 하는가?

목  차

1. 데이터-엔지니어링 정의.
2. 데이터 엔지니어링 수명 주기.
3. 데이터 그룹과 데이터 엔지니어링 팀.(쏘카 글 참고)
4. 데이터 엔지니어링 팀 업무.(쏘카 글 참고)
    4-1 ) 자유로운 통합 데이터 분석 환경 만들기
    4-2 ) 데이터 지표와 보고서 만들기
    4-3 ) 데이터 기반의 백엔드 서비스 개발 및 운영
    4-4 ) 데이터 그룹의 인프라/리소스 관리

Ⅰ. 데이터-엔지니어링 정의


'데이터 엔지니어링'이라는 용어에는 수많은 정의가 존재합니다.

  • 데이터를 사용할 수 있도록 하는 일련의 작업

  • 조직의 데이터 인프라를 구축하고 운영해
    데이터 분석가와 데이터 과학자가 추가 분석을 수행할 수 있도록 준비한다.

  • SQL 기반 언어로 ETL 도구를 사용해 데이터 처리를 수행한다.

  • 하둡, 카산드라, HBase 와 같은 스토리지 맵리듀스, 스파크,플링크 같은
    빅데이터 프레임워크등의 기술들을 가지고 데이터 작업을 수행한다.

  • 기존 소프트웨어 엔지니어링에서 더 많은 요소를 가져오는 비즈니스 인텔리전스와
    데이터 웨어하우징의 상위집합으로 생각할 수 있다.
    확장된 하둡 생태계, 스트림 처리, 규모에 따른 컴퓨팅에 대한 개념과 함께
    소위 빅데이터 분산 시스템 운영 에 관한 전문화를 통합한다.

  • 데이터 이동,조각, 관리에 관한 모든것

☆ 다양한 전문가들이 '데이터 엔지니어링'을 어떻게 정의하는가에 관한 '공통된 맥락'을 풀어보면,
=>> "데이터를 가져오고 DA나 DS가 사용할 수 있도록 준비한다'라는 공통된 패턴이 존재함.

데이터 엔지니어링은 원시 데이터(raw_data)를 가져와
분석 및 머신러닝과 같은 다운스트림 사용 사례를 지원하는,
고품질의 일관된 정보를 생성하는 시스템과 프로세스의 개발, 구현 및 유지 관리이다.

데이터엔지니어링은 보안, 데이터 관리, 데이터 운영, 데이터 아키텍처, 오케스트레이션, 소프트웨어 엔지니어링의 교차점이다.

"데이터 엔지니어링"은 데이터를 가져와 분석 또는 머신러닝과 같은 활용 방안에
데이터를 제공하는 것으로 종료되는 '데이터 엔지니어링 수명주기'를 관리합닌다.

Ⅱ. 데이터 엔지니어링 수명 주기.


데이터 엔지니어링 수명 주기.

데이터 엔지니어링 수명 주기는 원시 데이터를 분석가, 데이터 과학자, 머신러닝 엔지니어 등이 사용할 수 있는 유용한 형태로 변환하는 과정을 설명하는 프레임워크입니다.

이는 데이터 생성부터 저장, 변환, 제공까지의 단계를 포함하며,
각 단계는 반복되거나 겹칠 수 있습니다.

주요 단계는 다음과 같습니다:

1. 데이터 생성(Generation)

  • 데이터는 원천 시스템(예: IoT 장치, 웹 서비스, 데이터베이스)에서 생성됩니다.

  • 원천 시스템의 데이터 유형, 속도, 빈도를 이해하는 것이 중요합니다.

2. 데이터 저장(Storage)

  • 데이터를 저장하는 단계는 수명 주기 전체에 걸쳐 이루어지며
    다른 모든 단계를 지원하는 기반 역할을 합니다.

  • 저장 기술은 데이터의 신뢰성, 가용성, 보안을 보장해야 합니다.

3. 데이터 수집(Ingestion)

  • 데이터를 원천 시스템에서 처리 시스템으로 가져오는 과정입니다.

  • Push 모델(원천 시스템에서 목적지로 전송)과
    Pull 모델(목적지가 원천 시스템에서 데이터를 가져오는 방식)이 사용됩니다.

4. 데이터 변환(Transformation)

  • 데이터를 정제하고 표준화하여 분석에 적합한 형태로 변환합니다.

    • 예: 값 표준화, 누락된 값 채우기, 데이터 타입 변환 등.

5. 데이터 제공(서빙) ( Serving)

  • 변환된 데이터를 최종 사용자나 애플리케이션에 제공하는 단계입니다.

  • API를 통해 데이터를 구조화하여 접근 가능하도록 만듭니다.

기반 요소.

수명 주기의 각 단계에는 다음과 같은 기반 요소들이 작동하며,
이 요소 없이는 각 단계가 제대로 작동할 수 없습니다:

  • 보안

  • 데이터 관리

  • DataOps

  • 데이터 아키텍처

  • 오케스트레이션 및 소프트웨어 엔지니어링

데이터 엔지니어링 수명 주기는 깔끔하게 정의된 흐름을 따르지 않을 수도 있으며,
반복적이고 유연하게 운영될 수 있습니다

Ⅲ. 데이터 그룹과 데이터 엔지니어링 팀(쏘카 글 참고)


데이터 엔지니어링 팀을 말하기 앞서,
쏘카의 데이터 엔지니어링팀의 소속 그룹인 데이터 그룹에 대해 먼저 간략히 소개합니다.
현재 데이터 그룹은 크게 다음과 같이 구성되어 있습니다.

  • 데이터 분석 팀

    • 현업 부서의 운영을 효율화 및 자동화하기 위한 데이터 분석 및 머신러닝/딥러닝/최적화 모델링을 수행합니다.
    • 사고 리스크, 차량 파손 탐지, 보험 사기 탐지, 타다 재배치, Fleet 효율화 모델 개발 및 최적화 등을 운영하고 있습니다.
  • 비즈니스 데이터 팀

    • 비즈니스 사업 분야에서의 최적의 손익을 이끌어 낼 수 있는 솔루션 제시합니다.
    • 비즈니스 현황 분석을 진행한 후, 담당 부서와 액션 아이템을 도출합니다.
  • 데이터 엔지니어링 팀

    • 데이터 분석가 및 사내 다양한 팀들이 손쉽게 서비스 데이터를 다루고 분석할 수 있는 기반을 마련합니다.
    • 데이터 분석팀들이 만든 모델 혹은 비즈니스 로직을 실제로 적용할 수 있도록 백엔드 서비스를 개발하고 환경을 구축합니다.

★ "데이터 엔지니어링 팀의 기본적인 임무는 다른 팀을 위한 "지원" 입니다."
- 동시에 이 지원을 어떻게 하면 효율적으로 처리시킬 수 있을지에 대해서 고민하고 해결해야 합니다.
- 여기에는 데이터 적재의 자동화, 속도와 확장 가능성을 고려한 운영
그리고 개발과 인프라에 대한 것들이 포함되어 있습니다.

Ⅳ. 데이터 엔지니어링 팀 업무.(쏘카 글 참고)


Ⅳ-1 ) 자유로운 통합 데이터 분석 환경 만들기

'데이터 엔지니어링 팀'의 첫 번째 고민은 "자유로운 통합-데이터 분석 환경을 어떻게 만들 수 있는가?' 입니다.

보톹ㅇ IT 서비스 회사들은 서비스를 먼저 배포&운영한 후에 사업적 고도화를 위해 데이터 분석을 시도해보려고 합니다.

이 때 별도의 분석 환경 없이 서비스의 데이터 저장소에 직접 접근하여 데이터를 분석하려고 하면
크게 2가지의 크리티컬한 이슈를 만나게 됩니다.

  • 실시간으로 유저에게 서비스 되고 있는 데이터 저장소에 직접 접근하는 것은 위험하다.

    • 분석 중 자칫 잘못하다가 데이터를 오염(수정 혹은 삭제)시킬 수 있습니다.
    • 데이터를 조회하기 위해 사용하는 쿼리가 DB에 부하를 주는 경우,
      운영중인 서비스의 성능에 영향을 줍니다.
  • 분석하고자 하는 데이터가 산발적으로 퍼져있어, 통합적으로 분석하기가 어렵다.

    • 예를 들어 서비스 A는 MySQL을 사용하고 있고, 서비스 B는 MongoDB를 사용하고 있는 경우, A의 데이터와 B의 데이터를 하나의 쿼리로 조회하기가 어렵습니다.
    • 애초에 모든 서비스가 MySQL만 사용하면 되겠다고 생각할 수 있지만,
      서비스를 개발할 당시에는 이런 통합 데이터 저장소를 고려하지 않는 경우가 대부분이고 하나의 데이터 저장소만 사용해서는 안되는 경우도 존재합니다.

이 이슈들은 두 두가지 필요성을 만들어냅니다.

  • 서비스 운영 DB가 아닌 별도의 저장소에서 분석 환경이 필요합니다.
  • 여기저기 퍼져 있는 데이터들을 한 군데(별도의 저장소)로 모야하 합니다.

쏘카 데이터 엔지니어링 팀은 별도의 통합 저장소로
Google Cloud Platform의 BigQuery를 사용합니다.

그리고 데이터를 모으는데 사용하는 워크플로우 툴로
Apache Airflow를 사용하고 있습니다.

  • BigQuery와 Airflow를 선택한 이유는?

BigQuery는 대용량 데이터 분석 목적으로 개발된 GCP의 클라우드 서비스입니다.
BigQuery를 선택한 이유를 한마디로 표현하면, 당장 사용하기 쉽고 인프라나 운영에 크게 신경쓸 것이 없기 때문입니다. 또한 비용도 저렴하고 쿼리 속도도 뛰어납니다.

Airflow는 Airbnb에서 개발한 파이썬 기반의 배치성 파이프라인 프레임워크입니다.
비슷한 툴로는 Luigi, Argo Workflow 등이 있습니다.
Airflow를 선택한 이유는 팀원들 대부분 파이썬에 익숙했고, Airflow로 파이프라인을 만드는데 그리 큰 시간이 들지 않았기 때문입니다. 더불어 오픈소스라 무료로 사용 가능하고, 원하는대로 커스터마이징이 가능합니다. 또한 Github에서 많은 수의 Star를 받은 만큼, 다른 프레임워크에 비해 커뮤니티가 잘 활성화되어 있습니다. 따라서 트러블 슈팅하는데 필요한 자료를 찾기가 용이합니다.

데이터 소스에 따라 어떻게 효율적으로 데이터를 가져올지 고민하며 파이프라인을 구성해야 합니다.
예를 들면 다음과 같은 것들을 고려해야 합니다.

1) 데이터 소스가 어떤 형태(RDB? NoSQL? 혹은 파일?)고 어떻게 가져오는게 가장 최적화된 방법일까?
2) 한 번에 가져오는 데이터양이 너무 많아서 처리 속도 혹은 메모리에 문제는 없나?
있다면 어떻게 해결해야 할까?
3) 데이터 소스가 서비스 DB인 경우,
부하를 주지 않으면서 빠르게 데이터를 가져오려면 어떻게 해야 할까?
4) 서비스 DB에서 UPDATE, DELETE가 수행되어도 일관성 있게 데이터를 가져오려면 어떻게 해야 할까?
5) 파이프라인을 재 실행해도 데이터를 멱등하게 수집하려면 어떻게 해야 할까?

단순히 데이터를 한 군데로 모으는 것을 넘어서,
사내에서 자주 사용되는 데이터를 별도로 정제 및 집계하여 일종의 데이터 마트로 만들기도 합니다.

정리하면, 데이터 엔지니어링 팀은 서비스의 다양한 데이터를 한 곳으로 모아두는 작업을 담당합니다.

또한 더 쉽게 데이터를 조회할 수 있도록 데이터 마트를 만듭니다.

쉽게 데이터를 조회하고 분석할 수 있는 환경을 지속해서 만드는 것이 데이터 엔지니어링 팀의 미션입니다.

Ⅳ-2 ) 데이터 지표와 보고서 만들기

데이터 엔지니어링 팀의 두 번째 업무는 분석 환경 구축을 넘어 실제 비즈니스 목적을 가진 분석 지표와 보고서를 만드는 일입니다.

이 보고서들은 실제 도메인 담당자들이 의사 결정할 때 사용됩니다.
“이전 달 손익 지표 보고서”, “최근 일주일간 가동률 보고서” 등이 대표적인 예입니다.

하나의 보고서는 보기 좋은 테이블이나 그래프로 보이지만, 사실 이 보고서를 만들기 위해 여러 작업이 필요합니다.

  • 먼저 보고서를 요청한 팀, 예를 들면 운영 본부나 사업 본부와 같은 팀과 미팅을 통해
    보고서의 목적을 확인하고 이와 관련된 지표를 정합니다.
  • 이후 관련 데이터들을 전처리하는 로직을 설계합니다.
    • 이 로직을 기반으로 기반 데이터를 만들고,
      이 기반 데이터를 가공해 최종적으로 사용 가능한 데이터를 만듭니다.
  • 마지막으로 최종 결과물인 보고서를 요청한 팀에게 전달하고 피드백을 받습니다.

이런 과정은 한번으로 끝나는 게 아니라, 지속적으로 이루어지기 때문에
관련 지표와 로직은 일관성 있고 확장 가능하도록 설계해야 합니다.

이런 경우엔 다음과 같은 내용을 고민하게 됩니다.

  • 어느 정도로 태스크를 쪼개야 유지보수와 재사용이 쉬울까?
  • 쿼리는 어떻게 구조화하고 최적화해야 읽기도 좋고 성능도 좋을까?
  • 어느 시간대에 어떤 순서로 실행해야 올바르게 파이프라인이 동작할까?

Ⅳ-3 ) 데이터 기반의 백엔드 서비스 개발 및 운영

데이터 그룹에서 만든 분석 및 모델링 결과를 서비스에 반영하기 위한 백엔드 서비스 역시 데이터 엔지니어링 팀이 담당하고 있습니다.

쏘카의 “대여 가격 시스템”, “면책 요금 시스템”, “차량 파손 탐지 시스템” 이 그 대표적인 예입니다.

이 시스템들은 MSA 형태로 쏘카 서비스의 필요한 모든 것을 구현하는 것이 아니라,
데이터 기반 의사결정이 필요한 도메인 로직만 분리해 처리합니다.

서비스가 성장하며 계속해서 추가 기능을 개발하고 운영해야 하므로 쉬운 유지 보수를 위한 클린 코드, 아키텍처나 CI/CD를 고민하며 백엔드 서비스를 개발합니다.

  • 데이터 분석 팀 혹은 비즈니스 데이터 팀의 비즈니스 로직과 요구사항이 계속해서 바뀌는 경우가 많기 때문에 늘 변화를 염두에 두고 유연한 코드를 설계하는데 관심.

이 외에도 데이터 엔지니어링 팀은
데이터 그룹에 도움이 되는 파이썬 모듈 개발이나 기술 문화를 도입에 힘쓰고 있습니다.

이처럼 그룹의 전반적인 엔지니어링 스킬을 올리고 선도하는 것도 데이터 엔지니어링 팀의 역할입니다.

Ⅳ-4 ) 데이터 그룹의 인프라/리소스 관리

쏘카 데이터 그룹은 빅쿼리를 사용한 분석 작업이 많아서 자연스럽게 Google Cloud Platform의 managed service를 다양하게 사용하고 있습니다(PubSub, Cloud Function, Dataproc, Dataflow, Data Studio 등).

GCP와 관련된 인프라 구축은 인프라팀의 도움을 받지만, 실 서비스 운영 및 관리는 데이터 엔지니어링 팀이 주로 담당하고 있습니다.

  • 데이터 그룹원들이 사용하는 Computing Resource, BigQuery 사용량, 데이터 정합성 검사, 그리고 네트워크 방화벽을 회사 방침에 맞게 잘 사용하는지 등을 모니터링합니다.
    • Computing Resource, BigQuery를 과도하게 사용하는 경우, 알람 메시지가 오도록 설정해둡니다.
    • 이 알람을 통해 Computing Resource 관련 장애를 미연에 방지할 수 있습니다.
    • BigQuery 관련 사용 요금을 미리 알 수 있고 과금되는 것을 막을 수 있어, 데이터 그룹 구성원들이 비교적 마음 편하게 쿼리를 날릴 수 있습니다.
    • BigQuery에 데이터가 잘 적재되었는지 정합성 검사를 통해 주기적으로 확인할 수 있습니다.
    • 네트워크 방화벽을 모니터링하여 보안에 문제가 없는지 주기적으로 확인할 수 있습니다.

.

  • GKE(Google Kubernetes Engine) 환경에서 필요한 리소스 할당 및 일관된 템플릿을 제공해주고, GKE에 배포하는 파이프라인을 설계 및 가이드합니다.

    • 배포 파이프라인을 만들거나 혹은 데이터 그룹 구성원이 직접 만들 수 있도록 가이드합니다.
    • 현재 배포는 Git-ops 형태로 관리하고 있으며,
      helm chart나 commit 메시지 등을 일관되게 구성하도록 관리합니다.
    • GKE에 올라가는 차트를 작성, 관리합니다.
      예를 들면 Airflow와 관련된 Helm chart를 직접 커스터마이징하여 운영합니다.
    • 더 나은 개발 환경과 배포 파이프라인은 없는지 계속해서 고민하고 리서치합니다.
      그 외 VPC 설정 및 쏘카의 개발 인프라인 AWS와의 연동 작업 관리 등을 담당합니다.

정리.


데이터 엔지니어링 팀의 업무를 정리하면 다음과 같습니다.

  • 전사 직원을 위한 통합 데이터 저장소 마련
    • 다양한 데이터 소스의 통합 데이터 저장소로 이동하는 파이프라인 설계
    • 좀 더 편리한 분석을 위한 데이터 마트 구축
  • 타 부서를 위한 지표, 시각화 및 보고서 개발
    • 보고서의 데이터가 지속적으로 업데이트되는 파이프라인 설계
    • 업무 규칙 협의, 지표 및 데이터 검증
  • 데이터 기반의 백엔드 서비스 개발 및 운영
    • 데이터 그룹 내 오퍼레이션, 머신러닝을 서빙하는 백엔드 서비스 개발
    • 지속적이고 유지보수가 쉬운 개발 방법론 연구 및 적용
    • 운영에 차질이 없도록 로그, 리소스 모니터링
  • 데이터 그룹 인프라 및 리소스 관리
    • GCP 서비스 운영 및 관리
    • 리소스, 네트워크, 빅쿼리 사용량 모니터링
    • GKE에 올라가는 helm chart 및 리소스 관리
    • 개발 환경과 배포 파이프라인(CI/CD) 관리

참고링크.
쏘카 데이터 엔지니어링
데이터엔지니어링이란

0개의 댓글