요즘 많은 비전공자분들이 IT 업계로 전향하는 경우가 많이 생기고 있다.
이 분야에 대해 지식이 없으신 분들은 대게 국비지원을 듣고 개발자로 뛰어드는 경우가 많이 있는데 보통은 React, Java, Spring 등을 배우고 프론트엔드나 백엔드 개발자가 되는 경우가 가장 많다.
그런데 요즘은 빅데이터나 AI라는 단어를 붙여서 웹 개발자 코스에 빅데이터나 AI를 붙여서 하는 학원이나 국비지원이 보이기 시작한다. 그래서 많은 사람들이 빅데이터/AI가 유망하니까 그거에 혹해서 듣는 사람들이 많이 보인다.
그러고는 많은 내용들과 어려움에 포기하는 분들도 많이 있는데 그건 당연한 것이다.
웹 개발을 하기 위해 배우는 내용들만해도 충분히 많고 공부할 부분들도 많기 때문에 웹만 공부해도 힘들 것이고 빅데이터나 AI 같은 분야는 대학 원가서도 배울 정도로 전문성이 깊은 분야라서 비전공자에게는 어려운 학문이고 짧게 배운다고 그 분야의 전문가가 될 수 있는 것도 아니다.
하지만 그럼에도 빅데이터 분야의 전문가가 되고 싶은 분들을 위해 데이터 분야의 한 직종인 데이터 엔지니어에 대해 내가 이해하고 있는 것에 대해 써보려고 한다.
빅데이터(BigData)란?
먼저 빅데이터에 대해 간단하게 설명하자면 말그대로 Big + Data 엄청나게 많은 양의 데이터이다. 이 엄청나게 많은 양의 데이터로부터 가치를 추출하고 분석하는 기술을 통틀어서 빅데이터라고 부르는 것이다. 보통 Big Data의 사이즈는 단일 데이터 집합의 크기가 수십 TB에서 수 PB에 달한다. (PB = 1000 TB) 이러한 데이터들은 통상적으로 사용되는 데이터 수집, 관리 및 처리 소프트웨어의 수용 한계를 넘어서는 크기이며 이 크기는 끊임없이 변화하는 것이 특징이다. 그렇다면 이 빅데이터를 다루는 사람들은 누구일까?
데이터 전문가
데이터 과학자, 데이터 분석가, 데이터 엔지니어
빅데이터 분야로 가고 싶다면 한번쯤은 들어봤을 것이다. 저 3개의 직종은 무슨 차이가 있을까? 놀랍게도 3개의 직종은 다 다른 일을 한다. 다음 그림을 한번 보면 무엇이 다른지 이해할 수 있다.
간단히 말해서 데이터 과학자나 분석가는 방대한 양의 데이터를 AI의 학습을 시키는 것에 이용하거나 쌓인 데이터로부터 가치를 창출해내는 역할을 하고 데이터 엔지니어는 분석가들이나 과학자들이 바로 데이터를 활용할 수 있도록 정제된 데이터들을 준비해놓는 역할이라고 생각하면 된다. 그래서 이렇게 직종을 구분해 놓았지만 서로 간의 상호작용이 잘 이루어져야 한다. 그렇다면 데이터들을 준비해논다고 했는데 구체적으로 무슨 말 일까?
데이터 엔지니어(Data Engineer)
빅데이터는 정형 데이터와 비정형 데이터, 반정형 데이터로 이루어져 있다.
정형 데이터(Structured Data)는 관계형 데이터처럼 Schema에 따라 저장된 구조화된 데이터를 말한다. 일반적으로 table 형식으로 RDBMS에 저장되어 있다.
비정형 데이터(UnStructured Data)는 Schema나 데이터 모델없이 저장되는 데이터를 말한다. 일반적으로 텍스트나 사진, 동영상 등의 데이터를 말한다.
반정형 데이터(Semi-Structured Data)는 고정된 필드를 가지고 있지는 않고 관계형 데이터가 아닌 데이터들을 말한다. 데이터에 Schema나 Metadata와 같은 구조 정보를 포함하고 있어 일관성을 가지고 있는 데이터들이다. 계층적 또는 그래프 기반의 데이터들로 예로 XML, HTML 문서나 JSON, BSON 형태의 데이터들이 일반적이다.
보통은 정형 데이터로 되어 있는 경우는 많지 않고 비정형 데이터나 반정형 데이터인 경우가 제일 많다. 비정형이나 반정형 데이터들은 그대로 활용할 수 없는 형태라서 이러한 데이터들을 활용할 수 있게 처리하는 방법을 데이터 전처리라고 한다. 데이터 엔지니어들은 이러한 데이터들을 전 처리해서 분석가나 과학자가 가져다 쓸 수 있게 해 놓는 것이 역할이라고 생각하면 된다. 그럼 그냥 데이터들을 전처리하는 코드만 짜면 되는 것 인가? 전처리 코드를 짜는 것 정도는 과학자나 분석가들도 프로그래밍 실력만 있으면 충분히 할 수 있는 정도다.
그렇다면 데이터 엔지니어는 무엇을 하는가? 데이터 엔지니어는 이러한 전처리를 자동화시키기 위해 하나의 시스템을 설계하고 개발한다고 생각하면 된다. 위 그림을 보면 Programming, Distributed System, Data pipelines와 같은 용어들이 쓰여 있는데 전처리를 위한 프로그래밍 스킬 외에도 시스템을 설계하고 개발하기 위해서는 분산 시스템의 이해와 데이터 파이프라인을 설계할 수 있는 능력이 필요하다. 물론 Computer Science에 대한 지식은 기본으로 깔려 있는 전제이다.
데이터 엔지니어라는 직종은 새로 생긴 직종이다보니 아직 표준처럼 딱 정해진 것이 없어 회사마다 하는 역할이 조금씩 다르긴 하다. 예로 데이터를 기반으로 대시보드를 만들 수도 있고 데이터에 대한 시각화를 할 수도 있다. 기존에는 데이터 과학자가 end to end로 다 처리했지만 데이터 산업이 규모가 커지면서 혼자서 감당하기 힘들어져 분리된 직종이라 데이터 엔지니어라고 해서 ML이나 분석에 대해서 자세히 알지는 못하더라도 결국은 같이 협업해서 결과물을 만들어내기 때문에 어느 정도의 지식은 필요하다.
그리고 데이터 분야 특성상 도메인 지식이 중요한데, 이것은 자신이 어떤 회사를 갈 것인지에 따라 다르기 때문에 어떤 회사를 가더라도 그 회사의 도메인 지식에 대해서도 공부해야 할 것이다. 또한, IT 분야 특성상 변화가 빠르고 데이터 분야도 발전속도가 엄청나기 때문에 새로운 기술들에 대한 관심을 가지고 새로운 기술들을 배우는 것에 거부감이 없어야 한다.
이렇게 적어놓고보니 데이터 엔지니어라는 직업이 생각보다 까다로운 것 같다. 나도 데이터 엔지니어가 되고 싶은 꿈나무로써 배워나가야 할 것이 굉장히 많고 부족함도 많지만 이 길을 택한 이상 힘들어도 이 악물고 나아가보자.