brunch

You can make anything
by writing

- C.S.Lewis -

by 마르코 Jul 28. 2018

데이터 엔지니어가 하는 일

데이터 엔지니어로 3개월 일하면서 느낀 점

* 오랜 경력의 데이터 엔지니어가 쓴 글이 아님을 밝힌다. 최근 회사에서 면접관으로 면접을 보고 있는데, 회사마다 데이터 관련 포지션은 하는 일이 다르기 때문에 참고만 하는 것이 좋겠다. 오랫동안 데이터 관련 포지션으로 일하기를 희망했는데, 관련된 정보를 찾기 힘들어서 비슷한 길을 걷기를 희망하는 개발자 분들을 위해서 정보 공유 차원에서 남긴다.

* 주제의 특성상 개발에 대한 이해가 있는 독자를 대상으로 글이 쓰였음을 미리 밝힌다.



데이터 엔지니어로 일한 지 3개월이 되었다. 이전에는 백엔드 건, 프런트엔드 건, 모바일 앱 개발이건 모두 서비스 자체를 만드는 일을 주로 해왔다. 이번에는 그 서비스 뒤에서 생성되는 방대한 데이터를 어떻게 가공하고 활용할지 생각하는 작업을 하고 있다. 함께 일하는 사람들이 관심을 갖는 분야가 전혀 다르다 보니 제법 낯선 느낌인데, 그래도 많은 것을 배울 수 있는 기회라 굉장히 즐겁다.


데이터 중심의 회사임에도 불구하고 그 데이터를 실제 클라이언트에게 가공해서 보여주는 일까지 하는 회사 비즈니스 모델의 특성상, 데이터 생성 시점부터 시작해서, 데이터 가공, 데이터 시각화까지 다양한 부분을 다뤄볼 수 있다는 것이 매우 매력적인 회사다. 회사에 대해서 간단히 소개하자면 실리콘밸리에 본사가 있는 미국계 회사인데, B2B로 무선 네트워크를 제공하고 있다. 예를 들면, 지하철이나 건물 하나 통째로 무선 인터넷을 공급하는 역할을 하고 있다. 이 과정에서 하드웨어와 소프트웨어를 둘 다 제공하는데, 싱가포르의 데이터 엔지니어링 팀은 하드웨어에서 발생하는 데이터를 가공해서 클라이언트에게 전달하는 일을 하고 있다. 경쟁자로는 CISCO가 대표적이고, 굳이 따지자면 하는 포지션은 IoT 기반의 데이터 엔지니어라고 봐도 무방할 것 같다.   



데이터 엔지니어로 일하기 전


이 분야에서 일을 하기 전에는 데이터 분석이라는 업무에 대한 막연한 동경을 가지고 있었음을 고백한다. 원래부터 비즈니스에 관심이 많아서, 한국에서 스타트업을 다닐 때도 혼자서 그로스 해커(Growth Hacker)라는 직함을 달고 누가 시키지 않아도 데이터를 혼자서 가공하고 인사이트를 찾아내는 것을 즐기기도 했다. 그래서 데이터 엔지니어도 비슷한 일을 하지 않을까 생각했다. 그래서 데이터 관련 업무를 하기 위해서, 파이썬으로 만들어진 데이터 분석 라이브러리인 Numpy나 Pandas를 공부하기도 했고, Jupyter Notebook을 통해서 데이터 시각화해보기도 하고, Tensorflow 같은 기술들을 바탕으로 머신러닝과 딥러닝에 대해서 이해하기 위해서 노력하기도 했다. 데이터가 이쁘게 있으면 그걸 분석할 생각만 했지, 그 데이터가 어디에서 나오는지에 대해서는 깊이 있게 생각해보지 않았다고 보는 것이 맞겠다.


