F-Lab
🚀
상위 1% 개발자에게 1:1로 멘토링 받아 성장하세요

데이터로 세상을 최적화한다고?_데이터엔지니어의 모든 것

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

 

데이터 기반 의사 결정은 이제 선택이 아니라 필수가 되었습니다. 데이터 엔지니어는 빅데이터를 다루는 만큼, 큰 통제력과 영향력을 발휘하는 직무이며 이에 따른 책임이 주어집니다. 회사의 큰 의사 결정에 근거가 되는 자료를 만들기 때문입니다. 대기업에서 데이터 엔지니어로 일한다면, 전 국민의 앱 사용 데이터를 내 손으로 처리해서 분석 자료를 시각화하고 그 결과를 확인할 수 있는 멋진 일을 할 수 있습니다. 데이터로 세상을 최적화하는 모든 일에서 필수적인 직무이기도 합니다.

 

일반적으로 개발자가 되기 위해 취업 준비를 하면, 웹개발을 기반으로 프론트엔드, 백엔드 개발자로 크게 분류되어 웹, 앱 서비스를 개발하는데 초점이 맞춰져 있습니다. 글에서 소개할 “데이터 엔지니어”는 백엔드 직무에 가깝지만 조금은 다른 데이터 관련 직군입니다. 기업들이 데이터를 중요하게 생각하게 된 계기와 빅데이터 기반 기술의 발전 및 데이터 엔지니어의 직무와 역할에 대해 소개해 볼까 합니다.

 

 

데이터 직군은 왜 생긴걸까?

 

기업들은 서비스를 통해 사용자와 상호 작용을 하고 이 과정에서 노하우가 쌓입니다. 예전에는 이러한 기억이 경영자의 노하우로서 축적되었지만, 회사의 규모가 커지고 서비스가 복잡해지면서 단순히 노하우보다는 의사 결정을 위한 객관적인 증거가 필요해졌습니다. 따라서 사용자의 행동 패턴을 데이터로 추출하고, 수집된 데이터를 분석한 후 전략을 세워 회사를 성장시키는 전략을 사용하기 시작했습니다. 유튜브의 영상 추천, 쿠팡이나 아마존에서 구매 가능성이 높은 제품 노출 등이 이와 같죠. 유튜브에서 더 많은 시간을 보낼수록 유튜브는 내 입맛에 맞는 영상을 추천해 주고, 점점 더 많은 시간을 보내게 되어 유튜브는 더 큰 광고 수익을 가져다주고 있습니다. 광고조차도 데이터에 기반한 맞춤형 광고이고요. 이처럼 빅테크 회사들은 데이터라는 날개를 달고 초고속으로 성장하게 되었습니다.

 

데이터를 활용하기 위해서는 데이터 파이프라인을 구축해야 합니다. 파이프라인에서 데이터를 가공하여 데이터 기반 의사 결정을 하여 리스크가 적은 시도를 하고, 빠르게 현재 상황을 파악할 수 있습니다. 이를 통해, 고객 맞춤화된 서비스를 통한 제품 고도화와, 빠른 피드백을 지표로 확인 가능하다는 장점을 활용할 수 있게 되었습니다. 이와 맞물려서 빅데이터라고 불리는 대규모의 데이터를 처리할 수 있는 기술들이 하나씩 등장하면서 데이터 분석가, 엔지니어 등의 데이터 직군이 생겨나게 되었습니다.

 

데이터가 많아진 것뿐인데 굳이 기존 백엔드 개발자가 아닌 데이터 엔지니어로서 전문화된 이유가 뭘까요? 빅데이터란 단순히 많은 데이터일까요? 빅데이터를 다시 정의해 보자면, 다양한 곳에서 다양한 방식으로 수집되며, 다양한 처리 방법이 요구되고, 빠른 처리 성능이 필요한 시스템에 유입되는 수 백 TB~ 수 십 PB 이상의 데이터라고 정의할 수 있을 것 같습니다. 기존에는 데이터를 처리하고 집계하는 데는 MySQL이나 PostgreSQL 같은 DBMS에서 SQL을 사용하면 충분했습니다. 데이터의 양과 종류가 다양해지고 처리 방법이 복잡해지는 것이 문제가 되었는데요. 하나씩 살펴보겠습니다.

 

 

데이터의 양

