데이터 엔지니어는 회사에서 무슨 일을 하나요?
(이미지 출처 - http://www.ndsl.kr/ndsl/issueNdsl/detail.do?techSq=50)* 아래의 내용은 제가 근무하고 있는 회사의 입장을 대변하지 않으며, 순전히 제 개인의 의견임을 먼저 밝힙니다.안녕하세요. 간략하게 제 소개를 드리면, 현재 데이터 엔지니어로 일 하고 있고 해당 분야에 관련된 질문이 잇다에서 들어와 다른 분들도 보실 수 있게끔 에세이로 남기면 좋겠다 싶어 글을 쓰게 되었습니다. ^^데이터쪽도 정말 많은 분야가 있어서 이 글 에서 전부 깊게 다루기는 어려울 것 같고 제가 알고 있는 내용 / 온라인에 올라온 현직자의 경험담 / 실제 회사의 채용 공고 등을 통해서 같이 알아보면 좋을 것 같습니다.우선 저는 Data Infrastructure 라는 팀에서 근무 하고 있습니다. 팀의 역할은 다음과 같습니다.* 데이터를 수집 / 정제하고* 비즈니스적으로 가치 있는 데이터를 직접 발견하거나 * 다른 구성원들이 데이터를 쉽게 활용할 수 있도록 돕습니다* 또한 데이터를 눈으로 보고 인사이트를 얻는것에서 그치는게 아니라, 실제 서비스까지 제공합니다 (실시간 인기 검색어 같은) * 이 과정에서 필요한 툴과 정책 등을 다른 사람들에게 제공하고, 필요하면 직접 만들기도 합니다.# 데이터 파이프라인위 내용 중, 데이터를 수집하고, 정제하고 다시 내보내는 과정이 포함되어 있고 이 것을 보통 데이터가 흘러다니는 길이라 해서 데이터 파이프라인이라 부릅니다. 조금 더 부연 설명을 해 보자면,1. 정의 Schema데이터는 그냥 생성되지 않습니다. 어떤 형태 (Schema) 로 어떤 값들이 언제 남아야하는지 누군가는 정해야 하고, 이 정해진 규칙에 따라 남겨야 합니다. 예를 들어 Client (앱, 브라우저) 로그라면 사용자의 활동을 구분하기 위해 session 등의 값과 차후 푸시 마케팅 등을 위해 adid 등을 포함할 수 있습니다. 2. 로깅 Logging단순히 모양을 정한다고 해서 데이터가 남지는 않습니다. 데이터를 남기는 활동을 로깅 (Logging) 이라 부르는데, 사용자의 활동을 앱에서 GA (Google Analytics) 처럼 바로 보낼 수도 있고 아니면 서버에서 이벤트를 Database 에 저장하고 그것을 옮겨 가거나 아니면 API 의 로그를 파일로 남겨 긁어가는 방법도 있습니다. 각각의 방법 모두 활용처와 장단점이 있기 때문에 보통 섞어서 사용합니다. 3. 수집 Collection데이터를 어디론가 전송하거나, File 로 남겼거나 아니면 Database 에 저장했다면 이를 중앙화된 저장소에 옮깁니다. 이 과정에서 차후에 사용될 연산의 형태를 고려해 File Format 이나 (Parquet 등) 데이터의 값이 변경 (개인정보 암호화 / 마스킹 등) 될 수 있습니다. 또한 데이터가 조회될 형태, 빈도 그리고 데이터의 크기 등을 고려해 필요한 저장소를 결정합니다. (HDFS, Kafka, ...) 예를 들어 - Client 로그의 경우 서버로 바로 보낼 수 있고 (AWS 를 이용한다면 Kinesis 로 보내거나 등)- Nginx Access 로그라면 파일로 남겨 같은 서버에서 동작하는 Agent (fleutnd 등) 이 다른 곳으로 전송할 수 있습니다- Server 의 로그 (INFO, ERROR 등) 도 마찬가지로 Agent 에서 긁어 ElasticSearch 등의 저장소로 보낼수도 있을 테고- 일별 회원이나, 거래 기록의 경우 Database 에 남아 있으므로 중요도에 따라 시간별 / 일별로 테이블 전체 Dump 를 뜰 수도 있겠습니다4. 정제 Cleansing로그는 발생 또는 전송 (수집 등 파이프라인 내 과정도 포함) 중에 유실이나 중복이 생길 수 있습니다. 또는 앱이나 서버의 버그로 인해 잘못된 데이터가 쌓이는 경우도 종종 있습니다. 따라서 데이터의 최종 사용자에게 전달하기 전 까지 정제 과정을 거칠 수 있습니다.5. 조회 Retrieval / 집계 Aggregation쌓인 데이터를 활용하는 형태는 크게 두 가지로 나눌 수 있습니다. * 데이터를 분석하기 위해 잦은 빈도로 데이터를 탐색하는 형태: 조건을 변경해 가며 데이터를 이리 저리 확인* 정해진 데이터를 일정 주기마다 집계해 새로운 데이터를 생성: 실시간 / 시간별 / 일별로 테이블 생성 (일별 인기 검색어 등)이 과정에서 각각의 사용 형태마다 사용되는 툴이 다릅니다. 집계를 실시간으로 해야 하는지, 일별로 집계해도 되는지, 데이터 사이즈가 엄청 큰지에 따라 도구가 달라질 수 있습니다. 또한 데이터를 소비해서 새로운 데이터를 만들어 내기 때문에, 데이터의 목적지 저장소에 따라서 또 다른 툴을 사용해야할 수 있습니다. (Spark, Presto, Kafka, Flink, EMR, ...) 분석 하는 사람에 따라서도 도구가 달라질 수 있습니다. - 자신이 만든 기능이 많이 사용되는지 알고 싶은 디자이너나 기획자- 통계 (사용자 수 등) 를 확인해야 하는 분석가- 데이터를 이용해 서비스를 만들어 내는 (예를 들어 검색 광고라면, 검색어와 관련된 광고를 연결하고 불필요한 광고는 필터링 하는 등) 다른 팀의 다른 엔지니어가 있을 수 있습니다. 따라서 데이터 엔지니어는 소비자 / 운영 비용 / 도구의 편리성 등을 모두 고려해 필요로 하는 툴들을 제공해야 합니다. 혹시나 데이터 파이프라인 / 데이터 엔지니어링 관련해서 더 궁금하시다면, Udemy 에서 데이터 엔지니어로 근무하시는 강대명님의 아래 슬라이드를 참고하시면 조금 더 자세한 내용을 확인하실 수 있습니다. ^^* (Data Engineering 101) https://www.slideshare.net/charsyam2/data-engineering-101* (Data Pipeline, Data Lake) https://www.slideshare.net/charsyam2/data-pipeline-and-data-lake# 데이터 프로덕트데이터를 보고 인사이트를 얻거나, 의사 결정에 활용하기도 하지만 이것 외에도 데이터를 이용해 서비스를 제공하기도 합니다. 보통 데이터 서비스, 데이터 프로덕트라고 부릅니다. 우리가 흔히 말하는 광고 / 추천 / 검색 / 통계가 모두 데이터 프로덕트로 볼 수 있습니다.- 사용자의 브라우저 히스토리를 통해 다른 사이트에서도 실시간으로 보여지는 동일 상품의 광고- 사용자가 본 결과에 따라 달라지는 추천 상품- '야놀자' 에 대한 연관 검색어- 시간별 / 일별 인기 여행지- 해외 결제나 구매 패턴으로 비 정상적인 금융 거래 탐지- 소셜 네트워크에서 새로운 친구 / 페이지 등 추천이런 데이터 프로덕트는 사실 데이터 파이프라인의 가장 마지막 부분에 위치합니다. 데이터를 정의하고, 남기고, 쌓고, 정제한 후에 데이터를 조회해서 쓸모가 있을지 판단 한 후 비즈니스에 중요한 가치가 있다고 판단되면 데이터를 만들고 이것을 서비스에 지속적으로 제공합니다. 다시 말해서 만들기 까지 시간은 가장 오래 걸리지만 비즈니스 가치를 만들어 내기 때문에 실제로는 가장 의미 있는 부분입니다. 데이터는 단순히 쌓고, 본다고 해서 가치를 가지는게 아니라 다시 돌아 서비스로 제공되야만 의미가 있습니다. 조금 더 개인적인 견해를 덧붙이면, 서비스로 어떤 데이터가 제공된다는 말은 데이터가 비즈니스적으로 가치가 있어야 한다는 말이고 이는 저장하고 정제하고 분석하고 다시 사용하는 모든 활동에서 잊지 말아야 할 것이 "비즈니스 가치" 임을 말합니다. 결국 (데이터) 엔지니어 또한 비즈니스적인 가치를 만들어 내는 사람이므로 멋있고 최신의 기술을 쫓는데 많은 노력을 쏟기 보다는 비즈니스적으로 의미 있는 제품을 시간 내에 만들어 마켓에 제공하는데 목적을 두어야 합니다.# 머신러닝머신 러닝 관련해서는, 제가 잘 알지는 못하지만 지역 중고 직거래 마켓 앱인 당근마켓의 사례로 같이 알아 볼 수 있을 것 같습니다.* (당근마켓에서 딥러닝 활용하기) https://medium.com/daangn/%EB%8B%B9%EA%B7%BC%EB%A7%88%EC%BC%93%EC%97%90%EC%84%9C-%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0-3b48844eba62위 글에 따르면, 당근 마켓에서는 중고 거래 게시글이 금지 품목인지 아닌지 판별하기 위해, 딥러닝을 활용한다고 나와있네요. 문제는 서비스가 성장하면서 저희 소규모 인원만으로는 감당할 수 없을 정도로 신고량이 늘어나게 되었습니다. 그렇다고 스타트업에서 운영인력을 선형적으로 채용하기 부담이 될 수 밖에 없었습니다.아래 글은 최근 올라온 글인데, 당근 마켓 인턴 분께서 이미지만으로 중고 물품의 카테고리를 분류하는 이야기에 관해서 소개해 주셨습니다.* (이미지만으로 내 중고물품의 카테고리를 자동으로 분류해준다면?) https://medium.com/daangn/%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A7%8C%EC%9C%BC%EB%A1%9C-%EB%82%B4-%EC%A4%91%EA%B3%A0%EB%AC%BC%ED%92%88%EC%9D%98-%EC%B9%B4%ED%85%8C%EA%B3%A0%EB%A6%AC%EB%A5%BC-%EB%B6%84%EB%A5%98%ED%95%B4%EC%A4%80%EB%A9%B4-feat-keras-b86e5f286c71# 검색 엔진검색 관련해서도 제 분야는 아니지만, 아래 나온 블로그에 올라온 글을 통해서 어떤 지식이 필요한지 알아 볼 수 있을것 같습니다.* https://ratsgo.github.io/blog/categories/위 블로그 글 중에서 몇 개를 골라봤는데, 제목을 보면 한국어에 대한 도메인 지식과 통계 또는 수학적인 내용이 필요한 것 같습니다. 더 궁금하신 내용이 있다면 위 블로그에서 한번 살펴보시면 좋을것 같습니다.* CNN으로 문장 분류하기 19 Mar 2017* 그래프로 중요 기사 걸러내기 13 Mar 2017* Sequence-to-Sequence 모델로 뉴스 제목 추출하기 * 통계 기반 감성사전 구축 25 Jun 2017* 형태소 분석기 성능 비교 # 데이터 엔지니어에게 필요한 기술마지막으로 데이터 분야 채용 공고를 살펴보면, 어떤 기술을 사용하고 있고 공부해야 하는지 대략적으로 파악할 수 있습니다. 아래는 K 사 채용공고 몇 개의 링크입니다. 내용을 확인해 보시면서 어떤 기술을 사용하고 있구나, 한번 파악해보시는 것도 좋습니다.* (데이터 분석가 모집) https://careers.kakao.com/jobs/P-10571?page=3* (데이터 사이언티스트를 지향하는 데이터 엔지니어 모집) https://careers.kakao.com/jobs/P-10993?page=3* (빅데이터 활용 분석 시스템 개발자 모집) https://careers.kakao.com/jobs/P-10682?page=3글이 조금 길었지만, 데이터 엔지니어가 무슨 일을 하는지 어떤 고민을 하고 있는지 이해하시는데 도움이 되셨다면 좋겠습니다. ^^감사합니다.