8 minute read

1편
2편
3편
4편

지난 여름 동안 계획에 없었던 이직 루트를 타게 되었습니다. 그 과정에 얻은 게 많아서 이게 다 끝나면 어떤 형태로든 꼭 공유해야겠다고 생각했습니다.

그러니까 이 글은 프로 이직러 분들 말고, 저처럼 단 한 번도 이직을 준비해 본 적이 없는 분, 특히 현 직장도 코딩 인터뷰를 진행한 적이 없는 분들이 재미있게 읽었으면 하는 마음으로 씁니다. 왜냐면 제가 그런 사람이었는데, 제게 이직을 하는 사람들은 다 너무나 준비된 사람들인 것 같거든요. 근데 저처럼 우당탕탕 덜그럭덜그럭 굴러간 이직도 있으니까 다들 한번 시도해봐도 괜찮겠다고 생각했어요. 그래서 무슨 질문이 나왔는지 이런 거 말고 (그런 건 어차피 보안상 말하지도 못할 거고) 각 단계에서 제가 어떤 생각이 들었는지, 어떻게 준비했는지, 이런 걸 써보려고 합니다. 요새 유행하는 제목 풍으로 쓰자면 리트코드 가입부터 시작하는 이직일기 정도가 될 것 같네요.

이야기의 시작

사실 지난 2월부터 조금씩 유학 준비를 하고 있었습니다. 아직 대단하게 준비를 시작했던 단계는 아니었고, 2월부터 영어 공부를 다시 하기 시작해서 5월 초에 토플 시험을 본 후에 GRE 공부를 시작한 상태였어요. 와중에 5월 중순쯤에 링크드인을 통해서 메시지가 왔어요. 혹시 Google 대만 오피스에서 일해 보는데 관심 없냐고요. 생각도 못 해본 거지만 이야기 들어서 나쁠 건 없겠다고 생각했죠. 있다고 했어요. 그랬더니 얼마 후에 구글 채용 페이지에 있는 잡 디스크립션 몇 개가 도착했는데, 사실 거기 있는 것 중에는 그렇게 하고 싶은 일이 없었거든요. 그래서 구글 채용 페이지에서 타이완 오피스 채용 정보를 보다가 관심 있는걸 발견해서 ‘네가 보내준 거 다 봤는데 그것들보다 요 포지션이 내가 해온 것들이나 관심사랑 더 맞는 것 같아. 이거로 진행해볼 수는 없을까?’하고 보냈습니다. 하고 답장을 보냈습니다. 그랬더니 알았다고 하고 일주일쯤 후에 새로운 담당자가 해당 포지션 담당자라면서 연락을 해 왔어요. 그리고 30분 동안 chat을 하자고 하더라고요. 이게 인터뷰라고는 생각을 안 해서 그냥 정말 편하게 이야기했습니다. 30분 중에 15분 이상은 거의 구글이 대만에 새로운 개발 허브를 짓고 있고 어쩌고 해서 약간 대학이나 기업 홍보 영상의 통화버 젼을 듣는 기분이었어요. 하여튼 여차저차 제 소개도 하고 하다가 다음을 진행해보기로 했습니다. (이때까지만 해도 금방 떨어지겠지 하고 이렇게 길어질 줄은 몰랐는데…)

영문 이력서 쓰기

진행을 위해 영문 이력서를 써야 하는 상황이 발생합니다. 기본적으로 HR 담당자들이 이력서를 요구하기도 하고 애초에 지원 링크를 보내주는데 거기도 이력서 제출하는 칸이 있고요. 근데 한국어 이력서도 없는 제가 영어 이력서를 어떻게 가지고 있었겠어요. 당연히 백지에서 써야 했습니다.
구글에 how to write resume 검색하는 것부터 시작했죠. 근데 사실 그렇게 도움이 되지는 않았습니다. 그런 콘텐츠는 이제 막 대학을 졸업하는 취업 준비생을 위한게 많았고 저는 연차 상 이제 와서 대학 때 어디 HCI 컨퍼런스 자원봉사를 했습니다- 이런 걸 쓸 수는 없지 않겠어요? 그러면 이제 회사에서 한 내용을 써야 하는데 업무가 눈에 보이는 형태로 세상에 나오는 직업이면 괜찮겠지만 그렇지 않은 경우는 구체적으로 어떤 과제를 했는지 쓰기도 힘들더라고요. 난 작년에 한 건데 아직 세상에 발매는 되지 않았고 뭐 그런 거죠…
그래서 링크드인에서 지금 일을 하는 사람들의 이력서를 구경하다가 발상의 전환을 하기로 했습니다. 특정 기간 동안 뭘 했는지 과제 단위로 서술할 수 없다면 반대로 매일매일 무슨 일을 어떻게 하는지 서술해보기로요. 전혀 다른 직업의 사람들이면 ‘이게 무슨 소리야’ 싶겠지만, 매일매일 비슷한 일을 하는 사람들은 아 어떤 거 하는 사람이구나 하고 알아들을 수 있게요.
이 아이디어를 떠올린 건 사람들이 Source Control 툴(git 같은)을 사용한다는 것도 이력서의 skill란에 써두더라고요. 그래서 그걸 좀 더 발전시켜서 이력서 전반에 적용해보기로 했습니다. 그리고 맨 앞부분에 highlight 소개 부분은 지원하기로 한 포지션에 특화되어서 그 포지션에 중요할 것 같은 스킬 위주로 다시 한번 더 적었습니다. 그렇게 완성된 게 지금 링크드인에 등록된 이력서의 이전 버젼입니다. 지금은 맨 위의 하이라이트 부분이 좀 더 제네럴 하게 바뀌어있어요. 이건 앞으로도 또 쓰게 된다면 포지션별로 하이라이트 부분은 다시 쓰면 되겠다고 생각하고 있습니다.
은근 쓰다 보니 한 페이지가 가득 차서 현 직장의 가장 초기 경력이나 education은 넣지 않았는데 보다보니 두 페이지까지는 이력서가 늘어나도 괜찮은 것 같아서 앞으로 경력이 더 늘어나면 두 페이지 써야겠다고 생각하고 있습니다. 그러고 보니 education 없이도 지금까지 잘 쓴 거 보면 여기 서술된 회사들은 학력은 중요하게 보지 않는 것 같습니다. (컨텍하는 HR 담당자가 볼 수도 있긴 하겠지만…)

리트코드 가입하고 인터뷰 공부하기

여기부터가 가장 흥미로웠던 지점인데, 과정을 진행해보기로 하고 지원서를 쓰기로 한 시점에 그쪽에서 공부를 해야 하는 material을 같이 보내왔어요. 어떤 어떤 알고리즘과 자료구조를 공부해라 뭐 이런 내용이요. 가장 기본적으로는 네 옛날 교과서부터 다시 봐라 하는 식. 사실 이게 전체 과정에서 가장 흥미로웠습니다.
우리나라 채용은, 특히 저는 전형적인 대기업 공채들 위주로 겪어봤기 때문에 회사가 지원자에게 면접을 준비하는 방법을 가이드해준다는 것 자체가 너무 신기했거든요. 그리고 저한테 직접 리트코드 가입해서 문제를 풀라고 권유했습니다. 이 이후 과정에선 가끔 통화할 때 리트코드 몇문제나 풀어봤냐고 개수를 체크하기도 했어요. 정말 1:1로 코칭 받는 기분이었습니다.
여튼 이 시점쯤에 리트코드를 가입합니다. 처음엔 영어가 부담스러워서 백준으로 할까 했는데 입출력 설정하는 게 너무 힘들기도 하고 (평소에 입출력을 하지 않음) 모든 기준이 리트코드가 되니까 저도 굳이 백준에서 할 이유가 없어서 자연스럽게 넘어갔습니다.
인터뷰를 준비하기 전에 물어보는 것 중에 저한테 어떤 언어를 쓸 건지 물어봤는데 생각 없이 C언어를 가장 자주 쓴다고 말했습니다. 이건 제 실수였다고 생각합니다… 자료구조가 풍부한 언어를 쓰거나 아니면 문제 보고 결정하겠다고 하는 게 나을 것 같아요.
본격적으로 문제 풀이를 시작하기 전에 기초 공부부터 다시 해야겠다고 생각해서 처음엔 주제별로 구글링해서 공부하다가 유튜브에서 한국외대 신찬수 교수님이 작년에 올려두신 자료구조 강의를 접하게 됩니다. 그래서 이 강의와 같은 채널의 알고리즘 강의를 정주행합니다. 중간중간에 심화 과정은 넘어가면서 듣긴 했어요. (시간에 쫓기는 사람이었기 때문에) 처음 공부하는 내용 아니니까, 아 이런 게 있었지 하면서 까먹고 있던 옛 기억을 되살려줍니다. 이건 꼭 필요했다고 생각하는데 인터뷰에서는 문제만 풀면 되는 게 아니라 설명도 해야 하기 때문에 기초 개념들 다시 정리하고 가는 작업은 유의미했던 것 같습니다.
그러고 나서는 열심히 리트코드 문제를 풀었습니다. 무슨 구글 2020 인터뷰 어쩌고 하는 리스트를 풀어서 순서대로 풀었었는데 이건 솔직히 공신력도 모르겠고 비효율적이었던 것 같긴 해요. (Don’t 리스트에 넣겠습니다) 풀다가 모르는 게 있으면 discuss 탭도 보고 구글링해서 다른 사람들이 푼 것도 보고 그러다가 유튜브에 해설 영상 올리는 채널들이 있는 것도 알게 되어서 그런 영상도 보았습니다. 제가 도움이 되었던 건 TECH DOSE라는 채널입니다. 연관된 문제끼리 관련 영상으로 묶여있어서 쭉 따라가기도 좋았지만 일단 제가 가장 쉽게 알아들을 수 있는 영어 발음이란 것이 주요했습니다. 다른 분들도 본인에게 맞는 채널 선택해서 도움받으시면 좋을 것 같네요.