데이터를 처리하는 것을 참치를 손질하는 일에 비유해 볼게요. 예전에 하루에 한두 마리의 참치만 손질하면 되었던 시절엔, 한 명의 요리사(컴퓨터)만 고용하면 됐습니다. 그러나 손님이 점점 늘어나면서 하루 안에 맡은 일을 처리하기가 어려워졌죠. 직원이 무리하다 보니 종종 병가도 쓰게 되었고요. 빠르게 손질하는 30년 차 장인으로 대체하자니 그 비용이 어마어마했습니다. 아무리 훌륭한 직원을 채용한다고 해도 손님의 수가 점점 늘어나서 물리적으로 감당하기가 어려워졌습니다. 그래서 시급이 낮은 인턴 요리사 10명을 채용하고, 일을 단순하게 쪼개서 동시에 일을 시키는 방법으로 바꿨더니, 전체 비용도 훨씬 저렴하고 굉장히 많은 손님도 쉽게 처리할 수 있게 되었죠. 이렇게 장인 요리사로 한 명의 요리사를 대체하는 것처럼 서버 한 대의 성능을 업그레이드하는 것을 수직적 확장 (vertical scale up)이라고 하고 저비용의 서버 여러대를 클러스터로 구성해서 병렬처리 하는 것을 수평적 확장 (horizontal scale up)이라고 합니다. 한 대의 서버가 감당할 수 있는 데이터양을 넘어서면서 빅데이터를 다루는 일은 점차 수평적 확장의 방향으로 진화했죠.

 

 

Python 데이터 분석 라이브러리들을 비교하여 scale up의 중요성을 확인해 보겠습니다. pandas는 데이터 분석가들이 가장 많이 사용하는 데이터 분석 라이브러리 중 하나입니다. pandas는 1대의 컴퓨터 이상으로 시스템 확장이 불가능합니다. pyspark는 인메모리 분산처리 엔진으로서 수평적 확장을 통해 빅데이터를 빠르게 처리해 주는 오픈소스 플랫폼인데요. 아래 그래프에서 pandas(파란색)와 pyspark(빨간색)의 데이터 용량별 처리 속도를 비교해 보면 데이터가 늘어남에 따라 pandas는 처리 시간이 기하급수적으로 증가하는 것을 확인할 수 있습니다. pyspark는 클러스터의 규모를 증가시키면 점차 처리 속도를 빠르게 만들 수 있지만 pandas는 불가능합니다.

 

출처: https://www.element61.be/en/resource/how-use-python-and-pandas-while-embracing-power-spark

 

그렇다면, 수평적 확장이 단순히 인턴 요리사 여러 명을 고용하는 것처럼 쉽다면 왜 진작하지 않았을까요? 이것이 말처럼 단순하지 않기 때문입니다. 전체 작업이 유기적으로 일어나려면 요리사들 간의 소통도 필요하고요. 작업 완료된 참치를 전달하고 취합하는 과정, 요리사들 중 한두 명이 휴가를 갔을 때 처리, 신규 요리사들을 채용했을 때의 업무 재분배 등등 업무 관리의 복잡도가 많이 높아지게 됩니다. 분산 시스템의 언어로 다시 설명하면 노드간 통신, 데이터 전달, 노드 장애 처리, 클러스터 무중단 확장 등이 되겠습니다. 하지만 이것들은 실제 시스템에서 고려해야 할 것들 중에 극히 일부입니다.

 

 

데이터 파이프라인 구축

 

데이터를 수집, 정제, 취합, 집계, 적재하는 일련의 과정을 데이터 파이프라인을 구축한다고 합니다. 줄여서 ETL(Extraction Transformation Load)라고도 하죠. 다시 횟집 얘기로 돌아와서요. 참치는 어디서 가져올까요? 원양어선에서 직접 잡아오거나 어시장에서 사 올 수도 있고, 급할 땐 이웃 가게에서 좀 더 가격을 주고 사 올 수도 있습니다. 이렇게 여러 곳에서 데이터를 수급하는 작업을 소싱 또는 추출(Extraction)이라고 합니다. API나 웹 크롤링, DB, Kafka 등에서 데이터를 수급합니다. 원양어선에서 잡아온 참치와 시장에서 사 온 참치는 손질이 조금 다르게 되어있네요. 우리 가게에 맞는 형태로 손질하고 불필요한 부분은 제거하고 보관하기 쉽게 처리하는 과정을 데이터 처리 또는 전환(Transform)이라고 합니다. 이렇게 잘 손질된 참치는 용도에 따라 횟감용, 통조림용, 찌개용 등으로 나눠져서 각기 다른 형태로 포장되어 냉장고에 저장되게 되는데요. 데이터도 마찬가지로 용도에 따라 일반 RDBMS나 OLAP 등 각기 다른 저장 형태로 저장소에 적재됩니다. 이를 데이터 적재(Load)라고 하죠. 수집, 처리, 적재 단계마다 전문화된 시스템이 필요합니다. 참치를 낚는 어부, 손질 전문가, 적재 일꾼, 냉장고 관리인, 참치를 서빙하는 웨이터 등등 실제 데이터 파이프라인에서도 각 단계별로 전문화된 시스템을 활용해야 하죠. 또한 각 작업의 일정도 관리해 주어야 하는데요. 참치가 잡히지도 않았는데 요리사 20명이 출근을 해버리면 안 되겠죠? Airflow나 NiFi 같은 워크플로우 관리 도구를 통해 ETL 작업을 스케줄링 해줘야 합니다. 데이터 엔지니어는 어느 단계에서 어떠한 도구들이 있고 그 도구들을 적재적소에 활용하여 시스템을 통합하는 능력을 갖춰야 하죠.

 

 

