데이터 엔지니어 로드맵을 알아보자!

임지규·2021년 9월 13일
64

데이터 엔지니어?!

목록 보기
2/2

개요

지난 포스팅에서 데이터 엔지니어란 무엇이며, 어떤 역량이 필요한지 알아보았다.
이번에는 데이터 엔지니어의 로드맵을 알아보려고 한다.
즉, 완성형 데이터 엔지니어가 되기까지 무엇을 어떤 순서로 공부해야 하는지, 구체적인 기술 스택을 통해 알아볼 것이다.

자료

자료는 2021년 버전의 데이터 엔지니어 로드맵을 정리한 아래 깃허브에서 가져왔다.
(출처 : https://github.com/datastacktv/data-engineer-roadmap)
이 로드맵은 "현대 데이터 엔지니어링 환경의 완전체와도 같은 그림이며 열정적인 데이터 엔지니어들의 학습 가이드 역할을 하는 것을 목표로" 만들어졌다고 한다..!(멋지다)

자료의 크기만 봐도 알 수 있듯이 아주 넓은 영역을 담고 있고 과정과 항목을 잘 분리해놓았다.
지금부터 이 귀한 자료가 구성된 형태에 맞추어 영역별로 차근차근 정리해보려고 한다.
자 시작해보자!

영역별 내용

1. CS fundamentals

가장 첫 번째는 컴퓨터 기초 지식이다.
이 영역은 데이터 엔지니어가 아니더라도 소프트웨어 엔지니어라면 꼭 알아야 내용이기 때문에 가장 첫 단계에 위치한다.
컴퓨터의 동작 원리, 기본적인 통신 방식, 소프트웨어 엔지니어의 협업 등 어떤 직무를 맡더라도 필수적으로 알아야 하는 내용들이다.

  • 자료구조 & 알고리즘
  • API
  • REST
  • OS
  • 수학 & 통계
  • Git
  • 컴퓨터 구조
  • 네트워크

2. Programming Language

소프트웨어를 만들기 위해서는 기본적으로 프로그래밍 언어를 하나 이상 다룰 줄 알아야 한다.
어떤 언어라도 사용 가능하지만 데이터 엔지니어가 가장 많이 사용하는 대표적인 언어는 아래와 같다.

  • Python
  • Java
  • Scala
  • R

특히 Python, Java, Scala 는 데이터 처리에 널리 쓰이는 Spark 프레임워크를 잘 지원하는 대표 언어들이기 때문에 데이터 엔지니어에게 추천되는 프로그래밍 언어로 꼽힌다.
R의 경우에는 Python과 더불어 데이터 분석에 특화된 언어이기 때문에 가치가 있다.

3. Testing

소프트웨어를 만드는 과정에서는 반드시 테스트가 필요하다.
종속성을 제거하고 모듈 단위 테스트를 진행하는 유닛 테스트, 모듈들이 잘 합쳐져서 동작하는지 확인하는 통합 테스트 등의 테스트 방식을 배워야 한다.

  • Unit Test
  • Integration Test
  • Functional Test

4. Database Fundamentals

데이터베이스의 기초 지식이다.
이제 슬슬 백엔드의 영역으로 들어가는 것 같다..!
데이터베이스의 목적, 원칙, 종류, 설계 방법 등 기본 이론들을 익히는 단계이다.
이 지식들을 가지고 있어야만 실제 서비스를 운영할 때에도 상황에 가장 적합한 데이터베이스를 고르고 운영할 수 있을 것이다.

  • OLTP vs OLAP
  • Horizontal vs vertical scaling
  • RDB vs NoSql
  • Normalization
  • dimensional modeling

5. Relational Database(RDB)

전통적 방식의 관계형 데이터베이스, RDB이다.
각 테이블들을 관계형 데이터 모델에 따라 정의하고 질의 언어인 SQL을 사용하여 데이터를 다루는 데이터베이스이다.
개인적으로 DB를 공부할 때 가장 먼저 배워야 하는 기본적인 종류라고 생각한다.
트랜잭션과 데이터의 무결성 등 이론을 배운 뒤 직접 RDBMS(RDB를 관리할 수 있는 소프트웨어)를 사용해보며 SQL을 익히는 것이 좋다.

  • MySQL
  • PostgreSQL
  • Aurora

6. Non-relational Database(NoSql)

전통적 방식의 RDB가 "아닌" 데이터베이스들을 의미하는 NoSql이다.
특정 종류를 의미하는 것이 아니라 RDB가 아닌 모든 종류의 DB를 의미하기 때문에 NoSql에도 여러 종류가 있다. 문서 저장 방식의 Document DB, Key-Value 형식의 DB 등이 있다.
RDB와의 가장 큰 차이는 스키마에 대한 제약으로부터 자유로워 유동적인 데이터 모델링이 가능하다는 점이다.
또한 수직적 확장을 하는 RDB와 달리 수평적 확장을 하는 형태이기 때문에 대용량 데이터를 성능 이슈 없이 사용해야할 때에도 선택된다.
RDB를 어느정도 익혔다면 NoSql도 사용해보며 각 DB 종류의 장단점을 이해해보자!

  • Key-Value (DynamoDB, Redis)
  • Document (MongoDB, Elasticsearch)
  • Wide Column (Cassandra, HBase)
  • Graph (Neo4j, Neptune)

7. Data Warehouse

데이터 웨어하우스란 사용자의 의사 결정에 도움을 주기 위해 여러 데이터베이스에 축적된 데이터를 공통의 형식으로 변환하여 관리하는 데이터베이스이다.
즉, 여러 소스에 있는 데이터를 조합하여 분석하기 위한 데이터 저장소라고 볼 수 있다.
분석을 위해 필요한 큰 쿼리들을 시스템에서 사용하는 데이터베이스에 직접 요청한다면 부하로 인해 서비스에 영향을 미칠 수 있다.
그래서 분석용으로 데이터를 모아놓은 중앙 데이터베이스를 하나 만들면 그것이 데이터 웨어하우스(DW)이다. 그리고 이런 DW를 구축하고 활용할 수 있도록 하는 서비스들이 아래에 있다.

  • Snowflake
  • Presto
  • Hive
  • Redshift
  • BigQuery

8. Object Storage

오브젝트 스토리지는 클라우드에서 일반적으로 사용되는, 계층 없는 데이터 저장 방법이다.
즉 디렉토리 개념이 아닌 각각의 오브젝트가 고유의 Key를 가진 형태로 저장되며 분산된 저장소가 확장성, 가용성 등을 보장한다. 일반적으로 Http Api를 통해 객체를 이용한다.

  • S3
  • Blob Storage
  • Cloud Storage

9. Cluster Computing Fundamentals

클러스터 컴퓨팅, 한 대의 컴퓨터가 아니라 여러 대의 컴퓨터가 연결되어 마치 하나의 시스템처럼 동작하는 것을 말한다.
데이터의 양이 커지다보면 필요한 리소스의 요구 사항이 올라가게 되는데 이를 하나의 컴퓨터로 처리하기 위한 Scale Up의 비용이 컴퓨터의 갯수를 늘리는 Scale Out의 비용보다 훨씬 비싸다.
또한 비용도 비용이지만 Scale Up에는 결국 한계점이 있다.
그렇기 때문에 빅데이터 처리에는 클러스터 컴퓨팅 즉, 분산 컴퓨팅이 필수적이며 이에 대한 기본 원리와 기술들을 이해해야 한다. 하둡, 맵리듀스를 이해하는 것이 먼저일 것 같다.

  • Hadoop
  • HDFS
  • MapReduce
  • Managed Hadoop
  • EMR

10. Data Processing

데이터를 처리하는 방식을 공부해야 한다.
한 번에 모인 데이터를 처리하는 Batch 방식과 실시간 데이터를 처리하는 Streaming 방식으로 나뉘며 각 처리에 주로 사용되는 프레임워크나 서비스들을 이해하고 사용해보는 것이 좋다.
특히 현재 데이터 엔지니어링에 가장 많이 쓰이는 프레임워크인 Spark를 공부하는 것이 좋을 것 같다. 스파크는 배치 처리와 스트리밍 처리를 둘 다 지원한다.

  • Batch (Apache Pig, data build tool)
  • Hybrid - Batch + Streaming (Spark, Flink)
  • Streaming (Kafka, Kinesis)

11. Messaging

메시지를 전달하는 중간 다리라고 볼 수 있다.
메시지 큐라고도 불리며 Server To Server 로 통신할 때 생길 수 있는 여러 문제점들을(재처리, 동시성 제한 등) 해결할 수 있다.
소프트웨어들이 소통하기 위한 정보를 Sender로부터 받고 원하는 시점에 Receiver에게 전달하는 데에 사용된다.

  • SQS
  • SNS
  • RabbitMQ

12. Workflow Scheduling

워크플로우 관리 툴은 여러 프로그램들이 일정한 룰에 따라 진행될 수 있도록 관리하고 동작을 모니터링하는 서비스이다.
데이터를 처리하는 일련의 작업들의 종속성을 관리하기 위해 대부분 사용되며 Airflow가 가장 대표적인 관리 툴이다.

  • Airflow
  • Google Composer

13. Monitoring Data Pipelines

데이터 파이프라인을 모니터링하기 위한 여러 서비스들도 존재한다.
서버, 데이터베이스, 클라우드 서비스 등에 대한 다양한 모니터링 서비스를 제공하는 툴들이다.
운영하는 서비스의 규모가 커져서 관리가 힘들어지면 이런 모니터링 툴을 사용해야 할 것 같다.

  • Prometheus
  • Datadog
  • Sentry

14. Networking

네트워크 지식은 컴퓨터의 통신 기술에 관한 내용이다.
서버가 통신하는 여러 가지 방식이나 컴퓨터 보안에 관한 내용들도 포함된다.
클라우드 서비스를 이용한다면 클라우드 서버의 통신망과 보안에 대한 내용들도 알아둘 필요가 있다.

  • Protocols (HTTP, HTTPS, TCP, SSH, IP, DNS)
  • Firewalls
  • VPN
  • VPC

15. Infrastructure as Code

코드로 관리하는 인프라이다.
대표적으로 컨테이너 개념을 사용하는 Docker, 컨테이너 오케스트레이션을 지원하는 Kubernetes가 있으며 가장 많은 사람들이 사용하는 클라우드 서비스인 AWS의 여러 인프라를 코드로 관리할 수 있도록 하는 CDK 기술도 있다.
IaC 가 가지는 큰 의미는 자동화가 아닐까 싶다. 결국 사람의 노력이 줄어들고 시스템이 대신 일을 하는 구조로 만드는 것이 엔지니어의 지향점 중 하나라고 생각한다.
어플리케이션이 동작하는 환경을 구성하는 것까지 하나의 시스템으로 만들어 엔지니어는 비즈니스 로직에만 집중할 수 있게 된다.

  • Docker
  • Kubernetes
  • CDK
  • Terraform

16. CI/CD

CI CD란 지속적 통합/지속적 제공을 의미한다.
CI는 소스 코드의 빌드, 테스트, 병합을 의미하고
CD는 레포지토리를 넘어, 고객이 사용하는 프로덕션 환경까지 릴리즈 되는 것을 의미한다.
그리고 CI/CD의 핵심은 이 과정들을 "자동화" 하는 것이다.
소스코드가 변경될 때마다 위 과정들을 서버에서 직접 해야한다면 많은 시간적 비용이 들어갈 것이기 때문에 한 번 CI/CD 파이프라인을 구축하여 이후의 비용을 절감하는 것이 좋다.
꼭 배워야 할 내용이다.

  • GitHub Actions
  • Jenkins
  • AWS CodePipeline(CodeBuild + CodeDeploy)

17. Identity and Access Management

IAM은 디지털 ID를 소유한 사용자와 엔터티에게 네트워크, 데이터베이스 등 리소스에 접근할 수 있는 권한을 제공하는 방식이다. IAM 시스템을 통해 사용자 별로 역할과 권한을 적절히 부여할 수 있다.
클라우드 서비스에서도 이러한 시스템을 통해 리소스나 유저에게 꼭 필요한 액세스 권한을 선택적으로 부여하여 보안의 영역까지 고려할 수 있다.

  • AWS IAM
  • Active Directory
  • Azure Active Directory

18. Data Security & Privacy

데이터 보안과 개인정보에 대한 영역이다.
서비스를 운영하는 기업에서 특히나 데이터를 전문적으로 다루는 직무로서 신경써야 하는 부분이다.
데이터를 수집하고 활용하고 폐기하는 수명 주기 동안 우리가 데이터를 어떻게 다뤄야 하는지 그 방식과 원칙을 정해야 하며 이러한 내용은 실제 법의 내용까지 고려하여 정해져야 한다.

  • Legal Compliance
  • Encryption
  • Key Management
  • Data Governance & Integrity

마무리

이번 포스팅에서는 데이터 엔지니어가 배워야 할 거의 모든 내용들을 순차적으로 다루어보며 로드맵을 정리했다. 가장 기초적인 부분부터 깊은 부분까지 정리했기 때문에 현재 내가 어느 위치에 있는지 구체적으로 점검할 수 있었고 앞으로 어떤 것들을 공부해나가야 할지 생각해 보는 좋은 시간이 되었다.
데이터 엔지니어가 되기를 꿈꾸거나 현업에서 자신의 위치를 점검해보고자 하는 엔지니어 분들까지 이 글을 통해 자신이 나아가야 할 방향성을 점검할 수 있으면 좋겠다!

profile
서울대학교 컴퓨터공학부 Backend(Data) Engineer

5개의 댓글

comment-user-thumbnail
2021년 10월 6일

잘 보고 갑니다. 감사합니다.

1개의 답글
comment-user-thumbnail
2021년 10월 31일

공부량이 엄청나겠네요~ 화이팅이십니다

1개의 답글
comment-user-thumbnail
2022년 5월 2일

안녕하세요. 데이터 엔지니어쪽으로 진로 방향을 잡고 공부중인데 프로그래밍 언어 같은 부분은 어떻게 공부를 해야지 좋을지 모르겠어요 ㅜㅜ 바로 실무쪽으로 들어가기엔 기초도 없어서 도전은 생각도 못하고 인강들으면서 하기엔 그당시에는 잘되는데 다음날되면 바로 까먹는거 같고 어떻게 공부하고 계신지 궁금하네용 ㅜ

답글 달기