Introduction
사실 자세히 찾아보기 전에는 실제 업무는 Data Scientist와 Data Engineer를 모두 해야하는 줄 알았다.
Data Engineer는 데이터를 가공하여 쉽게 다룰 수 있게 만들며, Data Scientist는 그러한 데이터를 분석하고 연구하여 유의미한 결과를 낸다.
앞으로 내가 공부할 것은 Data Engineer에게 있어 필요한 것들이다.
아래의 글이 많은 도움이 되었다.
[취준생의 데이터 분야의 커리어 고민 3] 엔지니어가 되자
저번 글에 이어 이번에는 '엔지니어' 가 되기로 한 계기와, 준비하는 과정을 적어보려고 한다. 고민 시리즈 마지막 글이 될 듯. 추천 시스템의 기억 예전에 추천기술팀에서 인턴 할 때, 데이터 분
dailyheumsi.tistory.com
++ 나름 찾아보고 정리하고 있지만 잘못된 부분이 존재할 수 있습니다. 이 부분은 지적해주시면 언제나 감사합니다.
Data Engineer
Data Engineer가 하는 일을 한 마디로 요약하자면 ETL이다.
Extract - Transform - Load
- Extract
- 데이터 크롤링, 로그 수집 등 데이터를 모으는 과정이다.
- 특정 키워드에 대한 데이터를 구하고 싶다면 데이터 크롤링을, 서비스중인 어떠한 기능의 데이터를 구하고 싶다면 로그 수집 등을 한다.
- Apache Kafka, Fluentd, Logstash 등 다양하다.
- Transform
- Extract를 통하여 얻은 데이터를 가공하기 쉬운 형태로 변환시킨다.
- 이 과정에서 어떠한 툴을 이용하는지 모르겠다.
- Load
- Transform을 통하여 변환된 데이터를 저장한다.
- 데이터가 어디에, 어떤 용도로 쓰일지 모르기에 특정 데이터만 저장하기가 어렵다. 데이터의 용량이 방대해진다.
- 매우 큰 용량의 하드에 저장할 수 있다고 하자. 데이터를 사용하기 위해서 매번 하드에 접근해야 하고, 결국 서버 구축을 해야 한다. 이러한 것을 대신 해주는 유용한 서비스들이 존재한다.
- Amazon Redshift, HDFS, json 등
ETL 통합 서비스가 존재하나, 모든 것을 해결해주는 만능 프로그램이 있다면 모두 그것을 쓰지 않았을까?
왜 툴이 매우 다양하고 나뉘어 있는 것일까? 각자의 장단점이 존재하기 때문이다.
위에 적은 것보다 훨씬 많은 툴이 존재하나, 편의상 몇 개만 적었다.
많은 툴이 거론되는 것은 각자의 장단점이 존재하며, 어떠한 데이터를 주로 처리하냐에 따라 적합한 툴이 다 다를 것이다.
이에 반해 ETL 통합 서비스는 많이 언급이 되지 않는 것 같은데, 아무래도 효율성 측면이 아닐까 싶다.
굳이 ETL로 나누었으나, 이 외에도 Hadoop 기반, Apache Hive 및 Spark 등 다양하다.
취직을 하지 않는 한 대용량의 데이터를 구할 수 없기에 비교적 작은 데이터들을 사용하여 공부하는 방법이 유일하다.
그렇기에 공부 방향은 다음과 같다.
- Java
- 그동안 C와 C++만 해왔으나, 데이터쪽은 Java를 많이 사용한다.
- 처음 프로그래밍을 배울 때는 성능의 문제로 C++ 또한 비중이 있었으나, 현재는 시스템쪽이 아니면 C++을 찾기가 쉽지 않은 상황이라고 알고 있다.
- 결국 Java를 공부해야 하는 상황이다. 프로젝트를 진행하기에는 아직 지식이 많이 부족하여 의미가 없을 것 같다. 아래 항목을 통하여 Java를 공부할 예정이다.
- Algorithm
- 알고리즘은 효율적인 프로그래밍의 기본이 된다.
- C++을 이용하여 Online Judge를 풀며 알고리즘 공부를 해왔으나, 이제 Java를 이용할 것이다.
- 이것만으로 Java를 공부하기에는 많이 부족하나, 기본기를 다지기에는 적절하다고 생각한다.
- Python || Scala
- 데이터 처리에 있어서 Python 혹은 Scala를 주로 사용한다고 알고 있다.
- 대중적인 Python은 결국 언젠가는 배우겠지만, Python에 비해 Scala를 선택하는 경우가 적은 편이다.
- 그렇기에 Scala를 공부할 것이다.
- Python이 답이라면 Scala를 선택할 이유가 없을 것이다. 그러나 Scala 또한 선택지의 하나이며, Scala를 먼저 배우는 것이 절대 나쁘지 않다고 생각한다.
- Raw Data를 이용한 데이터 처리
- 많은 사이트에서 Raw Data를 제공해주고 있다.
- 우선은 이러한 Data를 이용하여 ETL 작업을 진행한다.
- 올바른 ETL 작업이 이루어졌는지 확인할 방법을 찾아야 한다. 아무 생각 없이 수만개 ETL 작업을 진행하며 공부하였더라도, 적절하게 처리되지 않았다면 어마어마한 시간을 보기 좋게 낭비한 꼴이 될 것이다.
- 위의 작업들을 순조롭게 진행하여 어느정도 숙련이 되었을 때, 데이터 크롤링으로 Raw Data를 수집하여 ETL 작업을 시도할 계획이다.
- ETC
- 아직 아는 것이 매우 부족하다. 데이터 뿐 아니라 기본기에 있어서도 부족하다.
- 공부해야할 것이 명확하게 생겼을 경우 수정하거나 추가하여 로드맵을 정교하게 만들 것이다.
- OS와 서버에 관한 공부도 필요하다. OS는 우선 2학기에 강의를 수강하기에 이를 통해 1차적으로 공부할 것이다.
- 서버에 관해서는... 어떻게 공부해야할지 감이 잡히지 않는다. 교수님이나 선배들, 다른 프로그래머분들과 대화, 질의응답, 블로그, 강연 등을 통해 방법을 찾아 공부하겠다.
- 독서는 매우 좋은 공부 수단이다. 필요한 서적은 꾸준히 읽으며 지식을 쌓을 예정이다.
Conclusion
아직 많이 부족하다.
꾸준히 공부하며 쌓이는 지식은 블로그를 통해 정리할 것이다.
잘못된 정보나 추가적인 정보 등이 있을 경우 해당 게시글을 수정할 것이다.
게시글을 수정하는 이유는 단 하나이다. 이것은 Data Engineer가 되기 위한 매우 기초적인 로드맵이 된다.
로드맵이 바뀔 때마다 게시글을 작성한다면 나중에 비슷한 게시글로 가득할 것이다.
혹여나, 블로그가 많이 발전하여 유익한 정보를 제공할 때, 이 게시글이 나와 같은 처지에 있는 사람들에게 도움이 될 것이다.