데이터 엔지니어 두 번째 취준 회고록
회고

데이터 엔지니어 두 번째 취준 회고록

회사로 돌아가즈아

이 글은 IT 창업, 스타트업 개발자, 개발 크리에이터로 생활을 전전하는 한 중생이 다시 회사로 돌아가게 된 이야기입니다. 대학을 졸업하고 데이터에 푹 빠져 데이터 엔지니어 포지션으로 회사에 취직하였습니다.

 

어떤 방식으로 취준을 했고 무슨 기준으로 회사를 선택했는지 상세하게 풀어내려고 노력했습니다. 취준 혹은 이직을 하시는 분들에게 작게라도 도움이 되었으면 합니다.

 

[주의]
어디까지나 이 글은 개인의 경험을 기반으로 작성되었으며, 취준생과 회사의 입장을 대변하지 않습니다.

 

1. 나는 왜 다시 회사를 다니기로 결심했는가

가격 좀 더 올려서 팔 걸

대학생 때부터 나는 하고 싶은 게 있으면 빠르게 해 보는 행동파였다. 돈을 벌고 싶어 아이스박스에 음료수와 맥주 등을 넣어 산 꼭대기까지 낑낑 올라가서 등산객에게 판매를 하기도 했고(기름값 벌었음😭), 창업, 취업, 크리에이터 활동 모두 내가 하고 싶었기에 선택했다.

또한 얼마 전까지 프리랜서로 지내면서 해보고 싶은 일들은 많았다.

 

- 내가 생각하는 효율적인 학습 흐름으로 개발 강의들 만들어보기

- 노코드 툴을 활용한 B2B 비즈니스 해보기

- 비개발자를 위한 IT 개발 지식 콘텐츠 확장하기

- 등등

 

하지만 작년 말, 대학교 졸업을 기점으로 학생이라는 든든한 신분이 사라졌다. 그러면서 앞으로의 삶에 대한 고민이 정말 많이 들더라.

 

"앞으로 이 일을 지속할 수 있을까?"

"내가 앞으로 어떤 일을 하고 싶은 걸까?"

"내 인생의 목표가 뭘까? "

 

암 론리

주로 혼자 일하면서 아쉬웠던 부분은 큰 문제를 풀 수 없다는 점이다. 스스로 문제를 정의하고 이를 풀어가면서 Small Win은 몇 번 이뤄냈다. 그러나 Big Win을 이뤄내기 위해선 더 큰 문제가 필요하다. 큰 문제를 해결하기 위해선 1. 큰(좋은) 문제를 제공해주는 환경과 2. 함께 할 수 있는 동료가 있어야 하며 이는 회사에서 이룰 수 있다고 생각했다. 

 

결과적으로 전문성과 인적 네트워크가 부족한 상태에서 혼자 일하는 건 큰 문제를 정의할 수 없고 성장하기 힘들다는 결론을 내렸다. 기존에 하던 것들을 내려두고 현세로 복귀 결정!

 

2. 왜 데이터 엔지니어로 피벗팅하였는가

대학 생활 동안 개발하면서 느꼈던 점은 비즈니스에 임팩트를 줄 수 있는 활동을 할 때 정말 몰입할 수 있었다. 그리고 마켓핏랩에서 일하면서 데이터 기반의 의사결정과 이를 위한 개발이 즐거웠다.

관심사를 명확하게 한 후, 앞으로의 커리어 방향을 잡기 위해 관련 직군에 종사하시는 분들의 조언을 구했다. 많은 분들이 좋은 이야기들을 해주시고 현실적인 이야기도 과감하게 해 주셨는데 오히려 나는 더 챌린징하다는 점에서 끌렸고 생각이 확고해졌다.

 

대부분의 비즈니스 의사결정에 데이터는 중요한 역할을 한다. 이때 필요한 데이터들을 안정적으로 공급하고 사내에 데이터 기반의 의사결정에 영향을 줄 수 있는 개발자가 되고 싶었다. 그래서 데이터 엔지니어에 관심이 생겼고 본격적으로 준비를 시작하게 됐다. 내년에는 어떤 모습일지 몹시 궁금하다.

 

