해당 내용은 Datacamp의 Data engineering track을 정리했습니다.
Data engineering for everyone의 chapter 3에 대한 내용입니다.
해당 포스팅에는 아래의 내용을 포함하고 있습니다.
- Processing data
- Scheduling data
- Parallel computing
- Cloud computing
1. Processing data
데이터 프로세싱은 가공되지 않은 데이터를 가공하여 의미있는 정보로 바꾸는 과정을 말합니다. 데이터 프로세싱 과정은 필요없는 데이터를 삭제하기도 하고, 메모리, 네트워크 비용 등의 최적화를 위해 진행하기도 합니다. 또한 다른 형태로 바꾸기 위한 변환 과정도 포함합니다. 데이터 레이크에 존재하는 데이터들을 가공하여 데이터 웨어하우스로 재구성하기도 합니다. 스키마에 적합한 형태로 만들기 위해 변환하는 과정 등을 통해 생산성을 높입니다.
데이터 엔지니어는 데이터 프로세싱할 때, 데이터를 조작하고, 정리하는 업무를 진행하게 됩니다. 기본적으로 이러한 과정들은 자동화되어야 합니다. 데이터가 적절하게 구조화된 데이터베이스에 저장하여 분석가가 쉽게 접근할 수 있도록 데이터베이스 테이블 위에 view를 만듭니다. view는 데이터에 대한 저장된 쿼리의 출력을 말합니다.
2. Scheduling data
스케줄링은 데이터 프로세싱에서 언급했던 모든 작업을 포함할 수 있습니다. 스케쥴링은 데이터 엔지니어링 시스템에서 작은 조각 하나 하나를 모아서 함께 동작하도록 합니다. 또한 특정 순서로 작업을 실행하고 모든 종속성을 해결합니다.
스케줄링은 수동과 자동방법으로 나눌 수 있습니다. 수동은 테이블의 데이터가 새롭게 업데이트가 필요할 때 주로 활용합니다. 자동방법은 특정 시간에 동작하도록 하거나 센서에 의해 특정 조건에 동작하도록 합니다. 하지만 센서에 의해 동작하는 방법은 비용이 많이 투자되기 때문에 그만큼 가치가 있어야 합니다.
데이터 수집되는 방식에는 배치와 스트림이 있습니다. 배치는 일정 수를 하나의 그룹으로 묶어서 전송하는 방식입니다. 일괄 처리는 해당 리소스가 사용되지 않을 때 예약할 수 있어서 비교적 저렴할 수 있습니다. 하지만, 업데이트 되야 하는 내용이 시급한 경우에는 스트림을 활용할 수 있습니다. 예를 들어, 어떤 사람이 Spotflix라는 음악 스트리밍 회사를 사용하려고 하는 데, 고객의 정보가 실시간으로 전송되지 않으면 업로드 될 때까지 기다려야 합니다. 그렇기 때문에 곧바로 전송이 필요할 때에는 스트림 방법을 활용합니다.
스케줄링을 활용할 수 있는 도구에는 Apache Airflow와 Luigi가 있습니다.
3. Parallel computing
병렬 처리는 최신 데이터 처리 도구의 기초를 형성하고 있습니다. 병렬 처리가 필요하게 된 것은 메모리 문제나 처리 능력에 중요하기 때문입니다. 병렬 처리는 기본적으로 task를 작은 단위의 task로 나누고, 나눠진 task를 여러 개의 컴퓨터로 배분하는 과정으로 이뤄집니다.
보통 병렬 처리는 추가적으로 처리 능력을 얻을 수 있으며, 한 컴퓨터에 모든 메모리를 올리지 않는다는 장점이 있습니다. 하지만, 데이터를 전송하는 데 필요한 비용이 추가됩니다. 또한 나눴던 결과를 합치는 과정에서도 추가적인 비용이 듭니다. 결론적으로 다수의 컴퓨팅 자원이 있다면 병렬 처리로 했을 때의 장점과 단점을 비교하여 활용해야 합니다.
4. Cloud computing
클라우드 컴퓨팅은 AWS, Azure, Google Cloud 등과 같이 직접 서버를 대여해주는 시스템을 말합니다. 보통 회사가 서버를 구축하게 되면, 클라우드를 활용하거나 직접 서버를 구매해서 활용하기도 합니다. 직접 서버를 구매해서 활용한다면, 서버 구매비용과 서버를 유지하기 위해 소모되는 비용이 추가로 요구가 됩니다. 트래픽이 몰릴 때에도 충분하게 처리 가능해야 합니다. 또한 트래픽이 몰리지 않을 때에는 처리 능력을 활용하지 못합니다.
반면 클라우드 서비스의 경우에는 대여를 해주기 때문에 서버를 직접 구매해서 특정 장소에 놔야하는 것이 아니며, 필요할 때 활용할 수 있고, 글로벌 고객을 대상으로 서비스를 제공한다면, 서버가 사용자에 가까울 수록 좋아서 클라우드를 활용했을 때 지연 시간이 감소할 수 있습니다. 클라우드 서비스는 물리적으로 다른 공간에 저장하기 때문에 데이터베이스 안정성이 좋습니다. 하지만, 중요한 자료의 경우에는 위험 부담이 존재합니다.
위에 보시는 것처럼 AWS S3는 저장공간으로 다양한 데이터들을 저장합니다. AWS EC2는 데이터 전처리와 같이 컴퓨팅 자원이 필요한 곳에서 작업을 수행합니다. AWS RDS는 정형 데이터들을 담는 Table의 역할을 수행합니다.
단일 클라우드만 활용하지 않고 다양한 클라우드를 사용하는 것을 멀티 클라우드라고 표현합니다. 멀티 클라우드의 경우 한 업체에 의존도가 낮아진다는 장점이 있습니다. 비용이 효율적이며, 현지 법률에 따라 필요할 경우도 있습니다. 한 곳의 서비스만 활용하는 것보다 재난 상황에 대처가 가능해집니다. 하지만, 멀티클라우드를 활용했을 때, 서비스 간의 호환성의 문제가 발생할 수 있습니다. 또한 보안 및 거버넌스 관리가 더 어려워지게 됩니다.