멘붕의 첫 번째 테스트와 2nd chance

처음에 리트코드를 시작하게 되면 항상 한 번에 패스를 하지 못하더라고요. 수많은 edge case들 때문이었습니다. 이걸 몇 번 겪고 아니까 시작하면 맨 앞에 edge case 예외처리부터 생각하게 되더라고요. 예를 들면 배열이 들어올 건데 그 길이가 알고 보니 0이라거나…
여튼 그 정도 준비가 된 상태에서 첫 번째 인터뷰를 보게 되었고, 그건 정말 ‘멘붕’, ‘흑역사’ 그 자체였습니다. 지금 생각해보면 준비했던 것에 비해 난이도가 높았던 것은 아니었는데 코딩 인터뷰 경험이 전무하고 코딩 테스트만 좀 봤던 사람이 갑자기 실시간으로 말을 하면서 코딩을 해야 하는데 그걸 또 영어로 해야 하다니 당연히 말이 꼬이기 시작하고 그럼 black out 되어서 미궁에 빠지고 잘할 수가 없었던 거죠.
딱 하나 좋았던건 구글 인터뷰가 구글 드라이브의 docs로 본다고 유명했는데 그사이에 달라졌는데 아예 docs는 아니었습니다. 최소한의, 정말 최소한의 syntax는 색칠해주는 시스템이었어요.
1주일 후 쯤 연락을 받는데 원래 같았으면 탈락인데 그냥 봐도 제가 너무 긴장했던 것처럼 보였는지 2nd chance를 줄지 논의 중이라고 하더라고요. 결국 며칠 후 한 번 더 하자는 연락을 받게 되어서 잠시 놓았던 인터뷰 준비를 다시 시작했습니다. 그 전에 이번 인터뷰의 문제를 분석해보았죠.

문제점 분석과 대책

첫 번째 테스트를 망하면서

  1. 영어로 설명을 하면서 코딩하는 연습을 해야 한다.
  2. C언어로 인터뷰 준비하는 건 너무 진도가 더디다.
  3. 좀 더 체계적으로 문제를 연습해야 할 필요가 있다.

라는 사실을 느꼈습니다. 이 문제를 해결하기 위해서

  1. 그냥 문제를 풀게 아니라 mock interview를 해야 한다.
  2. 언어를 바꾸자.
  3. 내 상태를 분석해줄 수 있는 서비스가 필요하다.

하는 결론에 도달하게 되었지요.

mock interview 하기 - pramp.com

제게 가장 급한 것은 멘붕 상태를 막는 것이었습니다. 이걸 위해 저는 pramp.com 사이트를 이용했습니다.

1 2

pramp에서는 회원가입을 하면서 사용할 언어를 미리 골라두고, 또 특정 시간을 골라 예약하면 같은 시간을 예약한 사람들끼리 매칭해서 연습할 수 있게 해줍니다. 언어도 최대한 맞춰주는 것 같았는데 맞지 않는 경우도 있긴 했어요. 그래도 프로그래밍 언어라는 게 알고리즘 문제 푸는 차원에서는 대동소이하니까 괜찮더라고요.

3

처음 시간을 예약하면 제가 해야 할 질문이 솔루션까지 제시되고 제가 받게 될 질문은 알 수 없습니다. (당연하겠죠?) 그걸로 미리 인터뷰어로서의 준비를 해둡니다. 시간이 되면 입장이 가능하고 입장 후 매칭이 되면 제가 물어볼 문제나 풀어야 할 문제 중 하나가 랜덤으로 떠 있습니다. 물어봐야 하는 문제면 먼저 물어보게 되고 제가 인터뷰어의 입장에서 진행합니다. 풀고 나면 swap role 버튼을 눌러서 입장을 바꿔서 진행합니다. 정말 인터뷰와 똑같이 화면과 마이크 모두 사용합니다. 한두 번만이라도 꼭 해보는 게 도움이 되었던 것 같은 게 내가 잘 아는 알고리즘이더라도 다른 사람들이 어떻게 인터뷰로 풀어나가는지 보는 게 유의미한 경험이었습니다. 그리고 저 hint나 answer 부분에는 제가 인터뷰어로서 상대방에게 어떤 경우에 어떻게 힌트를 주라고도 나와있는데 이게 인터뷰어 입장도 되어보니 반대로 인터뷰이로서 어떤 순서대로 이야기해야겠다는 것이 더 느껴지더라고요. 한 번이라도 꼭 위 사이트를 사용해보시는 걸 추천합니다. 아 참, 링크 pramp.com를 이용해서 가입하시면 저에게 크레딧(1회 무료 이용)이 오는데, 처음 가입하면 5번을 무료로 할 수 있고 1번마다 1개씩 사용하게 됩니다. 근데 만약 인터뷰 후의 서베이에서 상대방이 제가 인터뷰어로서 잘 해줬다고 답변하면 다시 하나가 생깁니다. 그러니까 제 입장에서도 어지간하면 해당 항목은 잘 답변합니다. 다 의지가 있어서 모인 사람들이라 깽판 치는 사람은 없는 것 같아요.
사실 더 많이 했으면 더 좋았을 것 같은데 도움이 된다는 걸 알면서도 저 영어 인터뷰 연습 자체가 너무 부담스러워서 여러 번은 못했어요. 심장이 벌렁벌렁하는 느낌. 이거도 이후에 극복해나가야겠죠?

언어를 바꾸자

이 즈음 사용 언어를 C에서 파이썬으로 바꾸기로 마음을 먹습니다. C로 하자니까 정말 진도가 안 나가더라구요. 예를 들어서 많은 문제에서 heap 자료구조를 사용해야 하는데 C는 자료구조가 없으니 매번 heap을 구현해야 하고 그럼 또 한세월이고… 이런 악순환의 반복이었거든요. 그래서 파이썬으로 문제를 풀기 시작합니다. 사실 업무에서 파이썬을 쓸 때는 리스트, 튜플, 딕셔너리 등 한정된 자료구조와 맨날 쓰는 함수들만 썼었는데 이번에 heap이나 deque, set등을 새로 공부하고 많이 써봐서 이 공부도 된 것 같습니다. 꼭 파이썬이 아니더라도 다들 평소에 쓰는 언어로 꼭 코딩 인터뷰 준비하기보다는 좀 유연성 있게 언어를 선택하시면 좋을 것 같습니다.

leetcode premium 사용하기

사실 leetcode preminum + pramp를 쓸지 아니면 AlgoExpert같은 더 최근에 나온 서비스를 구독할지 잠깐 고민했는데 결국 처음 해보는거니까 가장 대중적인 것부터 해보자 싶기도 했고 또 HR과의 대화도 용이할 것 같아서 리트코드를 시도해보기로 했습니다. 월구독으로 2개월간 구독했고, 많은 기능 중에 제가 주로 썼던건 interview 탭의 assessment 기능입니다.

4

problem에 있는 문제들을 3-4개 정도씩 묶어서 하나의 패키지로 정해진 시간동안 풀게 되는데요. 다 풀고 나면 위 그림처럼 어느정도 시간이 걸렸는지를 알려주고 내가 푼게 어떤 문제인지 알 수 있습니다.

5

이 기능의 진짜 효과는 이 내 리포트 페이지에서 발휘되는데요, 제가 풀었던 문제들을 리트코드가 자동으로 카테고리별로 분류해서 어느정도 수준인지를 알려주고, 해당 카테고리를 더 공부하려면 어떤 문제를 풀라고 아래에 제시해줍니다. assessment는 전형적인 코딩 테스트 형태다보니 스트레스가 덜해서 되도록 자주 풀었고, 제시된 문제도 틈틈히 봐가며 공부했습니다. 인터넷에서 떠도는 기출문제 리스트보다 훨씬 도움이 된 것 같아요. 어쨋든 내가 뭘 잘하고 못하는지 알고 못하는 부분을 보완하는게 중요하니까요. assessment가 기업별로 되어있는데 사실 그게 얼마나 유효한지까지는 잘 모르겠습니다.

구글 첫번째 인터뷰 이야기만 하고 나머지 회사는 나오지도 않았는데 너무 길어져버렸네요. 그치만 공부법 이야기는 처음에 하고 끝이니까요. 다음 포스팅부터는 후기에 대해 더 쭉쭉 갑니다.