본문 바로가기

일상, 생각, 경험/그냥 얘기

[취준생의 데이터 분야의 커리어 고민 3] 엔지니어가 되자

저번 글에 이어 이번에는 '엔지니어' 가 되기로 한 계기와, 준비하는 과정을 적어보려고 한다.
고민 시리즈 마지막 글이 될 듯.

추천 시스템의 기억

예전에 추천기술팀에서 인턴 할 때, 데이터 분석 이외에 또 흥미로웠던 게 있었는데 바로 추천 시스템이었다. 정확히 말해, 추천 알고리즘 적용 및 여러 실험 테스트를 위한 일종의 프레임워크였다. 계획한 추천 알고리즘을 실 서비스에 적용하고 싶으면, 아무튼 간에 이 프레임워크를 활용하여 코드를 짜야했다. 나에게는 이런 프레임워크의 존재가 참 거대하고 멋있어 보였다.

자세한 동작 원리는 모르더라도 거대한 큰 그림 정도는 알 수 있었다.
지금 생각해보면, 그 안에는 데이터 엔지니어링에서 흔히 말하는 ETL(Extract, Transform, Load) 중 TL 을 수행하는 영역들이 있었다. 서비스에서 데이터를 Extract 해와 DB 에 넣어주는 일은 서비스 서버에서 처리했고, 추천 시스템을 담은 서버는 별도로 존재했다. 이 추천 서버는 DB 데이터를 뽑아와 실시간으로 Transform 한 뒤, 별도의 DW 에 주기적으로 업로드하는 형태였다. 실험 연구원들은 이 DW 에서 필요한 데이터를 가져다 사용하면 된다. Transform 단계에서는 비정형 데이터를 벡터로 임베딩 하거나, Matrix Factorization 하는 머신러닝 코드들이 포함되어 있었다. 이 모든 게 실시간 스트림 형태로 돌아간다.

한편, 추천 엔진은 유저의 행동 로그 + DB 내 유저 혹은 컨텐츠 정보를 바탕으로 돌아간다. UCB, 톰슨 샘플링 등 MAB 알고리즘을 기반으로 추천 컨텐츠는 '변하는' 샘플링 분포에 따라 뽑히게 된다. 정적인 데이터를 가지고 머신러닝을 돌린다거나, 설계자가 미리 의도한 대로만 작동하는 코드만 보던 나에게 이는 굉장히 충격적이었다. 동작 방식은 설계자가 구현했으나, 유저와의 인터렉티브한 액션을 통해 어떤 결과가 나올지 초기에는 전혀 알 수 없는 것이다.

여하튼, 이런 거대한 코드를 보며 막연하게나마

나도 이렇게 데이터가 흐르는 End to End 시스템을 만들어보고 싶다.

라는 생각을 했었다.
내 생각엔 이게 데이터 엔지니어로의 흥미를 끈 첫 기억이었던 거 같다.

데이터 엔지니어

먼저 데이터 엔지니어를 말하기 전, 데이터 관련 직무가 뭐가 있는지, 어떤 일을 하는지 분리해서 알아야 한다.

출처 : 아래 링크

좀 더 자세한 내용은 다음 링크에 깔끔하게 잘 설명되어 있다.

 

Team-Neighborhood/I-want-to-study-Data-Science

데이터 사이언스를 공부하고 싶은 분들을 위한 글 . Contribute to Team-Neighborhood/I-want-to-study-Data-Science development by creating an account on GitHub.

github.com

위 페이지 글에 의하면 데이터 엔지니어의 업무는 다음과 같다고 한다.

  • 여러 서버 클러스터로 빅데이터를 처리
  • 클러스터 관리, 분산 컴퓨팅, 리소스 관리, Load Balancing 관련 문제 해결
  • ETL(Extract - Transform - Load)
  • DW(Data Warehouse) 구축
  • BI(Business Intelligence) 구축
  • Hadoop, Spark, Kafka 등을 사용해 업무

위 내용을 바탕으로 내 나름대로 데이터 엔지니어를 정의해보면,

데이터를 가지고 새로운 가치를 만들 수 있게
기반 인프라를 깔아 놓는 사람