그런데 지금은 그 분석을 하기 위해 나오는 데이터들이 쉽게 얻어지지 않는다는 사실을 깨달았다. 데이터는 데이터베이스에 곱게 저장되어있는 경우도 많지만, 많은 경우에는 파일의 형태로 로그(log) 파일에 저장되어 있는 경우도 많다. 물론 데이터베이스에 있는 데이터라고 다 바로 활용할 수 있는 건 아니고, 많은 경우에 데이터를 깔끔하게 만드는 작업을 해야 한다. 혹은 데이터의 속도가 중요한 경우라면 스트리밍을 통해서 실시간으로 데이터를 처리하는 경우도 많다. 스트리밍은 동영상에만 하는 것인 줄 알았는데, 데이터도 스트리밍으로 가공을 해야 하는 것일 줄이야.


그리고 이렇게 뽑아낸 자료에서 최종 결과물을 뽑아내기 위해서 데이터를 가공하는 작업을 하는데, 보통 이 작업을 Extract, Transform, Load를 줄여서 ETL이라고 부른다. 이렇게 가공된 데이터를 머신러닝이나 딥러닝 모델에 집어넣거나, CEP(complex event processing)이라고 불리는 다양한 이벤트 간의 연관성에서 인사이트를 찾는 방식으로 데이터를 처리하기도 한다. 문제는 이 일련의 과정이 굉장히 방대한 데이터를 처리해야 하고, 또한 거의 실시간에 가깝게 처리되기 때문에 서비스의 안정성이 매우 종요하다는 점이다. 특히 데이터에서 뽑아낸 인사이트는 시간이 지나면 효용이 떨어지는 경우도 많기 때문에 최대한 빠르게 결과물을 얻기 위해서 정말 많은 고민을 하게 된다.


지금 있는 회사에는 데이터 엔지니어들과 함께 데이터 사이언티스트들이 별도로 존재하는데, 데이터 사이언티스트는 주로 데이터 모델링에 더 초점을 맞춰서 일을 한다. 그런데 이렇게 만들어진 모델이나 알고리즘이 실제로 돌아가는 인프라에서는 제대로 작동하지 않은 경우가 많기 때문에 그 작동 원리를 이해하고 최대한 효과적으로 데이터를 처리할 수 있도록 변경 및 개선 작업을 하는 것이 데이터 엔지니어들이 주로 하는 일이다.



나는 어떻게 데이터 엔지니어가 되었나?


나는 앞서 이야기했던 것처럼 데이터 분석 관련 업무에 관심이 많았다. 비즈니스에 관심이 많기 때문에 자연스럽게 데이터에 관심이 많았고, 그래서 이런저런 데이터 분석 관련 기술에 대해서 공부했던 것 같다. 하지만 결정적으로는 내가 사용하는 기술들이 도움이 되었다. 나는 지난 회사에서 스칼라(Scala)라는 프로그래밍 언어를 사용하게 되었고, 그리고 기존에 파이썬 개발을 많이 했었는데, 이 두 가지 언어가 데이터 분야에서 가장 많이 활용되는 기술이었다. 그리고 빅데이터 분야에서 많이 활용되는 카프카(Kafka)카산드라(Cassandra)를 활용해본 것도 큰 도움이 되었다.


물론 이런 것들을 알고 있었다고 해도 이 회사에 들어와서 배워야 하는 것들은 정말 끝도 없이 많았다. 기본적으로 하둡(Hadoop)과 스파크(Spark) 기반으로 일을 하고 있고, IoT 기반이다 보니 방대한 데이터를 처리하기 위해서 MQTT에 대해서 이해하는 것도 필요했다. 그리고 기존에는 다양한 MySQL 같은 관계형 데이터와 MongoDB, Cassandra 등 NoSQL 데이터베이스 등만 제한적으로 활용했다면, 빅데이터의 세상에 오니 Druid, HBase 같은 정말 듣지도 보지도 못한 온갖 종류의 데이터베이스의 세상이 펼쳐졌다. 그리고 이것을 단순히 사용하는 것에서 그치는 것이 아니라 성능을 개선하기 위해서 끊임없이 튜닝하고 모니터링하는 작업도 필수적이었다. 그리고 클라우드 기반에서 일을 하다 보니 개발 환경을 잡는 작업에 대해서 얼마만큼의 비용이 발생할지 산정하는 것도 중요한 일이었고, 빅데이터 분야 관련해서 정말 많은 3rd Party 라이브러리들이 많다 보니 그걸 어떻게 학습하고 다른 사람들과 공유할까 고민하는 것도 중요 업무 중에 하나였다.

 

