본문 바로가기메뉴 바로가기


안녕하세요, 데이터정보플랫폼팀 kenny입니다.

카카오는 매년 신입 개발자 공채와 인턴 프로그램을 진행합니다. 카카오 그리고 데이터 엔지니어링에 관심 있는 주니어 개발자 또는 예비 개발자분들에게 조금이나마 도움이 되고자 ‘데이터 엔지니어링’에 대해 소개하고자 합니다.


데이터 엔지니어링이란 무엇일까요?

간단한 질문 같지만 답은 쉽지 않은데요, 그 이유는 새로 생겨나고 진화하는 직무이다 보니 회사마다 정의하는 업무도 다르고 개인별로 상상하는 바도 다르기 때문입니다.

우선 wikipedia에서 Data engineering을 검색해 보면 Information engineering과 Data science가 나옵니다. (wikipedia에도 없다니…) 물론 두 단어 모두 연관은 있지만 좀 더 찾아보죠.

James Furbush의 글 Data engineering: A quick and simple definition을 보면 다음과 같이 나옵니다.

As the data space has matured, data engineering has emerged as a separate and related role that works in concert with data scientists.

https://www.oreilly.com/content/data-engineering-a-quick-and-simple-definition/

데이터 분야가 발전함에 따라 분화가 되었고, 데이터 사이언티스트와 협업하는 업무라니 약간 애매하긴 하지만 배경을 좀 더 알아봅시다.

빅 데이터

빅 데이터라는 말을 몇 년 전부터 많이 들으셨을 것입니다. 그 빅 데이터가 뜬 이야기부터 해볼게요.

예전에는 중요하다고 생각한 데이터(사용자 수, 매출 등) 위주로 분석하고, 그 이외의 데이터는 저장하지 않거나 사용하지 않았습니다. 이런 버려지던 데이터는 양이 많아 저장하면 비용이 많이 들었고, 저장을 하더라도 분석할 환경이 갖추어지지 않았고, 분석을 하더라도 가치를 인정받지 못했었죠.

그러던 언제부터인가 테크 기업들은 버려지던 데이터들을 가지고 서비스 개선에 활용하고 광고와 마케팅으로 돈을 만들어냈습니다. 이런 사례들이 널리 알려지게 되어, 데이터에 대한 관심도 급격히 증가했습니다. 이런 데이터는 양이 많아 빅 데이터라고 불렀고, 빅 데이터를 분석하려면 기존 분석과 완전히 다른 접근을 해야 해서 많은 관련 기술과 단어가 생겨났습니다.

그런데 잠깐만요, 빅 데이터는 어느 정도 크기를 이야기할까요?

이것도 명확한 정의는 없지만 기존 RDB에서 처리할 수 없을 정도의 크기를 빅데이터라고 보시면 됩니다. 대략 수십 테라 이상을 빅 데이터라고 하며 기존 RDB가 아닌 다른 기술을 사용하죠. (물론 수십 테라를 RDB에서 분석하기도 합니다) 

이렇게 기존 분석과 빅 데이터 분석의 경계가 모호하고 역사가 오래되지 않다 보니, 빅 데이터는 각 회사나 조직별로 각 상황에 맞게 정의하고 적용을 하고 있습니다.

딱 떨어지게 정의할 수는 없지만

앞선 이유들로 데이터 엔지니어링을 딱 떨어지게 정의할 수는 없지만 대략 정리하면 이렇습니다. 빅 데이터 분석은 기존 분석 방법과 달라서 데이터 엔지니어링과 데이터 사이언스로 전문화되었습니다.

이 두 업무는 협업을 하는 관계입니다. 사실 직무 정의보다 우리에게 중요한 것은 말이죠, 모든 회사는 성장을 꿈꾸니 현재는 스몰 데이터라도 미래에는 빅 데이터, 베리 베리 빅 데이터를 꿈 꿀 것이고 그럴수록 더더욱 데이터의 가치는 더욱 중요해질 것이고 그러니 앞으로도 데이터 엔지니어와 데이터 사이언티스트가 많이 필요하다는 사실이겠죠!

데이터 엔지니어와 데이터 사이언티스트

데이터 엔지니어링 업무를 하는 사람을 데이터 엔지니어라고 하죠.
데이터 엔지니어는 종종 데이터 사이언티스트와 혼동이 되기도 하는데 업무가 중첩되어 있기 때문입니다.

출처 : https://www.oreilly.com/radar/data-engineers-vs-data-scientists/

데이터 엔지니어는 데이터 분석가와 데이터 사이언티스트와 협업을 하며 위 그림의 오른쪽 영역에 해당합니다.