분석가나 머신러닝 엔지니어는 주어진 데이터 위에서 뭔가 새로운 인사이트나 새로운 엔진을 개발하여 성과를 내는 에이스 같은 느낌이라면, 데이터 엔지니어는 데이터 그 자체를 모델링할 줄 알며, 이를 마이닝해오고 분석이나 ML 적용의 판을 깔아주는, 설계자 같은 느낌이다.

데이터 엔지니어가 되자.

다시, 위 링크 글을 보면 다음과 같은 글이 있다.

데이터 분석가는 "기획자"적 성향이 강하고,
데이터 엔지니어는 "개발자"적 성향이 강하다.

데이터 분석을 쪼끔 해본 경험상 일단 첫 번째 줄은 매우 와닿는다.
'스토리 설계' 가 제일 중요하다고 말했었는데, 이는 엔지니어보다는 기획자 포지션에서 매우 중요시되는 능력이기 때문이다.

한편, 내 자신을 돌이켜보면

  • 나는 컴퓨터 공학과 출신이기도 하고, 개발도 나쁘지 않게 한다.
  • 통계 혹은 분석 지식보다는 컴퓨터나 소프트웨어 관련 지식이 더 튼튼하다.
  • 스토리 텔링보다는 개발이나 시스템 설계하는 것에 좀 더 자신 있다.
  • 데이터 분석도 재미있지만, 나는 개발도 재밌다!
  • 데이터 분석은 취미로 하면 된다. 그럼 내가 하고 싶은 분야나 관심사만 하고 싶을 때 할 수 있다.

분석은 취미로, 개발을 내 주 업무로 놔두면 꽤 괜찮은 거 같다.
분석은 취업이나 성과가 아닌 '즐거움' 을 위한 것으로 남게 된다.

특히 최근 면접에서 면접관님에게 듣기로, 분석가는 현업에서 '성과' 에 많이 영향받는다고 한다.
대부분 '주어진 데이터에서 비즈니스에 도움이 될만한 인사이트를 뽑아주세요' 식으로 업무가 주어진다고 한다.
네이버 데이터 컴피티션 때가 떠올랐다.
내 관심사가 아니면 난 더욱이 잘할 자신도 없고, 스트레스받기도 싫다.
내가 잘할 수 있고, 도메인 따라 지식이 분산되는 것이 아닌, 차곡차곡 기술 지식을 쌓아나가는 엔지니어가 되고 싶다.

그래서 어떻게 준비할 건데

그래서 나는 데이터 엔지니어로의 취업을 어떻게 준비해야 할까.
일단 문제는, 채용 공고 등을 보면 데이터 엔지니어 역시 신입을 잘 안 뽑거나 석사 이상을 채용한다.
이유는,

일단 어느 정도 규모 있는 서비스가 운영되어야,
데이터 엔지니어의 필요성이 등장하기 때문.

즉 데이터 엔지니어 자체가 처음부터 나 데이터 엔지니어링 할거야! 로 시작된 게 아니고, 운영 중인 서비스에 데이터를 활용할 목적으로 도입된 것이기 때문이다. 즉 데이터를 핸들링하려면 먼저 데이터가 있어야 되고, 데이터가 있으려면 서비스가 있어야 한다. 서비스를 구축하려면 먼저 데이터 엔지니어가 아니라 백엔드 엔지니어가 있어야 한다. 백엔드 서버 구축 및 운영 경험이 있는 경력자들을 뽑는 이유다. 결국 데이터 엔지니어도 서비스가 돌아가는 서버의 상황과 코드를 이해할 줄 알아야 하는 것이다. 실제로 데이터 엔지니어 일을 하시는 분들은 백엔드 일을 하시다 오신 분들이 많다고 한다.
아래 블로그에 이와 관련된 글이 잘 설명되어 있다.

 

데이터 엔지니어가 하는 일

데이터 엔지니어로 3개월 일하면서 느낀 점 | * 오랜 경력의 데이터 엔지니어가 쓴 글이 아님을 밝힌다. 최근 회사에서 면접관으로 면접을 보고 있는데, 회사마다 데이터 관련 포지션은 하는 일이 다르기 때문에 참고만 하는 것이 좋겠다. 오랫동안 데이터 관련 포지션으로 일하기를 희망했는데, 관련된 정보를 찾기 힘들어서 비슷한 길을 걷기를 희망하는 개발자 분들을 위해서 정보 공유 차원에서 남긴다.* 주제의