사실 아무것도 없이 데이터 엔지니어 준비를 시작한 것은 아니다. 계속해서 백엔드 개발을 해왔기에 데이터 인프라를 이해하기 수월했고, 이전 팀에서 데이터를 다뤄왔기에 업무에 대한 흐름을 잡고 있었다.

 

[여담]
갈팡질팡하던 저에게 조언해주신 분들에게 감사의 인사를 드립니다🙇🏻‍♂️

 

3. 본격 취준 시작

나름대로 체계적인(?) 방식으로 준비를 시작했다. 취준 기간은 2달로 잡고 첫 달은 정신과 시간의 방(스터디 카페)에서 CS 기본기를 쌓고 직무에 대한 역량을 키웠다. 그리고 남은 1달은 회사를 지원하고 면접을 봤다.

3-1. 스터디 참여 & 개인 프로젝트

먼저 해당 직군에 대한 이해도를 더 높이고 큰 그림을 훑기 위해 프로그래머스에서 운영하는 데이터 엔지니어 스터디에 참여했었다.

사실 큰 기대 없이 수강하였는데, 스터디 리더 기용님의 강의력과 더불어 많은 질문에도 꼼꼼하게 답변해주셔서 감동을 받았다(나중에 크면 기용님 같은 사람이 돼야지!) 또한 같은 기수의 분들과 시행착오, 면접 경험 등을 공유할 수 있어 심리적으로 큰 위안감을 얻었다.

 

스터디를 통해 전체적인 윤곽을 잡은 후 개인 프로젝트를 진행했다. 싱글 머신에서 데이터 파이프라인을 구축해 간단하게 데이터를 흐를 수 있도록 했다. 프로세스 관리는 Docker와 Docker Compose로 구성했는데, 생각보다 Container들의 리소스 관리나 컨테이너 노드들 간의 연결 과정에서 시행착오가 많았다. 역시 직접 만들어보지 않으면 모른다🤣

 

3-2. 취준 기간 & 목표 선정

어느 정도 데이터 엔지니어 직군에 대한 준비가 됐다면 본격적으로 취준을 시작한다. 성격상 멀티 태스킹이 되지 않기에 기존에 하던 활동을 대부분 중단하고, 집 앞 스터디 카페에 한 달 권을 구매했다. 시간과 정신의 방에 갇힐 마음의 준비가 되었다.

 

취준 대시보드

그리고 내가 가고 싶은 회사들을 리스트업 했다. 해당 회사를 다니는 지인이 있다면 데이터 팀에 대해 물어보았고 소개를 받기도 했다. 내 소중한 시간과 자원을 회사를 위해 쓰는 것인 만큼 회사와 팀에 대한 이해는 꼭 수반되어야 한다.

보통 가고 싶은 회사들을 선정할 때 나는 아래와 같은 기준으로 우선순위를 부여했다.

 

1. 체계적인 팀과 배울 수 있는 뛰어난 팀원이 있는가

2. 회사에서 내가 기여할 수 있는 부분이 어느 정도인가

3. 다른 직군의 팀원들과 효과적인 커뮤니케이션이 가능한가

 

3-3. 레쥬메 & 포트폴리오 만들기

좌 : 이력서 , 우: 포트폴리오

오랜만에 레쥬메와 포트폴리오를 건드려 본다. 데이터 엔지니어와 관련 없는 이력을 남길지 말지에 대한 고민을 많이 했었는데 결과적으로 남기기로 했다. 회사에서도 나에 대한 전반적인 이해가 필요할 것 같아서였다(절대 레쥬메가 비어 보여서 그런 건 아니다)

레쥬메는 2장 정도로 줄이는 게 좋을 것 같아 잔잔한 이력, 경험은 지우고 굵직한 부분들만 적었다.

 

포트폴리오와 이력서는 노션을 활용했고, 레쥬메에 하이퍼링크들을 통해 포트폴리오로 연결시켰다. 사실 노션을 사용했을 때 포트폴리오 구성이 제한적일 수 있지만, 접근성 측면이나 빠르게 구성할 수 있다는 점에서 노션을 선택했다(절대 다른 툴을 다룰 줄 몰라서 그런 건 아니다)

 

