📝

2024년, 첫 번째 이직: 백엔드 엔지니어에서 데이터 엔지니어로

좋은 개발자는 적재적소에 합리적인 선택, 최선의 선택을 하기 위해서는 좋은 무기를 들고 있어야한다.

면접이 너무 어렵다고 느낄 때마다 기회가 있으면 해당 면접에 대해 피드백을 요청하곤 한다. 한 면접에서 이 말을 들었을 때, 나에 대해서 다시 한번 돌아봤다. 내가 가진 무기는 무엇인지, 이번 면접이 아니더라도 그 동안 내가 가진 무기를 잘 보여줬는지 생각해봤다. 지금 이 글을 읽고 있다면 자신이 갖고 있는 무기가 무엇인지 생각해보자. 그리고 무기 없이 전투에 나가보기도 하자.

TL;DR

이직을 하기 위해서는 목표와 기간 설정이 중요하다. 뚜렷한 목적이 결여된 상태로는 아무것도 이룰 수 없다. 막연하게 이직을 하고 싶다가 아니라 철저하게 이직을 해야만 한다는 마음이 생길 때 도전하자. 목표가 확실하다면 그 다음이 무엇이든 잘 끝을 맺을 것이다.

이직을 위한 나의 가이드라인

결심하기

앞서 짧게 얘기했지만 철저하게 이직을 하기 위한 결심이 필요하다. 왜 내가 이직을 해야만 하는지 생각해보기를 바란다. 그 이유가 보상일 수 도 있고 지금 속해 있는 환경일 수도 있다. 이유가 무엇이 되었든 지금 이직을 고려하게 만드는 것이 무엇인지 생각해보자. 이직을 하고 싶은 이유를 생각했다면 그 이유를 해결하기 위한 자신의 노력이 있었는지도 같이 생각해보자. 누구나 그렇듯 문제에 대한 회피는 편안하고 달콤하다. 그러나 대부분의 사람들은 문제를 겪고 이를 통해서 성장하는 것을 듣고 싶어하기 때문에 문제에 직면하고 이를 통해서 어떤 것을 얻었는지 경험해보는 것도 중요하다. 이 노력이 자신을 좋은 방향으로 이끌었다면 이직을 할 이유는 없지만 그렇지 못한 상황이라면 자신이 했던 노력과 그 결과를 잊지 말자. 직면한 문제들과 노력했던 경험들이 다음의 어떤 회사 또는 문화를 선택할지 도움을 준다. 물론 지금 회사나 팀이 가진 좋은 문화도 잊지 말자. 

이직을 결심한 이유

나는 7년하고 반 년을 다닌 첫 회사를 그만두었다. 누구에게는 짧은 시간일 수 있지만 개발 직군에서 7년이라는 시간은 결코 짧지 않다. 커피-챗이나 면접에서 간혹 왜 7년 넘게 재직했는지 질문을 받기도 한다. 7년 동안 내가 왜 한 회사에서 머물렀을까.

신입으로 첫 회사에 입사한 후에 이직을 처음 생각했던 시점은 약 3년차 때였다. 동기들과 같이 점심 식사를 하면서 이직에 대한 얘기가 나왔고 우스갯소리로 개발자 3년차가 이직의 적기라고 했었다. 이 때 나도 이직을 고려했었다. 3년차이기도 했었고 당시의 업무가 주먹구구식이 많았기 때문이다. 그럼에도 불구하고 이직을 하지 않았던 것은 아직 광고라는 도메인에 대해서도 부족하고 개발자로서의 성장의 기회가 있다고 판단했다. 그렇게 나는 회사에 머물렀고 다른 동기들은 떠났다.

우리는 알게 모르게 인생을 살아오면서 자연스럽게 새로운 환경에 노출된다. 유치원, 초등학교, 중학교, 대학교, 군대, 그리고 회사 등으로 3-5년 주기로 주변 환경이 지속적으로 변한다. 갑작스레 코로나 사태가 벌어지면서 나는 완전 재택 근무를 하게 되었다. 완전 재택이라는 새로운 근무 환경이 나에게 또 다른 즐거움으로 다가왔다. 그리고 당시에 진행하고 있었던 시스템 개편 작업을 마무리하고 싶었다. 그렇게 또 다시 2~3년을 머물렀다.

6년 차 개발자로서 살아가다보니 주변에서 이직을 성공한 동기들의 소식이 들려왔다. 더 좋은 조건으로 이직하는 얘기, 지금 내가 받는 보상보다 더 많은 보상을 받는 동기들의 얘기들을 들으니 다시 한번 이직이 하고 싶어졌다. 단순히 보상만 생각하니 막연하게 이직을 준비했다. 그러나 나는 이미 익숙해진 안정적인 삶에 취해 있었고 뚜렷한 목표가 없으니 잘 되지 않았다. 무엇보다도 개인적인 일로 제대로 집중할 수 있는 상태가 아니었다보니 더욱 더 이직에는 소홀했다. 