brunch.co.kr

그래서 결국 커리어 시작과 준비는 백엔드 엔지니어다.
이 쪽으로의 경력이 어느 정도 쌓이면 데이터 엔지니어는 2차 전직하는 느낌으로 좀 더 세분화하여 커리어를 잡을 계획이다.

어떻게 준비할 것인가.
국내 백엔드 서버 엔지니어 채용은 대부분 JAVA 언어를 사용한다.
그래서 나도 배우기로 했다. JAVA 그리고 SPRING.

다행히 백엔드 분야 주력 언어인 만큼 레퍼런스 자료나 강의가 참 많고 잘되어 있다.
나는 인프런에서 '우아한 형제들' 코스 위주로 쭈욱 수강해볼 예정이다.

 

우아한형제들 백엔드 개발자 취업 로드맵 | 더 나은 학습을 위한 가이드

Spring 기초부터JPA 응용까지 한 번에! 현직자들이 전해준 생생한 정보가 취업을 준비하는데 도움이 됐다는 이야기, 들어보셨나요? 지원하고자 하는 회사와 업계의 현황을 듣고 맞춤 준비를 한다면 취업 성공에 더 가까워질거예요.  취업 면접에도 큰 도움이 될 우형 개발 팀장님의 실무 프로젝트 노하우가 담긴 강의! 지금 들어보세요! JAVA - SPRING , 뭐가 좋은가요? # 전 세계 사용성 1위, JAVA세계적인 대부분의 IT 기업들은 JAVA를 개발

www.inflearn.com

목표는 결국 잘 배워서, 데이터를 만들어내는 '내' 서비스를 만들어 보는 것. 그것도 '잘' 만드는 것.
일단 서비스를 Scalable 잘 설계하여 규모 있는 서비스 형태로 만들어 놓고, 데이터를 쌓아 놔야 그다음 레벨인 데이터 엔지니어링을 접목시킬 수 있다고 생각한다. 지금 당장은 데이터 엔지니어링은 '이후' 문제다.

JAVA 계열 백엔드 엔지니어로 취업을 위해 다음과 같은 것들을 공부해볼 예정이다.

사실 이외에도 인프런에 가면 신입 JAVA 개발자를 위한 로드맵이 많이 설계가 되어있다.
나처럼 공부하고 싶은 사람들은 인프런에서 이를 직접 확인해봐도 좋을 듯하다.

내가 사용하는 주 프로그래밍 언어, 프레임 워크 정도는 일단 기본적으로 알아야 한다고 생각한다.
특히 내가 다루는 레벨의 한 단계 낮은 레벨 (나에게는 시스템, 메모리 레벨이 되겠다.) 을 아주 깊게까지는 아니더라도 어느 정도 알면 개발하는데 많은 도움이 된다고 생각한다. 디자인 패턴이나, JVM 등 이해가 여기에 해당된다.
한편, 현업에서는 프로덕션 레벨로 코딩하고 있고, 이에 합류하기 위해서는 실제로 그 현업에서 사용하는 기술들을 알아야 한다고 생각한다. JPA, 테스팅, 시큐리티, REST 가 여기에 해당한다. 사실 여기까지 하는 게 신입 준비인데 오버스러울 수도 있겠지만, 이제는 조그만 프로젝트 하나를 만들더라도 질 좋은 코드를 짜고 싶다. 그러려면 배울게 참 많다.

길게 1년 정도 바라보고 계획한 것이다. 위 강의를 다 듣고 프로젝트 하나 정도 리팩토링 해가며 만들면 약 6개월 정도 걸리지 않을까 싶고, 인턴 3개월 + 구직 기간 3개월 정도 걸릴 거라 생각한다.
너무 조급해하지 않고, 계획해둔 대로 하나씩 공부해 나가다 보면 재미도 있고 언젠간 목표에 도달하지 않을까란 생각을 한다.