3-4. CS 기본 닦기

1. 알고리즘

우선 지원할 여러 회사에서 코딩 테스트를 보기 때문에 알고리즘 공부는 필수다. 그래서 주변의 추천을 받아 파이썬 알고리즘 인터뷰와 코딩 인터뷰 완전 분석(Crack The Coding Interview) 두 권을 구매했다.

 

Leetcode도 잔디를 심는 맛이 있다.

그리고 책들을 보면서 LeetCode 문제를 계속 풀었다. 한국에는 프로그래머스가 있다면 해외에는 LeetCode가 있다. 해외 기업들의 코딩 인터뷰를 볼 때 LeetCode를 많이 참고할 정도로 알고리즘 공부를 한다면 알아두는 게 좋다. 실제로 코딩 테스트를 본 곳들 중 50% 이상이 LeetCode에서 문제가 출제되었다.

 

[여담]
파이썬 알고리즘 인터뷰는 LeetCode 문제를 파이썬으로 해설하는 책이다. 친절한 문제 해설과 더불어 파이썬과 자료구조에 대한 이해도 높일 수 있어 초반에 많은 도움이 되었다.

코딩 인터뷰 완전 분석은 해외에서 유명한 코딩 테스트 준비용 책이다. 알고리즘뿐만 아니라 자료구조, 객체지향, 시스템 디자인 등 다양한 내용을 커버하고 있어 기본으로 훑기에 정말 좋았다. 참고로 해설은 Java로 짜여 있다.

 

2. CS 기본

비전공자인 만큼 CS 기본기를 철저하게 다져야 한다. 구글링해서 잘 정리된 기술 면접 준비 문서들을 찾은 후 내가 모르는 용어, 기술 위주로 공부를 하면서 백지를 채워나갔다.

 

https://github.com/yansfil/data-engineering-study

공부한 영역을 나눠보면 크게 파이썬, 운영체제, 네트워크, 데이터베이스, 객체지향 등이 있다. 보통 모르는 용어나 기술이 있으면 구글링을 통해 이를 정리하면서 모르는 부분들을 채워나갔다. 나중에 더 여유가 있다면, 강의를 수강하면서 기초 개념들을 다시 복습하여 블로그에 (언젠가) 업로드해야지

 

3-5. 백지 복습법

나는 기억력이 좋지 않다. 그래서 복습은 필수다. 우연히 아래 글을 접하고 영감을 받아 복습 전략을 세웠다.

https://www.learningman.co/algorithmstudychallenge/

 

에빙하우스의 망각 이론에 따르면 10분, 1일, 1주, 30일의 간격의 복습을 했을 때 단기에서 장기 기억으로 변한다고 한다.

나 같은 경우 매일 아침에 전날 공부한 것들을 백지 복습하는 형태로 기억력을 끌어올렸다. 전날에 공부하면서 새로 알게 되거나 복습하면 좋을 내용들을 메모에 키워드 형태로 미리 적어두고 다음날 다시 정리하였다. 또 주말에 한 주간 공부했던 내용들을 다시 한번 복습하고 정리하는 식으로 진행했다.

 

전날에 적어둔 키워드를 보고 생각나는 대로 내용을 채운다.

알고리즘도 동일하게 적용했다. 오래 걸렸거나 못 푼 문제들은 1주에 한 번씩 모아서 다시 풀어봤을 때 더 효과적으로 학습할 수 있었다. 짧은 기간 내에 취준을 해야 하는 사람들이 있다면 이 방법을 시도해보는 것을 추천한다.

 

4. 데이터 엔지니어 직무 역량 쌓기

4-1. 토이 프로젝트

전체적인 데이터 파이프라인을 구축해보고 싶어 토이 프로젝트를 진행했다.
클라이언트 데이터 생성 → S3 → Spark → Postgres → Zepelin 흐름으로 파이프라인을 구축했고 Airflow로 스케쥴링을 했다.