어떤 일을 하기 위해서는 동기가 필요하다. 한 글에서 읽었는데 이 동기는 크게 두 가지로 나눌 수 있다. 외적 동기와 내적 동기, 외적 동기는 외부의 요인에 의해서 동기가 생기는 것을 말한다. 외부의 어떤 규칙이나 힘에 의해서 반드시 해야하는 일들 또는 외부로부터 기대하는 보상을 바라고 하는 일들은 외적 동기다. 반대로 내적 동기는 철저히 자기 자신 내부에서 발생하는 동기다. 순수하게 내가 하고 싶은 일들이다. 나의 이직을 위해서 이미 외적 동기는 충분했다. 다른 동기들의 후한 보상에 대한 얘기, 더 좋은 조건을 제공하는 많은 회사들 얘기로 나는 이직을 원했다. 그런데 이 외적 동기들이 나에게 실질적으로 도움이 되지 않다는 것을 깨달았다. 이미 회사에서 충분한 보상을 받고 있고 나는 이 보상으로도 충분하지 않을까 생각하고 있었기 때문이다. 그럼에도 불구하고 무언가가 불편했다. 바로 내적 동기가 채워지지 않고 있었기 때문이다.

7년 넘게 같은 팀과 도메인에서 일하다 보면 새로움이 없었다. 물론 간혹 새로운 비즈니스 아이템 또는 개선 작업을 할 때마다 새로움도 느끼고 성취감을 느꼈다. 그런데 마지막 2년 정도의 시간에서는 성취감, 새로움 보다는 기계처럼 일했다. 내적 동기가 없고 외적 동기를 위해서만 일했다. 새로운 것을 하기 위해서는 단순히 나로부터 시작할 수는 없었다. 비즈니스와 긴밀하게 연결되어 있어 비즈니스 효과가 나지 않으면 더 이상 진행할 수 없는 환경이었다. 그렇다고 해서 비즈니스에서 새로운 아이템도 없었다. 비즈니스 확장이 더 없는지 새로운 서비스나 도메인은 없는지 리더와 얘기를 하면 리더는 계속해서 다음을 준비하고 있다고 했다. 그러나 그 리더가 사라지면서 내가 느낀 상황은 더 불확실했다. 거의 4년 넘게 같은 하나의 시스템을 유지보수하면서 이미 마음이 뜬 상태인지는 몰라도 모든 것이 나에게 새롭지 못했다. 나는 실제로 나에게 필요한 것은 변화라고 생각했다.

목표 설정하기

이직을 결심했다면 목표를 설정해야한다. 각자 원하는 것이 다르기 때문에 많은 회사들의 복지나 처우, 개발 문화들을 찾아보자. 그래도 실질적으로 느끼는 것은 대부분 팀마다 다르기 때문에 어떤 회사의 어떤 팀이 좋은지 주변을 통해서나 블*인드 등으로 한번 찾아보는 것도 추천한다. 해외를 고민한다면 나중에 따로 나에게도 알려주기를 바란다. 나 또한 해외를 가고 싶기 때문이다.

불명확한 목표와 기간

나의 이직 목표는 새로운 환경이었다. 따라서 어떠한 회사도 나의 이직 대상이 될 수 있었다. 반대로 생각하면 모든 회사를 고려해봐야 한다는 것이다. 다 고려하기엔 회사가 너무 많기에 단순히 유명한 회사로 제한했다. 몰두센네라카쿠배당토 이외에 블라인드에 자주 나오는 회사를 나열해서 준비했다. 물론 위의 회사를 다 지원하지 않았고 중간에 링크드인을 통해 제안 받은 회사도 고려했었다. 최종적으로 20개 정도의 여러 회사에 지원을 했다. 목표와 기간이 불명확하기 때문에 물리적인 내 시간과 자원도 많이 소비했지만 심리적으로도 불안정했다. 나처럼 막연한 목표와 기간 없이 도전한다면 이도저도 아니게 끝날 수 있다. 이직을 하기 전에는 반드시 목표와 기간을 정하길 바란다.

나는 위의 회사 중에서 내 나름대로 우선순위를 매겼다. 물론 다 너무 좋은 회사지만, 내가 가고 싶은 곳에 따라 순서는 반드시 필요했다. 순서를 매긴 후, 하위에 있는 회사 1-2곳을 먼저 일정을 잡았고 나머지 기간에는 하나의 회사에 집중할 수 있게 상위 순위와 하위 순위를 같은 일정으로 잡았다. 코딩테스트와 면접을 주기적으로 보면서 리듬을 잃고 싶지 않았고 힘의 강약 조절을 하고 싶어서 이렇게 잡았다. 