고급 프로그래밍, 분산 프로그래밍, 데이터 파이프라인 업무는 그래도 덜 겹치지만 분석, 프로그래밍, 빅 데이터는 상당히 겹치는데 어떤 배분이 적절한지는 해당 회사의 성격과 해당 조직의 상황에 따라 달라질 것입니다. (물론 이를 나누지 않는 조직도 있죠)

위 그림에서 또 알 수 있는 것이 있는데 본인이 데이터에 관심이 많은 프로그래머라면 데이터 엔지니어에 더 적합하고 본인이 데이터에 관심이 많은 분석가라면 데이터 사이언티스트에 더 적합하다고 할 수 있겠네요.

카카오의 데이터 엔지니어링

이제부터는 일반적인 이야기보다는 카카오의 데이터 엔지니어링에 대해 이야기하겠습니다. 앞서 이야기했듯이 회사마다 정의하는 업무가 다르기 때문입니다.

카카오의 수많은 서비스들의 데이터는 데이터 파이프라인으로 모이고 이 수많은 데이터는 쓰기 편하고 안전한 형태로 가공이 되어 저장이 됩니다.

이 빅 데이터를 활용해서 서비스에서 의사 결정을 할 수 있는 분석 시스템을 만들고, 데이터 사이언티스트는 고도화된 분석을 하며 AI/ML 업무를 수행합니다.

카카오 데이터 엔지니어가 하는 업무와 필요한 능력

카카오 데이터 엔지니어가 하는 업무와 필요한 능력을 이야기해보겠습니다.

수집, 가공, 저장

수많은 서비스에서 생산된 수많은 데이터를 모을 수 있도록 거대한 데이터 파이프라인을 설계, 구축합니다. 모두가 쉽고 안전하게 다룰 수 있도록 가공 처리를 하며, 데이터의 성격에 따라 스트리밍 혹은 배치 처리를 합니다. 이것을 제대로 하려면 적합한 기술들의 선택과 조화로운 설계가 필요합니다. 그래서 쉬운 일이 아니고 더 많은 데이터 엔지니어가 필요한 근본적인 이유가 되지요.

스트리밍 데이터를 모으기 위해 logstash, fluentd 같은 수집기와 kafka, rabbitMQ 같은 MQ를 사용하고 스트리밍 데이터 가공을 위해 storm, flink, spark streaming 등을 사용합니다. 배치 처리는 hadoop MR, hive, spark 등을 사용하며 용도에 따라 다른 기술을 사용하기도 합니다. 이런 처리를 하는 환경에서는 프로그래밍이 필요하며 python, scala, java 같은 언어들이 주로 쓰이고 있습니다. 

분석

저장된 데이터에서 hive 등의 쿼리로 일회성 분석을 하기도 합니다. 그래서 데이터 엔지니어는 쿼리에 대한 이해가 필요합니다. visualization tool 을 통해 self service BI (직원 누구나 접속하여 분석할 수 있는 환경) 환경을 개발하기도 합니다. 데이터에 대한 이해와 시각화 툴에 대한 이해가 동시에 필요하겠죠.

위 두 분석 업무 중 중요한 데이터에 대해서는 서비스 조직에서 수시로 확인할 수 있도록 analytics system을 개발하기도 합니다.. 프로그래밍 능력도 필요하겠네요!

협업

심화된 분석, ML, AI 등을 하는 데이터 사이언티스트들과 협업이 필요합니다. 어떤 데이터들을 쓰고 있고, 어떤 데이터들이 필요한지 알아야 일이 원활하게 진행이 되니까요. 일이 원활하게 진행이 된다면 서비스는 점점 더 사용자가 원하는 콘텐츠를 추천하게 될 것입니다.

이것이 데이터의 힘이죠. 더 나아가 데이터 사이언티스트의 업무도 잘 이해한다면 더 능력 있는 데이터 엔지니어가 되겠지요.

서비스 조직과 협업도 필요합니다. 예를 들어 서비스에서 개편을 위해 ab test를 한다면 여러 가설을 세우고 실험을 하고 분석을 같이 해야 합니다. (이는 노하우가 생긴다면 프로세스화할 수 있겠죠.)

이후 서비스 개편 후에 대한 성과 분석 지표를 analytics system에 나오도록 한다면 이미 수집하고 있는 데이터로 충분한지 확인해보고, 부족하다면 니즈에 맞으며 확장성 있게 데이터를 추가 수집해야 합니다.

그 후 원하는 성과 분석을 할 수 있도록 데이터를 설계하고 개발을 진행합니다. 이런 협업들을 잘 하려면 빅 데이터 경험이 필요하다보니 경험있는 데이터 엔지니어가 더 많이 필요해지는 것이고요. 

데이터 엔지니어가 되려면