데이터의 종류

횟집에서 참치 말고 광어랑 우럭도 판매하기로 했다고 하면 어떨까요? 광어나 우럭은 양식을하니 양식장에서 받아오는 시스템을 또 구축해야겠네요. 이와 같이 다양한 소스의 데이터를 처리하기 위해서는 데이터 파이프라인 전체에 큰 영향을 미치게 됩니다. 따라서 재활용 가능한 파이프라인 구축 능력도 필요하게 되죠. 예를 들어 20명의 참치 손질 요리사가 있는데 굳이 20명의 광어 손질 요리사를 또 고용할 필요가 없듯이요.

 

 

그 외

사용자의 데이터를 수집하는 일은 법적으로 자유롭지 않습니다. 최근 개인정보보호법이 강화되어 개인을 식별할 수 있는 데이터는 제외하고 저장하거나, 개인을 특정할 수 없도록 비식별화 처리를 해서 분석에 사용해야 합니다. 때문에 법률과 개정안을 계속 체크해 주어야 하죠. 이처럼 개인 정보나 회사 영업 정보는 보안이 중요하기 때문에 데이터 파이프라인 시스템에 보안적 구멍이 생기지 않게 관리하는 것도 필요합니다. 또한 데이터 수집이나, 처리 과정에서 오류가 발생하여 최종 집계 보고서에 오류가 발생하면, 기업이 잘못된 의사 결정을 할 수 있기 때문에 정합성을 지속적으로 체크해야 하기도 하죠. 또한 데이터 엔지니어는 최종 집계된 데이터를 효율적으로 시각화하여 차트로 제공하는 능력이 필요하며, 비개발 직군과 효율적으로 소통하고 데이터 파이프라인에 피드백을 반영하는 업무 등을 수행합니다.

 

 

데이터 분석가

데이터 엔지니어는 앞서 말씀드린 기술을 바탕으로 데이터 파이프라인을 구축하는 일을 하는 반면, 데이터 분석가는 데이터 자체의 도메인 지식과 수리, 통계학, 머신러닝, AI 지식을 바탕으로 데이터를 모델링하고 가치 있는 정보를 추출합니다. 이러한 분석 과정에서 데이터 파이프라인에 피드백을 주기도 하고 데이터 엔지니어가 이를 반영하기도 합니다.

 

 

마치며

따라서, 전 세계적으로 생산되는 데이터 량이 증가함에 따라 데이터 엔지니어의 수요도 점차 증가하고 있습니다. 이 글이 데이터 엔지니어를 희망하거나 어떤 업무를 하는지 알고 싶은 분들께 도움이 되었으면 좋겠습니다.

 

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수

멘토링 코스 선택하기

  • 코스 이미지
    Java Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Node.js Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Python Backend

    대규모 서비스를 지탱할 수 있는 대체 불가능한 백엔드, 데이터 엔지니어, ML엔지니어의 길을 탐구하는 성장 과정

  • 코스 이미지
    Frontend

    기술과 브라우저를 Deep-Dive 하며 성능과 아키텍처, UX에 능한 개발자로 성장하는 과정

  • 코스 이미지
    iOS

    언어와 프레임워크, 모바일 환경에 대한 탄탄한 이해도를 갖추는 iOS 개발자 성장 과정

  • 코스 이미지
    Android

    아키텍처 설계 능력과 성능 튜닝 능력을 향상시키는 안드로이드 Deep-Dive 과정

  • 코스 이미지
    Flutter

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    React Native

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    Devops

    대규모 서비스를 지탱할 수 있는 데브옵스 엔지니어로 성장하는 과정

  • 코스 이미지
    ML Engineering

    머신러닝과 엔지니어링 자체에 대한 탄탄한 이해도를 갖추는 머신러닝 엔지니어 성장 과정

  • 코스 이미지
    Data Engineering

    확장성 있는 데이터 처리 및 수급이 가능하도록 시스템을 설계 하고 운영할 수 있는 능력을 갖추는 데이터 엔지니어 성장 과정

  • 코스 이미지
    Game Server

    대규모 라이브 게임을 운영할 수 있는 처리 능력과 아키텍처 설계 능력을 갖추는 게임 서버 개발자 성장 과정

  • 코스 이미지
    Game Client

    대규모 라이브 게임 그래픽 처리 성능과 게임 자체 성능을 높힐 수 있는 능력을 갖추는 게임 클라이언트 개발자 성장 과정

F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 0507-1315-4710 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로63길 12, 438호 | copyright © F-Lab & Company 2024