이직하기

대부분은 이직은 현재 회사 업무를 병행하면서 진행하기 때문에 선택과 집중이 필요하다. 적은 리소스로 최대한 좋은 결과를 내기 위해서는 내 현재 상태를 알고 부족한 부분을 보완하되 잘하는 부분을 부각시켜야한다. 그리고 무엇보다도 어떤 것을 접하든 부정적인 측면이 아니라 긍정적 측면을 바라보도록 하자. 그렇다고 막연하게 다 좋다라고 생각하지 말자. 

이력서 작성하기

개발자 이력서를 구글에 검색하면 이미 많은 내용이 있다. 그 와중에 많은 도움을 받았던 글들을 소개하고자 한다. 

나도 위의 글들을 참고해서 내 이력서를 작성했다. 작성한 이력서를 들고 주변 몇몇 사람에게 전달해서 피드백을 받아 고쳐나갔다. 6번째의 이력서를 작성하고 나서야 끝이났다. 처음에는 내가 했던 업무보다는 비즈니스 효과에 대해 초점을 맞췄던 것 같다. 그런데 그렇게 해서는 개발자로서의 역량을 잘 나타내지 못했던 것 같다. 그래서 비즈니스 효과에 대해서는 최대한 줄이고 다른 지표로 나타내려고 애썼다. 

이력서 작성의 핵심은 단순하다. 내가 어떤 사람이고 어떤 일을 해왔는지 나타내는 것이고 이를 통해 읽는 사람이 흥미를 느끼게 하는 것이다. 개발을 하다보면 결과적으로 문제가 되는 부분은 트레이드 오프 상황이다. 이 상황에서 어떤 것을 택하고 어떤 것을 포기하면서 문제를 해결해 나가는 것이다. 이 부분에 대해 질문이 나올 수 있도록 작성하는 것이 도움이 된다. 물론 이러한 질문에 대답할 수 없다면 작성하지 않는 것을 추천한다. 면접에서 많은 실패를 겪고 나서 깨달았다.

코딩 테스트 준비하기

신입으로 준비했던 지식으로 다시 코딩 테스트를 보니 아무것도 못했다. 다시 공부가 필요했다. 이전에는 막연하게 내가 모든 문제를 다 풀어야겠다는 생각으로 접근했다면 이번에는 달랐다. 나는 알고리즘 문제 풀이 대회를 준비하는 것이 아니다. 단순히 이직을 위해 알고리즘 문제 풀이를 해야하는 것이 초점을 맞췄다. 신입으로 준비했을 때에는 ‘알고리즘 문제 해결 전략' 책을 봤었다. 그런데 이번에는 유튜브 채널 바킹독으로 공부했다. 물론 처음부터 끝까지 다 듣진 않았고 핵심만 골라들었다. 이분 탐색, DP, 그리디 등의 강의 들었다. 모든 강의가 그렇듯 자기에 맞는 강의가 있겠지만, 이 채널은 확실히 도움이 많이 되었다. 

이 문제들은 한번씩 간단하게 풀어 볼만하다. 다 풀지 못해도 괜찮다. 그런데 이 문제들을 다 풀 수 있다면 이미 코딩 테스트를 할 수 있는 레벨로 생각한다.

면접 준비하기

확실히 말할 수 있는 것은 아무리 면접 준비를 해도 경험해보지 않으면 모른다. 지금 당장 면접을 어떻게 준비해야 할지 모른다면 바로 면접을 볼 수 있도록 지원부터 하자. 실전으로 부딪혀서 경험해봐야 무엇이 필요한지 알 수 있다.

나는 면접을 준비하기 위해서 예상 질문들과 답변들을 작성했다. 나에 대한 질문부터 일반적인 주제, 그리고 이력서 기반으로 나올 수 있는 질문들을 작성했다. 무엇보다도 이러한 질문들을 생각하고 답변하면서 자기 자신의 생각을 확고히 하는 과정이 필요하다. 중구난방으로 복잡한 상태보다는 확실히 내가 누구인지, 어떤 생각을 가지고 있는지만 확실히 정리하면 좋아보인다. 

  • 왜 이직을 하려고 하는가?
  • 이직을 고민한 이유를 해결하기 위해 어떤 행동을 했는가?
  • 이직이 아닌 회사 내의 부서 이동은 고려해보지 않았는가?
  • 바라는 회사 또는 개발 문화가 있는가?
  • 지원한 회사 또는 팀에 합류한다면 어떤 목표를 이루고 싶은가? 무엇을 할 것인가?
  • 최근에 공부한 내용이 있다면 어떤 것인가?
  • 업무를 진행하면서 기술적으로 가장 도전적인(인상적인) 경험이 있는가?
  • 개선 작업 중에서 기억에 남는 작업이 있는가?
  • 운영하고 있는 시스템의 구성과 스펙은 어느 정도인가?

위의 질문들에 대해서 간단하게 생각해보자.

시스템 설계 면접은 접근 방법이 조금 다르다. 시스템을 설계하면서 내가 가진 무기를 보여줘야하기 때문에 자신이 잘 알고 있는 기술들을 이용해서 설계하는 것이 좋다. 설계 면접을 준비할 때 여러 강의와 책, 또는 블로그를 보면서 준비하는데 모르는 기술이나 개념이 있다면 최대한 이해를 하도록 하자. 막연하게 ‘강의에서 그리고 책에서 사용했으니깐 나도 설계 면접에서 사용해야지’라는 생각은 오히려 독이 된다. 그리고 모든 기술은 만능이 아니다 라는 것을 명심하자. 질문을 받을 포인트는 해당 기술을 사용하면서 발생할 수 있는 트레이드 오프 상황이기 때문에 이에 대해서 사전에 생각해보는 것도 좋다. bytebytego 에서 좋은 자료들이 있으니 필요하면 한번 살펴보자.

이직 후기

솔직함이 반드시 좋진 않다.

누군가는 솔직함이 장점이라고 생각할 수 있다. 나 또한 솔직하고 명확해야 좋을 줄 알았다. 그러나 솔직함이 다 좋은 것은 아니다. 내가 부정적으로 생각하는 것들을 애써 그대로 표현할 필요는 없다. 솔직하게 말하는 것보다는 긍정적으로 다시 생각해서 말하는 것이 좋다. 이는 면접 뿐만 아니라 인간 관계에서 필히 지켜할 덕목이라 생각한다. 애써 말하지 않음으로 해서 좋은 상태를 유지할 수 있다면 말하지 말자. 

기술 선택에서 있어서 관여하지 않았더라도 충분한 이해를 바탕으로 임해야한다.

기술 선택에서 있어서 많은 부분은 기존에 사용하던 기술을 그대로 사용하거나 다른 사람의 의견을 그대로 따를 수 있다. 그 기술에 대해 부족해서 그대로 따랐다면 그 이후에라도 해당 기술에 대한 장단점을 이해해야 한다. 그리고 그 이해를 바탕으로 현재 시스템이 어떠한 장점이 있는지, 어떠한 부분은 약한지 트레이드 오프를 항상 생각해야 한다. 이 부분을 모른다고 그냥 넘어가지 말자. 나처럼 후회하는 날이 온다. 

‘좋은 개발자는 적재적소에 합리적인 선택, 최선의 선택을 하기 위해서는 좋은 무기를 들고 있어야한다.’ 좋은 개발자는 다양한 기술을 사용할 수 있어야 한다. 아니 적어도 해당 기술에 대해 장단점은 파악하고 있어야 한다. 그래야 어떤 문제를 발견할 수 있을 때, 해결할 수 있는 기술을 선택할 수 있기 때문이다. 아무것도 모르는 상태라면 아무것도 할 수 없다. 예를 들어 내가 고기를 익혀야 하는 문제 직면했다고 하자. 단순히 내가 그 동안 가스레인지를 통해서 익혔다면 계속해서 가스레인지를 이용할 것이다. 그런데 고기를 익힐 수 있는 방법은 오븐, 직화 구이 등 다양하게 있고 해당 문제의 요구 사항이 불맛이 나는 직화 구이 스타일이라면 가스레인지보다는 직화 구이 방법을 선택하는 것이 더 합리적이다.

나는 좋은 기회를 잡아 이직을 하게 되었다. 모든 것이 다 운이 있어야 가능하지만 운이라도 얻기 위해서는 기회가 왔을 때 준비되어 있어야 한다. 이직이라는 것은 한 순간에 끝날 수 없다. 평소에 조금씩 준비하자. 나 또한 다시 이직을 위해 공부하고 경험을 쌓아나갈 것이다. 무엇보다도 중요한건 이러한 경험들을 그냥 지나치는 것이 아니라 온전히 나의 것으로 만들어야 한다는 것이다. 

데이터 엔지니어로 취업이나 이직을 준비하는 사람이라면 이 글의 다소 부족한 내용으로 실망할 수 있다. 그러나 데이터 엔지니어든 백엔드 엔지니어든 결국에는 같은 맥락이라고 생각한다. 다만 사용하는 기술이 다르다거나 직면할 수 있는 문제가 다르다. 나 또한 이번에 데이터 엔지니어로서의 첫 시작이기 때문에 이해해주기를 바란다. 

끝으로 이 글을 읽은 모든 사람들이 각자 원하는 회사에 들어가기를 바란다. 화이팅 💪🏼