앞서 이야기한 기술들을 능숙하게 다루고 분석을 잘 한단 얘기는 이미 빅 데이터 환경에서 일하는 데이터 엔지니어일 것입니다. 왜냐하면 빅 데이터 환경이 아니라면 과한 기술들이거든요. (작은 데이터는 엑셀로 충분합니다.)

당연히 개인은 빅 데이터 환경이 아닐 것이라 데이터 엔지니어링 기술 공부 이후에는 막막합니다. 😔 그렇다면 베리 빅 데이터가 있는 카카오의 데이터 엔지니어가 되어보는 것도 좋은 선택이 되겠지요. 👍 (네… 기승전영입… ) 프로그래밍을 잘하고 데이터에 관심이 많은 개발자라면 카카오 데이터 엔지니어에 많은 관심 부탁드립니다. 🙏


카카오 분석 플랫폼 경력 개발자 모집(판교 근무) 바로가기 >>

빅데이터 활용 분석 플랫폼 개발자 모집(제주 근무) 바로가기 >>

kenny.lim
kenny.lim 데이터 엔지니어링을 하는 풀스택 프로그래머
Top Tag
2021
2021-new-krew
adaptive-hash-index
adt
agile
agilecoach
ai
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
android
angular
anycast
App2App
applicative
Architecture
arena
ast
async
aurora
babel
babel7
Backend
BApp
bgp
big-data
ble
blind-recruitment
block
Block Chain
blockchain
bluetooth
brian
business
Cache
cahtbot
Caver
cd
ceph
certificate
certification
cgroup
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codereview
coding
competition
component
conference
consul
container
contents
contest
core-js@3
couchbase
COVID-19
cpp
Data
data-engineering
DB
deep-learning
dependency-graph
dev
dev-session
dev-track
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
employeecard
eslint
Feature List
Featured
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
globalpollution
go
graphdb
graphql
Ground X
growth
ha
hadoop
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
if kakao
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
jsconf
jsconfkorea
json
k8s
kafka
kakao
kakao-commerce
kakao-games
kakaoarena
kakaocommerce
kakaocon
kakaoenterprise
kakaok
kakaokey
kakaokrew
kakaomap
kakaotalk
KAS
KCDC
khaiii
Klaytn
Klip
kubernetes
l3dsr
l4
links
load-balancing
machine-learning
marathon
meetup
melon
mesos
Messaging
microservice
mobil
monad
monorepo
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
nomad
ocp
open
opensource
openstack
OpenWork
page
parallel
PBA
planning poker
Platform
polyfill
programming-contest
project-structure
pycon
python
quagga
react
reactive-programming
reactor
recap
recommendation
recruitment
redis
redis-keys
redis-scan
related-blind
rest
rubics
ruby
rxjs
s2graph
scala
scalaz
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
support
System
talk
talkchannel
tcp
tech
test
Thread-Debugging
time-wait
tmux
typescript
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
web-cache
webapp
WebSocket
weekly
work
workplatform
All Tag
2021
2021-new-krew
adaptive-hash-index
adt
agile
agilecoach
ai
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
android
angular
anycast
App2App
applicative
Architecture
arena
ast
async
aurora
babel
babel7
Backend
BApp
bgp
big-data
ble
blind-recruitment
block
Block Chain
blockchain
bluetooth
brian
business
Cache
cahtbot
Caver
cd
ceph
certificate
certification
cgroup
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codereview
coding
competition
component
conference
consul
container
contents
contest
core-js@3
couchbase
COVID-19
cpp
Data
data-engineering
DB
deep-learning
dependency-graph
dev
dev-session
dev-track
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
employeecard
eslint
Feature List
Featured
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
globalpollution
go
graphdb
graphql
Ground X
growth
ha
hadoop
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
if kakao
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
jsconf
jsconfkorea
json
k8s
kafka
kakao
kakao-commerce
kakao-games
kakaoarena
kakaocommerce
kakaocon
kakaoenterprise
kakaok
kakaokey
kakaokrew
kakaomap
kakaotalk
KAS
KCDC
khaiii
Klaytn
Klip
kubernetes
l3dsr
l4
links
load-balancing
machine-learning
marathon
meetup
melon
mesos
Messaging
microservice
mobil
monad
monorepo
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
nomad
ocp
open
opensource
openstack
OpenWork
page
parallel
PBA
planning poker
Platform
polyfill
programming-contest
project-structure
pycon
python
quagga
react
reactive-programming
reactor
recap
recommendation
recruitment
redis
redis-keys
redis-scan
related-blind
rest
rubics
ruby
rxjs
s2graph
scala
scalaz
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
support
System
talk
talkchannel
tcp
tech
test
Thread-Debugging
time-wait
tmux
typescript
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
web-cache
webapp
WebSocket
weekly
work
workplatform

위로