데이터를 이용해서 인사이트를 추출하는 업무의 대부분은 데이터 엔지니어링.
Garbage In Garbage Out
복잡한 데이터 모델을 만드는 것 보단 좋은 데이터를 모으고 잘 관리하는 것이 훨씬 효율적으로 성과를 내는 방법.
데이터 엔지니어
백엔드(서버) 엔지니어 경험이 필수적인가?
경험이 필수적인 것은 아니나, 데이터 엔지니어 업무를 하면 자연스럽게 백엔드 엔지니어가 하는 업무 능력이 필요하다.
데이터 엔지니어로 일하면 큰 규모의 시스템 외에도 수시로 데이터를 조회, 관리, 전달해주는 시스템을 만들어야 하는데, 이 때 백엔드 엔지니어가 다루는 기술스택이 능숙하다면 빠르게 구축할 수 있다. 이론적인 측면에서는 분산시스템을 잘 알아야 하는데, 이건 서버엔지니어가 단일 서버, 단일 데이터베이스를 구축하고 운영하는 단점을 보완하기 위해 발전한 기술이다. 당연히 이론적, 실제 구현으로 모두 난이도도 더 높다. 이 경우 백엔드 엔지니어로서 서버나 DB를 구축해보고 거기서 발생하는 문제점을 겪어봤다면, 분산시스템을 배울때 피부에 와닿으며 배울 수 있다.
어떤 언어를 배워야 하는가?
실제 어떤 업무, 어떤 역할을 기대하느냐에 따라 다르지만, 대용량 분산시스템이 오랜시간 Java 기반으로 개발된 것들이 많다. 그래서 하나를 꼽으라면 Java 언어가 가장 기초적이라 할 수 있다.
Airflow는 Python으로 개발하고, Spark는 Java, Scala, Python 세 가지 언어로 개발할 수 있따. 만약 자신이 Airflow 운영을 맡았다면, 또는 Spark 어플리케이션만 개발한다면 python만으로도 충분하다.
기본적으로 Java로 서버 어플리케이션 하나는 코드를 작성하고, 프로그램으로 돌릴 수 있어야한다. 그리고 다른 사람이 짠 Java JVM은 모니터링해야 하기 때문에 JVM에 대해서도 잘 알아야 한다.
데이터 엔지니어는 Java 코드를 잘 작성하는 것보다는 JVM에 대해 잘 이해하고, 모니터링과 운영할 수 있는것이 더 유용하다.
수학, 통계를 잘 해야하는가?
데이터 엔지니어이지만 분석을 잘하는 사람들이 있다. 데이터 엔지니어가 데이터를 가장 잘 처리하고 가공하는 사람인데, 분석까지 잘한다면 더 빛이 날것이다.
분석 업무 외에도 데이터 엔지니어링 자체에서 수학이 필요한 경우도 있다. 대용량 OALP 시스템을 만든다면, 데이터 모델링의 결과 또는 데이터 처리 시스템의 성능 등을 수학적으로 증명할 수 있으면 좋을것이다. 하지만 이런 부분은 컴퓨터 사이언스 관점에서 수학이 필요한 부분이지, 데이터 엔지니어에게 수학이 필요하다고 할 수는 없다.
때문에 분석업무를 같이하는 경우 외에는 수학이나 통계를 활용할 일은 많지 않다. 컴퓨터 공학에서 배우는 자료구조, 알고리즘 관점에서 시스템의 성능을 표현할 수 있으면 충분하다.
대부분의 데이터 엔지니어랑 실부에서 수학보다는 프로그래밍 언어, 프레임워크, 시스템의 설계와 운영 능력이 더욱 중요하다. 데이터 엔지니어를 목표로 한다면 수학보다는 엔지니어링 기술에 초점을 맞추는 것을 추천.