What is a Data Engineer and What Do They Do in Data Science 칼럼요약

2019-06-09

Data_Engineering_TIL_(20190604)

study program : https://www.fastcampus.co.kr/extension_des

[학습목표]

  • What is a Data Engineer and What Do They Do in Data Science 칼럼 이해

  • 칼럼 URL : https://www.dataquest.io/blog/what-is-a-data-engineer

[칼럼요약]

자율주행차부터 페이스북 사진에 태그를 도와주는 것까지, 최근 데이터 분석 분야가 중요해지고 있다.

데이터 사이언티스트는 데이터에 접근을 위주로 업무를 수행하고, 데이터 엔지니어는 데이터들을 파이프라인으로 실어날라주는 업무를 주로 수행한다. 비유를 들자면 레이싱카 엔지니어와 드라이버라고 할 수 있다. 드라이버는 신나게 운전을 하고 관중들의 환호를 받는 반면에 엔지니어는 엔진을 튜닝하고 여러 설정으로 레이싱카를 만드는 즐거움을 누릴 수 있다.

  • 데이터 엔지니어의 역할

데이터 분야는 매우 넒다. 데이터 사이언티스트는 보통 좁은 영역에 집중해서 일하는 편이다. 다른 팀 혹은 다른 데이터과학자들이 다른 부분들을 커버하는 식으로 업무를 수행한다.

데이터 엔지니어링은 분야를 커버하는 기술적인 영역이 넓기 때문에 팀에서 데이터 엔지니어 한명이 모든 것 을 알 수 없다. 데이터를 분석하기 좋은 형태로 변환하는 역할을 수행한다.

우버를 예를 들면 사용자들은 앱을 쓰고, 택시를 부른다. 택시기사는 승객을 태우고, 내려주고, 요금을 받음. 승객은 앱을통해 기사를 평가할 수 있다.

고객용 앱 - 서버 - 드라이버 앱 아키텍처를 구성해서 서비스가 구현된다.

이런 시스템은 아래와 같이 다양하고 많은 데이터를 만들어낸다.

1) 앱 DB - 사용자와 택시기사 정보를 들고있음

2) 서버 분석 로그 - 접속 로그 (서버와 통신해서 무슨 일인가 할때), 에러 로그

3) 앱 분석 로그 - 이벤트 로그 (버튼 클릭, 화면 전환 등), 에러 로그

4) 탑승 기록

5) CS DB - 이메일이나 녹취 등

데이터를 분석하는 팀은 사용자의 기록을 분석해서 어떤 액션이 사용자가 더 지출을 하게 만드는지 보려고 할 것이다.

서버 접속 로그와 앱 이벤트 로그를 조합하여야 분석을 수행할 수 있다.

예를 들자면

1) 앱 분석 로그를 주기적으로 수집

2) 앱 분석 로그와 서버 분석 로그를 같은 유저정보 통합

3) 어떤 사용자의 이벤트 히스토리를 알려주는 API 구현

이를 위해 로그들을 실시간으로 처리하는 파이프라인을 만들고, 파싱하고 (읽어들임), 특정 사용자에게 붙여야한다.

파싱한 로그를 DB에 넣어서 API 에서 쉽게 접속할 수 있게 만들어야 한다.

들어오는 로그들을 처리하도록 여러대의 서버를 만들어야 한다.

가장 문제가 많이 생기는 부분은 많은 양의 데이터 처리를 안정적으로 분산시키는것이다.

시간대별로 (자정에 택시 많이잡으므로) 로드가 다르기에 자동으로 스케일되는 시스템 등이 필요하다.

로드밸런서에 서버들을 등록해두고, 로드밸런서가 트래픽을 분산해주도록 해야한다.

데이터를 안정적으로 처리하는 과정은 ingestion (수집) - processing (처리) - storage (저장) - access (엑세스) 와 같은 단계로 나눌 수 있다.

예를 들어서 ‘나쁜 탑승기록 찾는 프로젝트’를 한다고 하자.

데이터 사이언티스트는 앱 혹은 기사 이슈로 불만족스러운 경험을 찾고 싶다면 CS DB를 보고 어떤 탑승기록이 그것인지 확인하고, 분석해볼 수 있을 것이다.

CS로그와 특정 탑승에 대한 기록을 매치해야함. 데이터 엔지니어는 데이터 사이언티스트가 원하는 데이터에 대해 쿼리할 수 있도록 API 를 만들고 싶을 것이다. 예를 들면 다음과 같다.

1) 탑승 기록 데이터를 가져와서 특정 탑승기록을 뽑아내는 시스템을 만듬

2) 계산한 탑승 기록 통계값들을 사용자 정보와 조합 (사용자 id 를 활용)

3) 앱과 서버 로그로부터 해당 탑승 시 로그를 추출

4) CS를 뽑아내고, CS는 바로 전 탑승기록일 것이라는 가정 등을 해서 매치시킴

5) API가 빠르게 수행될 수 있도록 필요한 값들을 저장함

6) API 구현

새로운 탑승기록이 있을때마다 위의 과정을 수행할 수 있도록 구현하면, 데이터 사이언티스트가 원하는 데이터를 조회할때 항상 최신정보를 제공할 수 있도록 할 수 있다.

  • 데이터 엔지니어링 기술

1) 분산 시스템 아키텍쳐링

2) 안정적인 파이프라인 생성

3) 데이터 소스 통합

4) 데이터 저장소 설계

5) 데이터 과학자 팀과 협업

Hadoop, Spark 같은 툴과 Spark, Python같은 언어들이 중요하지만 실제 작동하는 시스템을 이해하고 만들줄 아는것이 더 중요하다고 할 수 있다.

  • 데이터 엔지니어링 역할

데이터 엔지니어도 여러 타입이 있음

1) 제네럴리스트

인원규모가 작은 팀에서 일하는 경우가 많다. 데이터 엔지니어 없이 데이터 분석가나 데이터 사이언티스트가 아무것도 못하므로, 데이터 엔지니어가 우선 필요하게 되는데 데이터 엔지니어 혼자 일하는 경우, 보통은 end-to-end로 일을 해야한다. 다시말해서 데이터 엔지니어가 데이터 수집부터 처리, 분석까지 다 하게 된다는 것이다. 따라서 데이터 분석 스킬도 필요하다.

2) 파이프라인 중심

중견기업의 데이터 팀에서 주로 볼 수 있는 형태다. 복잡한 데이터 사이언스 니즈가 있을때. 데이터 과학자 팀과 일하고, 데이터를 분석이 용이한 형식으로 바꿔주는 역할을 수행한다.

3) 데이터베이스 중심

데이터베이스 테이블 스키마 등을 작업하며 ETL작업을 많이 하는 타입이다.

데이터 사이언티스트가 많고, 많은 DB를 사용하는 더 큰 회사에서 많이 보인다.