아래 그래프처럼 나의 경력의 대부분은 백엔드와 프런트 개발 쪽에 맞춰져 있는데, 이번 회사에 입사하면서 데이터 엔지니어링 분야에도 전문성을 쌓기 시작했다. 앞으로는 조금 더 데이터와 그 바탕이 되는 시스템 운영까지 관심사를 넓혀보려고 생각하고 있다.  

 

 

일해보니,


특정 산업에 대한 지식을 도메인 지식이라고 부른다. ETL을 포함한 데이터 엔지니어링 프로세스 자체는 도메인 지식과는 독립적인 경우가 많지만, 데이터 엔지니어링을 제대로 하기 위해서는 도메인 지식이 상당히 요구된다. 그래서 그런지 회사에 7~20년 차 경력의 개발자들이 즐비하고, 이 회사에만 5년을 넘게 다닌 사람도 제법 된다. 거의 실시간으로 방대한 데이터가 처리되는 거대한 파이프라인 속에서 일하기 때문에, 개발자들이 시스템의 안정성과 확장성에 대한 어마어마한 집착이 있는 경우가 많다. 일단 만들고, 서비스가 몇 번 죽고 나면 그 이후에 서비스 안정성을 고민하는 스타트업과는 전혀 다른 분위기에 처음에는 어리둥절 했는데, 그 고민하는 과정을 옆에서 지켜보며 많은 것을 배우고 있다.


이런 환경이다 보니 개발자들 절반 이상이 Docker나 Kubernetes를 다루고, shell script를 직접 만들고, AWS에 인스턴스를 띄워서 개발 환경을 구축할 수 있는 DevOps에 준하는 시스템 관리 지식과 경험을 갖고 있는 경우가 많은 거 같다. 이런 지식이 없는 상태에서 회사에 들어왔다고 하더라도, 거의 일상적으로 이뤄지는 일이 이런 분야다 보니 빠르게 습득할 것을 요구받기도 한다.


데이터 엔지니어로 일을 시작하고 나서, 데이터 관련 일을 하고 싶어서 조언을 구한다는 이메일을 종종 받는다. 그런데 왜 데이터 사이언티스트나 데이터 엔지니어가 되고 싶냐고 물어보면 "개발은 어려워 보이는데, 데이터 관련 업무는 비교적 쉽게 할 수 있을 거 같아서"라는 답변을 듣는 경우가 많다. 그런데 함께 일하는 데이터 사이언티스트들도 직접 인프라 관련 코드를 짜지는 않더라도, 데이터베이스나 시스템 관련 지식에 대해서는 해박한 경우가 많고, 파이썬이나 자바, 스칼라 등 최소한 한 언어로 원하는 알고리즘을 구현할 수 있을 만큼 프로그래밍에 익숙하다. 그래서 최근에는 그런 질문을 받으면 데이터 관련 석사를 하거나 백엔드 분야로 경력을 먼저 쌓으시라고 조언해드리고 있다. 데이터 분석을 위해서 필요한 것은 그 데이터가 어떻게 만들어지고, 어떻게 시스템 상에서 구현되어야 하는지 전체를 이해하는 일이 아닌가 싶다.



관련 업계에서 일하시는 분들께서 댓글 통해서 경험을 나눠주시면 이 글을 읽는 더 많은 독자 분들께 도움이 됩니다.

매거진의 이전글 데이터 분석가에게 필요한 것

매거진 선택

키워드 선택 0 / 3 0
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari