퇴사를 결정하고 이직을 준비하며
이 글은 5년 반동안 회사를 다녔던 한 개발자가 퇴사를 결정하고 이직을 준비하는 과정을 간략하게 쓴 글이다.
퇴사 결정
2020년 5월 초 최종 퇴사를 결정하게 되었다.
지난 5년 반 동안 동고동락을 함께한 회사였기에 결정을 내리기 쉽지 않았지만 크게 2가지 이유가 작용했다.
우선 회사가 만들어가는 서비스의 모습이 내가 원하는 모습과는 다르게 변해갔다. 처음 회사에 다니기로 결정했을 때 서비스의 로드맵은 내가 생각하기에 굉장히 인상적이고 매력적이었다. 하지만 현실적인 문제들을 부딪히면서 서비스의 모습은 예상과 다르게 변해갔고 서비스를 사랑하는 나의 마음이 점점 식어갔다.
그리고 개발자로써 성장의 한계를 느꼈다. 대부분의 스타트업 회사가 그렇듯 결과물을 만들어내기 위해 내부 체계와 처리 과정이 굉장히 간소화되어있거나 제대로 되어 있지 않은 경우가 많았다. 또한 많은 기능에 대해 일당백으로 처리해야 했기에 내가 관심있는 분야에 대해 더 높은 차원의 기술이나 지식을 실무에서 적용하기 어려웠다. 무엇보다 추천 시스템과 검색 시스템을 혼자 도맡아 개발하면서 더 나은 방향으로 개선하기 위해 논의하고 협력하는 팀원이 없었다는 것이 힘들었다. 이러한 갈증은 점점 심해졌고 체계가 잘 잡혀있고 더 큰 곳에서 뛰어난 사람들과 같이 일해보고 싶다는 생각을 했다.
여튼 이러한 이유로 퇴사를 결정하긴 했지만 실행에 옮기는 것은 생각보다 쉽지 않았다. 나름 최선을 다했고 열렬히 사랑했으며 주인의식을 가지고 일했기에 회사에 대한 미련이 남아있었고 그동안 개발자로써 더 제대로된 결과물을 만들어내지 못한 후회가 밀려왔기 때문이었다.
또한 30명 남짓있던 회사에서 커다란 개발 조직을 가지고 있는 곳으로 이직한다고 했을 때 내가 부족하진 않을지 두려움도 있었다.
그래도 30대 중반이 된 내가 지금 결정을 내리지 않으면 내가 원하는 경험을 하지 못할 것이라 생각했고 그렇게 회사에 사직 의사를 밝혔다.
이직 준비 시작 그리고 경력 기술서 작성
그렇게 퇴사를 결정하고 이직을 준비하기 시작했다.
우선 전반적인 면접 과정을 살펴보았다. 직군마다 약간의 차이는 있었으나 대체적으로 경력 개발자 채용은 서류 심사 - 코딩 테스트 - 기술 면접 - 컬처핏 면접 - 합격의 순서로 이루어지는 것을 알 수 있었다.
그 후에 한 일은 나는 개발자로써 어떤 포지션을 꿈꾸고 가장 좋아하는가를 스스로 되돌아보는 것이었다. 그 결과 최근 너무 재미있게 일을 했던 검색 서비스 개발자나 추천 시스템 개발자로 이직을 해야겠다 다짐했다.
이 과정에서 나는 3년 반동안 사업을 하면서 풀스택 개발자로 그 후 2년은 안드로이드 개발자로 그리고 최근 3년 반동안 검색 및 추천 시스템 개발자로 지내왔는데, 서비스를 만들어가고 회사에 도움이 되는 방향으로 개발을 해오다보니 명확한 커리어를 만들어나가지 못했던 것을 알 수 있었다. 여러 가지 일을 할 줄 아는 사람이 필요한 스타트업에서는 선호할만한 경력이었지만 규모가 있고 특정 포지션이 필요한 개발자를 원하는 기업에서는 선호하지 않을 것이라 생각했고 명확한 커리어를 쌓지 못한 것에 후회했다.
이를 토대로 경력 기술서가 작성되었고 경력 기술서는 경력 중 내가 가고 싶은 포지션에 관련된 내용이 주를 이루었다. 경력 기술서를 작성할 때는 경력을 파악할 수 있는 대략적인 정보와 내가 해당 포지션에 어필할 수 있는 프로젝트에서 어떤 역할을 수행했는지, 어떤 기술 스택을 사용하였는지, 그래서 성능이나 KPI가 얼마나 상승했는지 여부를 기록하려고 노력했다.
이 때는 시기적으로 낮에는 회사 일을 해주어야 했고 저녁부터 새벽까지는 이직에 대한 정보를 구하고 경력 기술서를 작성해야 했기 때문에 체력적으로 많이 힘든 상황이었다. (회사를 다니면서 이직을 준비하시는 분들에 대해 다시 한번 경의를 표한다.)
경력 기술서는 본인이 프로젝트를 마무리했을 때마다 업데이트하는 것이 바람직하다고 느꼈다.
Job Description과 입사 지원
경력기술서가 완성되고 내가 평소에 관심을 가지던 서비스들을 중심으로 내가 원하는 포지션을 채용하는지 일일히 확인했다. 보통은 채용 사이트를 많이 이용하는데 나는 평소에 선호하고 있었던 서비스가 있었기 때문에 이 과정은 많은 시간이 필요하지 않았다. 생각보다 추천 시스템 개발자는 많이 채용하지 않았고 검색 시스템 개발자는 여러 서비스에서 채용 중이었다. 단, Job Description과 요구조건 및 우대조건이 약간 달랐는데 내가 사용했던 기술 스택과 유사한 기술 스택을 가진 곳을 우선 선별했다.
이제 지원만 하면 되었는데 이 때부터 심적 스트레스가 시작되었다. 서류 심사, 코딩 테스트, 기술 면접 등 누군가에게 평가를 받는 것이 두려웠고 준비가 되어있지 않아 불안감이 지속되었다. 또한 한 가정의 가장으로써 경제적인 부담을 가지고 있었고(고맙게도 와이프는 자신이 버는 돈으로 당분간 생활이 가능하다며 응원해주었다.) 이직 시도가 장기화되서 가족에게 피해가 가는 것에 대한 걱정이 들었다. 이 때부터 개인적으로 친한 개발자 선배와 자주 통화하면서 마음을 다 잡으려 노력했다.
일단 코딩 테스트를 통과해야 했기에 한동안 보지 않았던 기본적인 알고리즘, 데이터 스트럭쳐 등에 대해 다시 살펴보고 기초를 복습하는 일부터 시작했다. 이렇게 간단한 것이었는데 대학 때 왜 더 열심히 하지 않았나 왜 그때는 그렇게 어렵게 느껴졌었는지 허탈하기도 하고 만감이 교차했다. 또한, hackerrank나 codility와 같은 온라인 코딩 문제 서비스를 통해 코딩 테스트에 대비했다.
위와 같이 기본적인 공부를 시작하면서 틈틈히 하나씩 입사 지원을 시작했다. 최대한 일정이 겹치지 않게 몇 일 간격으로 입사 지원을 진행했다. 회사 업무와 면접 준비를 동시에 하는 것도 힘든데 여러 개의 면접이 중복되면 면접 하나하나에 집중하지 못할 것이라고 생각했기 때문이다.
선배의 조언
이직 준비를 하면서 개인적으로 친한 개발자 선배와 많은 대화를 나누었다. 힘들 때는 어떤 부분이 힘든지 토로하기도 하고 조언이 필요할 때는 조언을 구했다.
그 많은 이야기 중 아래의 조언들이 가장 기억에 남는다.
- 면접을 최대한 많이 봐라.
- 세상에 나보다 뛰어난 개발자는 너무 많다. 하지만 그런 모습에 위축되면 개발자를 할 수 없다. 내가 할 수 있는 최선을 하면 된다.
- 무엇을 했는지 어필할 때 STAR를 이용하면 좋다.
- 실력이 좋다고 무조건 붙고 실력이 나쁘다고 무조건 떨어지는 것이 아니다. 면접은 운이 상당부분 작용한다.
우선 면접을 최대한 많이 보라고 했다. 면접을 최대한 많이 보면 면접에 대한 두려움이 적어지고 해당 포지션에서 원하는 지식의 정도나 질문 패턴에 대해 잘 알 수 있을 것이라고 했다. 즉, 시도를 많이 해서 하나라도 얻어 걸려라라는 의미가 아니라 실패의 경험을 두려워하지 말고 실패를 통해 필요한 정보를 얻으라는 뜻이었다. 실제로 면접을 한 두 차례 진행하면서 깨달은 바가 있었고 면접에 대한 압박감이 점점 감소하는 것을 경험했다.
두 번째는 이직 준비를 하면서 각종 블로그나 프로젝트에 대한 내용을 보며 자괴감에 빠져있던 나에게 선배가 해준 말이었다. 요즘은 워낙 어렸을 때부터 준비해온 어린 개발자들도 많고 지속적으로 본인의 커리어를 관리하며 사이드 프로젝트를 운영하거나 주요 오픈소스 프로젝트에 참여하시는 개발자분들이 많다. 이런 분들의 블로그나 프로젝트를 보면 난 그동안 뭐하고 살았나라는 자괴감이 들었다. 실제로 저 정도 커리어를 쌓지 못할 것이라면 개발자를 그만두어야 하는 것 아닌가 하는 생각도 들었다. 선배는 나에게 개발자 중에는 그런 생각 조차 못하고 개발하시는 분들도 있고 네임드 개발자도 모든 것을 다 아는 신이 아니기 때문에 크게 걱정하지 않아도 된다고 위로해주었다. 그리고 그런 것들을 느꼈을 때 내가 무언가 하나씩 해간다면 그런 사람들에 더 가까워 질 수 있을 것이라고 조언해주었다.
그 다음으로 면접을 볼 때 말을 더 조리있기 전달하기 위한 방법으로 STAR(Situation, Task, Action, Result)에 입각해서 말하는 연습을 하기를 권장했다. 말을 할 때 소위 기승전결이 있는 구성을 만들기 위해 문제 상황을 설명하고(State), 문제 상황을 해결하기 위한 작업에 대해 이야기한 후(Task) 내가 실제로 실행한 행동(Action)과 그에 따른 결과(Result)의 순서로 에피소드를 설명하면 대다수의 문제해결 과정을 조리있게 설명할 수 있었다.
마지막은 제일 와 닿았던 조언으로 면접은 운이다라는 말이 있었는데, 내가 아무리 잘 준비하더라도 면접관을 잘못 만나면 면접에서 떨어질 것이고 준비가 미흡하더라도 면접관을 잘 만나면 합격할 수 있다고 했다. 사실 이 말은 당연한 말처럼 들리자만 자세히 내용을 곱씹어보면 많은 내용을 함축하고 있다. 면접관이 당락에 중요한 영향을 미치기 때문에 내가 준비과정을 소홀히 해도 붙을 수 있다라는 말이 아니라 내가 행여나 떨어지더라도 내가 부족해서가 아니라 면접관 때문이라고 스스로 위로할 수 있다는 말에 가깝다. 즉, 면접의 결과에 일희일비하면서 멘탈이 흔들려서는 안되고 떨어지면 면접관이 나랑 맞지 않아서 떨어진 것이니까 부족한 부분을 메꿔서 다른 면접을 보면 된다는 의미가 더 강했던 것 같다.
지금 와서 돌이켜보면 멘탈 케어에 대한 조언이 대부분이었고 나에게는 그런 조언들이 많은 도움이 되었던 것 같다. (이직을 잘 마무리하면 형에게 맛있는 소고기를 사주어야겠다.)
면접내용 및 결과
나는 현재까지 4개의 기업에 지원했다. 정확한 기업을 밝히긴 어렵지만, 이름만 말하면 대부분이 알만한 곳으로 지원했고 각각 결과가 모두 달랐다.
첫 회사는 linkedin에 등록되어있는 내 프로필을 보고 헤드헌터가 연락을 해 지원하게 되었다. 채용 사이트를 통해 지원을 하게되었고 서류 통과 후 코딩 테스트를 보았다. 이 코딩 테스트가 내가 처음 본 코딩 테스트였는데 codility에서 3시간동안 3문제를 풀어야 했다. 이를 위해 binary search나 sorting과 같은 간단한 알고리즘부터 재귀와 DP 문제까지 공부를 했다. 테스트까지 시간이 충분하지 않아 공부를 많이 하지는 못했고 기대반 설렘반으로 테스트를 진행했다. 테스트 문제는 생각보다 어렵지 않았는데 문제를 너무 어렵게 생각해서 3시간을 다 채워서 모두 풀었다. 다 풀고 나서 다시 문제를 보는데 내가 실수한 부분들이 보였다. 굳이 재귀나 DP를 안써도 되는 문제인데 사용했다던지, 복잡도를 더 줄일 수 있었는데 줄이지 못한 부분이 보였다. 그래도 coverage test를 다 통과했고 나름 문제를 다 풀었으니 기대했으나 불합격 통보를 받았다. 지금 생각해보면 별도의 에디터에서 코딩한 후 결과만 복붙했던 것도 좋지 않았던 요인 같고 코드의 최적화도 미흡한 부분이 많았다. 그래도 생각보다 풀 만한 문제가 주어져서 자신감을 가질 수 있는 경험이었다.
두 번째 회사는 외국계 게임회사로 머신러닝을 통해 각 국가별 사용자 Feature를 추출하여 게임을 추천하는 추천 시스템을 개발하는 포지션 채용을 진행하고 있었다. 하지만 서류 심사에서 탈락 통보를 받았는데 JD에서 요구하고 있는 사항 중 딥러닝에 대한 경험이 전혀 없어서 떨어진 것으로 보였다. 추천 시스템 개발자로 성장하기 위해서는 딥러닝에 대한 이해와 최소 하나의 프레임워크(tensorflow, keras, pytorch, mxnet 등)를 다루어야 함을 알 수 있었다.
세 번째는 020 서비스 검색 시스템 개발자로 지원하였다. 서류 심사를 통과하고 대면 기술면접이 진행되었는데 첫 대면 면접이어서 굉장히 긴장했었다. 기술면접에서는 간략한 손코딩과 주로 내가 진행했던 업무 및 사용했던 기술에 대해 이해하고 있는지 물어보는 식으로 진행되었다. 엄청나게 디테일하게 질문하지는 않고 원론적인 수준에서 이해하고 있는지 물어보는 수준이었던 것으로 기억한다. 중간중간 잘못 대답한 부분도 있었지만 전체적으로 나쁘지 않게 본 것 같아 기대했는데 역시 기술면접은 통과했다.
이 후 컬처핏 면접이 진행되었는데 내가 생각했던 컬처핏 면접과는 다르게 진행되었다. 내가 생각했던 컬처핏 면접은 기존의 경험이나 새로운 문제에 대해 해결하는 방법을 물어본 후 우리 회사에 들어와서 잘 적응할 수 있을지 체크하는 면접이라고 생각했는데, 전반적으로 굉장히 대답하기 어려운 질문들이 많았고 면접관이 생각과 다른 대답이 나오면 본인이 원하는 답변을 들을 때까지 유도하는 느낌이 들었다.(대답하기 어려운 질문이라는게 엄청난 지식을 요구한다는 의미가 아니라 정답이 없어 서로간에 의견이 다를 수 있는 문제를 의미한다.) 중간 쯤 부터는 이게 말로만 듣던 압박면접인가 하는 생각도 들었다. 여튼 전반적으로 대답을 잘 못했다고 생각했고 면접관도 본인이 원하는 답변을 많이 듣지 못해 아쉬워하는 모습이 보였다. 여러가지 상황으로 보건데 떨어질 가능성이 높아보였다. 그런데 며칠 후 최종합격을 통보받았다. 예상치 못한 답변에 당황스러웠지만 생각보다 짧은 시간 내에 첫 합격을 하게 되어 굉장히 기뻤다.
마지막 회사는 국내에서 추천을 하는 스타트업 중 유명한 회사중 하나로써 추천 시스템 개발자를 모집하고 있었다. 서류 통과 후 온라인 기술면접이 진행되었고 내가 사용했던 개발언어와 프레임워크에 대한 이해, 업무를 수행하는 태도에 대한 질문이 주로 이루어졌다. 대답을 일부 제대로 하지 못했는데도 면접 분위기가 굉장히 좋았으며 면접 후 기분이 참 좋았던 면접으로 기억에 남는다. 현재 기술면접을 통과하여 최종면접을 앞두고 있다.
많은 회사를 지원하고 면접 경험이 많지는 않았지만, 짧은 시간동안 속앓이도 하고 느낀 점도 많았다. 합격한 곳에 다니게 될지 최종면접을 보고 결정할지 아니면 또 다른 곳을 도전할 지 고민중이지만 처음 이직 준비를 시작할 때보다는 마음이 많이 가벼워진 것 같다.(이직 준비하면서 5kg가 빠졌다…)
이직 준비를 하고 있는 또 할 예정인 모든 개발자가 본인이 원하는 좋은 결과를 얻길 바라며 글을 마친다.