어떤 문제를 해결하려고 엔지니어링이 필요한가?
이전 글에서는 데이터 엔지니어링을 아래와 같이 간단하게 정의했다.
데이터를 생성하는 시스템을 만드는 일을 Data Engineering (이라고 부른다.)
(이전 글: 데이터 사이언스 외에 해야 할 일들)
결국 데이터 엔지니어링의 역할은 다른 사용자 혹은 시스템이 필요로 하는 형태로 데이터를 만들어내는 것이다. 그렇다면 어떤 문제를 해결하려고 하기에 데이터 '엔지니어링'이라는 단어를 사용하는 걸까?
오늘날의 데이터 엔지니어링은 크게 논리적/물리적 관점에서 아래와 같은 문제를 해결해야 한다.
준비된 데이터의 형태가 사용하고자 하는 데이터의 형태와 다를 수 있다. 예를 들어 우리 시스템에는 사진이 저장되어 있는데, 다른 시스템은 텍스트 정보만을 다룰 수 있다면 어떨까?
이럴 때에는 데이터 엔지니어링을 통해 데이터의 형태를 변환하는 작업이 필요하다.
처리해야 하는 데이터의 양으로 인한 공간의 문제, 데이터를 처리하는 데 걸리는 시간으로 인한 속도의 문제를 해결해야 한다. 이는 아무리 거대한 시스템이라도, 결국 물리적인 한계를 극복할 수 없기 때문이다. 만약 당신에게 웹에서 사용할 수 있는 무한한 저장 공간이 주어져 있더라도, 실제로 어딘가에서 당신의 데이터를 저장하는 시스템을 구성하는 사람은 디스크 크기의 한계를 고려해야만 한다. 당신에게 1달 내내 무한하게 쓸 수 있는 인터넷 요금제가 있더라도, 당신이 단위 시간당 받거나 보낼 수 있는 데이터의 양에는 전송 기술과 매체에 따른 물리적인 한계가 존재한다.
기록이라는 것이 존재한 시점부터 우리는 정보를 기록하고, 처리하는 기술을 발전시켜 왔다.
그리고 컴퓨터가 생기면서는 그 정보를 처리하는 기술 중, 원하는 형태의 데이터를 만들어 내는 기술을 데이터 엔지니어링이라고 불렀다. 그렇다면 현대의 데이터 엔지니어링은 어떤 문제를 해결하고 있는가? 데이터의 형태를 변환하는 문제, 공간의 문제, 속도의 문제 이 3가지를 해결하고 있다.
기억력이 좋은 사람이라면, 빅 데이터라는 개념이 유행하기 시작할 때 사람들이 빅 데이터의 특징으로 제시한 3가지를 기억할 것이다. 바로 종류가 다양하다, 양이 많다, 속도가 빠르다. 이 3가지이다. 사실 이게 위에서 제시한, 데이터 엔지니어링이 해결하고자 하는 3가지 문제이다.
데이터 엔지니어링으로 다음 시스템으로 데이터를 보냈을 때, 다음 시스템에서도 다른 목적으로 데이터 엔지니어링을 수행해야 할 수도 있다. 이런 식으로 계속해서 데이터가 다음 시스템으로 넘어가면서 연결된 것을 데이터 파이프라인(Data Pipeline)이라고 부른다. 데이터 엔지니어링이란 사실 이 데이터 파이프라인을 구축하는 일이다.