싱글 머신에서 빠르게 데이터 파이프라인을 구축하기 위해 Docker, Docker Compose를 사용했다.

 

4-2. Udemy 강의 수강

데이터 엔지니어링 강의는 국내에 많지 않아 해외 사이트(Udemy)를 이용했다.

Python, Hadoop, Airflow 등의 기본 역량을 쌓기 위해 아래와 같은 강의들을 수강했고 배운 것들을 정리했다.

 

Airflow 입문 강의 : www.udemy.com/share/101YxGBUIYclpUTHw=/
Airflow 중급 강의 : www.udemy.com/share/102HOABUIYclpUTHw=/

Hadoop Ecosystem 기본 강의 :  www.udemy.com/share/101XgeBUIYclpUTHw=/

Python 입문 - 중급 강의 : www.udemy.com/share/103J8CBUIYclpUTHw=/

4-3. SQL

데이터 엔지니어에게 SQL은 필수 역량 중 하나다. SQL 문제 풀이를 위해 프로그래머스HackerRank를 이용했다(LeetCode는 SQL 문제 대부분이 유료라서 아쉽) 나중에 알게 된 바로 TestDome도 많이 사용한다고들 한다.

MYSQL을 기본 언어로 해서 SQL 문법과 JOIN, Window 함수까지 공부를 했고 문제를 풀면서 모르는 것들을 정리했다.

 

[여담]
SQL 공부를 하면서 강의나 문제풀이 사이트를 통한 학습과 실제 면접 문제 사이의 괴리감이 컸다는 점이 아쉬웠다. 내가 봤던 회사들의 SQL 문제의 경우 실제로 회사에서 접할 수 있는 문제를 바탕으로 SQL 문제를 출제했다. 대부분의 플랫폼에서 제공하는 문제들로는 기본적인 Problem Solving은 할 수 있었지만, 실제 문제 상황에 이들을 접목하기에는 한계가 있었다.

 

4-4. Case Study

해당 직군에 대한 경험이 부족할 때 할 수 있는 가장 좋은 방법은 Case Study라고 생각한다.

레쥬메에 적은 프로젝트와 경력을 바탕으로 스스로 질문을 해본다.

 

- 만약 이 프로젝트에서 대용량 데이터를 처리해야 한다면?

- 에러가 났을 때 어떻게 대처할 것인가?

- 더 효율적으로 아키텍처를 짜 본다면?

 

자답하기 위해 다시 구글링을 하고 커뮤니티에 질문을 한다. 내 경험이 부족할 때는 남의 경험을 최대한 흡수할 수 있도록 했다. 나 같은 경우 LeetCode의 Discuss 탭을 유용하게 활용했다. 그곳에서 유저들은 빅테크 기업(구글, 아마존, 마이크로소프트 등)에서 실제로 받았던 면접 질문들을 올리고 댓글을 남기며 활발하게 논의한다. 나는 Data Engineer와 관련된 질문글을 보면서 정리했다. 생각보다 면접을 준비하면서 큰 도움이 되었으며 앞으로도 Case Study를 적극적으로 할 예정이다.

 

혼자 신나서 정리하고 공유함

예시https://leetcode.com/discuss/interview-question/system-design/124603/Amazon-or-Phone-screen-or-How-to-handle-large-log-data

 

[여담 1]

데이터 엔지니어 친구에게 추천받은 빅데이터를 지탱하는 기술도 괜찮았다

 

[여담 2]

기술 스택을 무조건 많이 아는 게 중요한 건 아니라는 것을 느꼈다. 내 강점이 될 기술을 선택해 딥다이브하는 것이 오히려 더 낫다고 생각한다. 다른 기술들은 기본 개념과 흐름&원리를 파악해서 정리해도 충분하다.
면접에서 어설프게 답변하는 것보단, 모르는 건 모른다 하고 아는 것들은 확실하게 대답하는 게 더 좋은 점수를 얻을 수 있다고 생각한다.

 

5. 회사 면접 보기

난 X나 짱이야!

5-1 지원 시작

이제 본격적으로 회사를 지원한다. 1주에 2~3군데에 레쥬메를 보냈고, 가고 싶은 회사는 나중에 지원했다.

보통 최종 면접 결과가 비슷하게 나올 수 있도록 기간을 조정하는 게 베스트라고 생각했다. 회사가 오퍼 레터를 줬을 때 오랫동안 기다릴 수 없기 때문에 비슷한 시기에 결과들이 나올수록 연봉협상도 유리하며 회사 선택도 폭이 넓어진다. 그래서 초반에 지원한 회사들이 붙으면 면접을 조금 늦췄고, 후반에 지원한 회사의 경우 면접을 댕길 수 있는지 정중하게 물어봤다.

 

5-2 공통 & 면접 후 질문 정리

"왜 우리 회사에 지원했어?", "우리가 왜 널 뽑아야 돼?", "이전 회사는 어땠어?" 등의 공통 질문은 면접 보기 전에 전부 대답을 정리했다. 면접 때 최대한 횡설수설하는 것을 줄이고 일관된 태도를 보여주는 것은 몹시 중요하다.

 

면접이 끝난 후 이불킥을 하며 후회할 시간이 없다. 머릿속에 기억나는 질문들은 전부 노션으로 적어둬야 하기 때문이다. 면접 질문들을 정리하면서 회사에서 공통적으로 묻는 내용을 확인할 수 있고, 어떤 자세를 취해야 하는지 감을 잡을 수 있었다.

내가 답변하지 못했던 질문들은 다시 찾아보면서 어떻게든 더 나은 대답을 할 수 있도록 준비했다. 면접을 보면서 성장을 이끌어낼 수 있다면, 마지막에 가고 싶은 회사를 지원할 때 가장 준비된 내가 나올 수 있을 것이다.

 

5-3 멘탈 관리

 

그에게 주어지는 불합격 목걸이!

면접 불합격 메일을 받다 보면 생각보다 멘탈이 털털 털린다. 자기 객관화가 되면서 나는 우주의 먼지 같은 존재라는 걸 다시금 깨닫는다. 그래서 취준생은 생각보다 마인드 컨트롤이 중요하다는 생각이 들었다.

 

마침 취준하면서 가져야 할 마인드셋에 대한 글을 지인이 공유해줬다. 면접은 지원자와 회사가 Good Fit, Not Good Fit을 확인하는 과정이지 지원자가 Good, Not Good 임을 판단하는 과정이 아니라는 이야기였다. 이 글에 큰 영감을 받았고 덕분에 자신감을 가지고 이후 면접에 임할 수 있었다. 면접자가 봤을 때 회사와 Fit이 맞고 성장 가능하다고 판단한다면 합격 목걸이를 쥐어줄 것이다. 그게 아니어도 괜찮다. 나와 Fit이 맞는 회사는 꼭 있을 거니까.

 

6. 어떤 회사를 선택해야 하는가

최종 면접 결과가 서서히 나오기 시작한다. 아쉬운 불합격 통보를 받기도 하고 눈물 젖은 최종 합격 통보를 받기도 한다. 기회를 주심에 감사해하면서 내가 몸담게 될 회사를 선택하면 이 긴 여정도 끝이다.

 

가고 싶은 회사의 우선순위에 따라서 바로 선택하면 좋겠지만 꼭 그렇지는 않았다. 회사 면접을 보면서 지원자에게 관심을 보이고 좋은 질문들을 많이 남겨주시면 호감도가 더 높아졌다. 회사에 궁금한 점들에 대해 원하는 대답을 받았을 때도 마찬가지였다. 반대로 면접 경험이나 HR 담당자와의 커뮤니케이션이 호감도를 떨어트리기도 했고.

 

회사 선택에 필요한 좋은 기준들인듯

회사를 선택할 때 우선 내가 무엇을 가장 중요시하는지 생각해봐야 했다. 주변 멘토분들에게 조언을 구했을 때 한 분은 커리어 원칙을 세우는 것을 제안 주셨다. 이를 바탕으로 종합적으로 판단한 후, 나중에 후회가 더 남을 것 같은 회사를 선택했다.

 

7. 면접 준비하면서 느낀 점

하나, 회사의 JD(Job Description)에 너무 쫄지 말자. 나 같은 (중고)신입도 2, 3년차 경력 포지션도 지원했고 합격했다. 내 생각에 주니어 엔지니어가 가장 잘 어필할 수 있는 건 태도와 성장 가능성이라고 본다. 본인의 강점을 잘 파악하고 준비를 충분히 한다면 좋은 결과를 얻을 수 있을 것이다.

 

둘, 포트폴리오를 무조건 늘리기보단 하나를 하더라도 제대로 하는 게 나았다. 대부분의 경우 (레쥬메에 명시된) 직무와 관련된 프로젝트를 깊게 질문하는 편이었다. 적어도 주니어인 내가 느꼈을 때, 면접관 분들은 다양한 프로젝트 경험보다는 하나의 프로젝트를 얼마나 완성도 있게 가져갔는지에 더 초점을 두는 듯했다. 그래서 코드를 꼼꼼하게 보면서 어떻게 발전시킬지, 특정 상황에선 어떻게 해야 할지 등을 고려해서 준비했다. 프로젝트 하나도 제대로 준비하다 보면 생각보다 오래 걸리기도 했고.

 

셋, 서류 탈락이나 면접에서 떨어졌을 때 자존감이 낮아지는 건 당연하다고 생각한다. 그럴 때 나는 Good Fit, Not Good Fit 마인드로 접근하면서 멘탈을 회복했다. 회사가 우리를 못 알아보는 거지, 우리가 못난 건 아니니까.

 

넷, 취준을 밀도 있게 준비한 게 좋은 결과를 가져다줬다고 생각한다. 직장을 다니지 않았기에 더 많은 시간을 투자할 수 있었다. 크리에이터 활동 대부분을 중단하고 면접 준비에 올인했다. 덕분에 후회 없이 최선을 다할 수 있었다.

 

마무리

면접에서 10년 뒤 어떤 개발자가 되고 싶은지에 대한 질문이 몇 번 있었다. 솔직히 10년 뒤의 모습이 잘 그려지지 않는다고 말씀드렸다. 다만 적어도 5년 간은 주어진 역할에 최선을 다하고 팀원들에게 인정받는 엔지니어가 되고 싶다. 그 이후의 모습은 그때의 나에게 맡기도록 하자.

 

 

[앞광고]

1. 모든 개발자의 실무를 위한 올인원 개발 기본기 클래스 (클린 코드, 객체 지향, 테스트 작성법, 소프트웨어 아키텍처 등)

https://bit.ly/3maXZSr

 

모든 개발자의 실무를 위한 올인원 기본기 클래스 - 인프런 | 강의

분야 무관! 개발자라면 실무에서 꼭 알고 있어야 할 핵심 기본기를 쉽게 + 코드 위주로 다루는 강의입니다. 성장하고 싶은 모든 주니어 개발자와 취준생에게 이 강의를 적극 추천합니다., 실무

www.inflearn.com

2. 자바스크립트 하나로 웹, 서버, 모바일, 머신러닝까지 전부 익히는 올인원 클래스(베스트 셀러 & 리뷰 만점)

bit.ly/3h9MN6S

 

비전공자를 위한 진짜 올인원 개발 클래스 - 인프런 | 강의

왕초보도 할 수 있는 웹, 서버, 모바일 앱, 머신러닝까지 익히는 끝판왕 풀스택 강의입니다. 개발을 어디서부터 시작할지 막막했다면 이 강의를 강력 추천할게요. Javascript 하나로 진행합니다!, [

www.inflearn.com

3. IT 회사에서 살아남기 위한 모든 개발 지식

bit.ly/3uzesSS

 

IT 회사에서 살아남기 위한 모든 개발 지식 A to Z - 인프런 | 강의

본 강의는 멤버십 구독 개념으로 한 번 구매하면 계속 추가되는 수업도 수강할 수 있습니다😃, [사진] 이 강의는!  단순히 개발 용어만을 알려주지 않습니다.IT 회사에서 개발자들이 실제로 하

www.inflearn.com