Introduction

이 시리즈의 마지막 글이다. 사실 이 글이 가장 중요한데, 아무리 화려한 이력서를 갖고 있어도 인터뷰에서 떨어지면 소용이 없기 때문이다. 빅테크 인터뷰는 크게 코딩 인터뷰와 behavioral/research 인터뷰로 나뉘는데, 이 글에서는 내가 준비하면서 느낀 점들을 솔직하게 공유하고자 한다.


1. LeetCode, 무조건 열심히 풀어라

국내 박사 출신들이 가장 간과하는 부분이 바로 코딩 인터뷰 준비이다. “나는 연구를 하는 사람이지, 코딩 테스트를 보는 취준생이 아닌데?”라고 생각할 수 있지만, 현실은 빅테크에서 Ph.D. 출신에게도 코딩 인터뷰를 본다는 것이다. 그리고 이 코딩 인터뷰의 수준이 결코 녹록지 않다.

LeetCode가 중요한 이유

솔직히 말하면, LeetCode 문제 풀이 능력이 실제 업무 능력과 직결되느냐고 묻는다면 글쎄…라고 답할 수밖에 없다. 실제로 Gayle Laakmann McDowell이 쓴 Cracking the Coding Interview (CTCI)에서도 코딩 인터뷰 시스템의 불완전함을 인정한다. 그럼에도 이 책의 결론은 명확하다: “게임의 룰을 이해하고 준비하라.”

빅테크의 논리는 사실 꽤 단순하다. 포지션 하나에 지원자가 수백에서 수천 명이 몰리는 상황에서, 모든 지원자를 세밀하게 평가하는 건 현실적으로 불가능하다. 그래서 코딩 인터뷰를 “잘하는 사람을 선발”하는 도구가 아니라 “못하는 사람을 걸러내는” filtering 도구로 활용한다. 미국 빅테크 같은 경우에는 candidate의 수(N)이 워낙 크니까, 이 필터만 통과시켜도 우수한 사람들이 충분히 남는 구조이다. 그리고 역설적이게도, 이 필터를 통과한다는 것 자체가 하나의 신호가 된다: “이 사람은 해야 할 일을 충분히 준비할 만큼 성실하고 진지한 candidate이다.” 즉, LeetCode를 잘 푼다는 건 단순히 알고리즘 실력을 보여주는 게 아니라, 인터뷰를 위해 시간과 노력을 투자했다는 성실함의 증거이기도 하다.

실제로 MIT에서도 졸업 학기쯤 되면 취업 준비를 하는 학생들이 6개월 동안 거의 방에 갇혀서 LeetCode만 풀다시피 한다. 박사 수준의 연구자들도 예외가 없다. 나도 처음엔 ‘설마 그렇게까지 해야 하나’ 싶었는데, 직접 인터뷰를 경험해보고 나서는 그 심정이 충분히 이해가 됐다. 목마른 자가 우물을 판다고 하지 않던가

그러니 LeetCode를 열심히 풀자! 이 Top 150 문제를 전부 여러 번 풀 것을 강추한다.

잘 안 쓰이는 자료구조도 알아야 한다

여기서 강조하고 싶은 것이 있는데, 연구하면서 흔히 쓰는 자료구조 (array, hash map, tree 등) 외에도 Trie, Segment Tree, Union-Find 같은 자료구조도 인터뷰에서 나온다는 것이다.

이게 꽤나 당황스럽다. 실제로 필자도 W사 면접에서 “검색창에 텍스트를 입력했을 때 자동 완성 후보를 반환하는 알고리즘을 구현하라”는 문제가 나왔다. 나는 처음에 ‘이게 뭔 문제지?’라고 속으로 생각하며 hash map 기반 접근을 떠올렸는데, 이 문제는 Trie 구조로 풀어야 하는 문제였다. 로보틱스 연구를 하면서 Trie를 써본 적이 없었고, 학부가 CS가 아니다 보니 Trie라는 것에 대한 개념조차 없었다.

그런데 이 Trie 관련 문제들이 NeetCode Top 150에 포함되어 있다. 결국 Top 150을 충분히 풀어둔 사람과 그렇지 않은 사람이 이런 순간에 갈리는 것이다. 거창하게 생각할 것 없이, 일단 NeetCode 150을 달달 외울 정도로 풀어라. 그게 가장 확실한 준비다.

추천하는 준비 방법은:

  • NeetCode 150을 기본으로 풀기. 가장 효율적으로 핵심 패턴을 커버하며, Trie를 포함한 모든 주요 자료구조가 포함돼 있다.
  • 그 후 Leetcode 유료 결제하면 해당 회사의 빈출 문제 list에 대해서 알려 준다. 그것도 열심히 추가적으로 풀자(근데 한 번도 빈출 문제에서 안 나온 건 안 비밀…아마 position이 pure software engineer가 아니어서 그런게 아닐까 추측한다).
  • 어느 정도 준비가 됐으면 Mock interview하기. 이 tryexponent가 월 5회 mock interview가 무료인데, 꼭 꾸준히 하는 걸 추천한다. 두 명이 동시에 만나서 30분씩 모의 interviewer-interviewee해주는 방식인데, 다른 mock interview mate가 꽤나 잘 알려줄 때도 있어서 큰 도움이 됨(+ 설명하면서 풀기에 대한 공포를 좀 완화시켜 줌).
  • ML/CV 포지션이라면 Machine Learning Interviews 레포를 꼭 참고해라. 코딩 인터뷰 외에 ML 이론 질문이 별도로 나오는 경우가 많다. 25년 기준 multi-head attention 구현 하는 문제가 자주 나왔다.
  • CS 기본기도 점검해야 한다. OS, 네트워크, 데이터베이스 같은 CS 기초 개념도 간간이 나온다. 이 한글 자료가 주요 CS 개념을 깔끔하게 정리해두었으니 한번 훑어보는 것을 추천한다. 필자의 경우 SLAM engineer인데 L1 cache, L2 cache 등 굉장히 deep한 cache 관련 질문도 받아 보았다.

2. 코딩 인터뷰는 결국 Communication이다

여기서 많은 사람들이 놓치는 핵심 포인트가 있다. LeetCode를 열심히 푸는 것은 기본이지만, 코딩 인터뷰의 본질은 communication capability를 평가하는 것이라는 점이다.

면접관은 단순히 “이 사람이 정답을 맞혔는가”만 보지 않는다. 오히려:

  • 문제를 받았을 때 어떤 접근 방식을 떠올리는지
  • 그 접근 방식을 상대방에게 명확하게 설명할 수 있는지
  • 막혔을 때 어떻게 사고를 전환하는지
  • edge case를 스스로 짚어낼 수 있는지

이런 것들을 종합적으로 본다. 즉, ‘같이 일했을 때 이 사람이 문제를 어떻게 풀어나가는 사람인지’를 보는 것이다. 우리의 경우 수능 같이 주어진 시간 내에 문제 푸는 데에만 급급한 training을 많이 했다보니, 나는 처음에 혼자서 LeetCode만 죽어라 풀었는데, 실제 인터뷰에서는 풀 수 있는 문제도 설명을 제대로 못 하고 어버버해서 떨어진 적이 있다. 그 이후로는 mock interview의 중요성을 깨닫고 말하면서 코딩하는 연습을 했고, 이게 체감상 가장 큰 도움이 되었다. 그리고 주위에 빅테크 일하고 있는 친구에게 mock interview를 요청하자(미리미리 떨어지는 횟수를 친구를 통해 늘리는 것도 아주 큰 도움이 된다).

특히 국내 박사 출신의 경우, 영어로 기술적인 내용을 설명하는 것이 익숙하지 않을 수 있다. 이건 학회 발표 경험만으로는 충분하지 않다. 학회 발표는 준비된 스크립트를 읽는 것이지만, 인터뷰에서는 즉흥적으로 자신의 사고 과정을 영어로 풀어내야 하기 때문이다. 나의 경우 많은 유투브를 참고했지만, 이 실제 Google에서 촬영한 interview tutorial 영상이 가장 큰 도움이 되었다. 영상 속 아저씨가 말하는 phrase를 그냥 통째로 외워서 step-by-step 잘 써먹었다.

예로 들어,

  • (문제 파악 단계) “May I take a moment to read it and then ask a few clarifications?” — 문제를 받자마자 바로 코딩을 시작하지 말고, 읽고 질문할 시간을 달라고 자연스럽게 요청하는 phrase. 이렇게 하면 문제를 제대로 이해했는지 확인하면서 동시에 신중한 사람이라는 인상을 줄 수 있다.
  • (브레인스토밍 단계) “I can think of the naive solution, but probably shouldn’t do this — I’ll just run it by you(뜻: 너한테 한번 확인만 받아볼게).” — brute force 풀이를 먼저 제시하되, “이건 최적이 아닌 걸 안다”는 걸 명시적으로 밝히는 표현. 면접관에게 자신의 사고 과정을 투명하게 보여주는 역할을 한다.
  • (브레인스토밍 단계) “I assume by(뜻: ~라고 나는 이해해) posing this question, you want me to find an efficient solution.” — 면접관의 의도를 내가 이해하고 있음을 확인하는 표현. 이 한 문장으로 “효율적인 풀이를 향해 나아가겠다”는 방향 설정을 자연스럽게 할 수 있다.
  • (접근 방식 제시) “I would probably approach it using a dynamic programming method.” / “What I’m thinking right now is that…” / “My current thought is that…” — 지금 어떤 방식으로 생각하고 있는지를 실시간으로 중계해주는 표현들. 침묵하며 혼자 생각하지 말고, 이런 식으로 머릿속을 계속 말로 흘려보내는 것이 핵심이다.
  • (확인 단계) “I wonder if it makes sense.” / “Does that sound correct?” — 풀이 도중이나 설명 후에 면접관의 반응을 확인하는 표현. 면접관도 사실 힌트를 주고 싶어하는 경우가 많다. 이 phrase들을 던지면 자연스럽게 피드백을 유도할 수 있다.
  • (복잡도 분석) “That would be at best O(n^4) (n to the four).” / “We will invoke this, at most, N-squared times.” — time/space complexity를 설명할 때 쓰는 표현. “O(n^4)니까 이건 비효율적이다”를 자연스럽게 말할 수 있어야 한다.
  • (결정 요청) “Do you want me to code this brute force solution first, or should I move on to the optimized approach?” — 면접관에게 방향을 묻는 표현. 혼자 결정하지 말고 물어보면, 면접관 입장에서도 커뮤니케이션이 원활한 사람이라는 인상을 받는다.
  • (마무리) “Thank you for the clarification.” — 면접관이 힌트를 주거나 설명을 해줬을 때 감사를 표현하는 phrase. 간단하지만 대화의 흐름을 긍정적으로 유지하는 데 도움이 된다.

3. 날카로운 질문을 준비해가라

인터뷰의 마지막에는 보통 “Do you have any questions for us?”라는 시간이 있다. 많은 사람들이 이 시간을 대수롭지 않게 생각하거나, “Work-life balance는 어떤가요?”, “가용할 수 있는 GPU가 몇개인가요?” 같은 generic한 질문을 하고 끝낸다.

하지만 나는 이 시간이 동료로서의 자질을 어필할 수 있는 마지막 기회라고 생각하고 활용해야 한다. 면접관 입장에서 생각해보자. 하루에 몇 명의 후보자를 만나는데, 대부분 비슷비슷한 질문을 한다. 그런데 한 후보자가 이런 질문을 한다면 어떨까:

  • “현재 팀에서 X 문제를 Y 방식으로 접근하고 있는 것으로 알고 있는데, Z 방법론은 고려해보셨나요? 제가 이전에 비슷한 문제를 다뤄봤는데…”
  • “최근에 발표하신 논문에서 A 부분의 limitation을 언급하셨는데, 이를 해결하기 위한 후속 연구 계획이 있으신가요?”

이런 질문은 “이 사람이 우리 팀의 도메인을 깊게 이해하고 있구나”, “같이 일하면 좋은 토론 상대가 되겠구나”라는 인상을 준다. 즉, 단순히 질문을 하는 것이 아니라 자신이 그 팀의 동료로서 기여할 수 있는 사람임을 보여주는 것이다. 실제로 나 같은 경우에는 Cruise라는 자율 주행 회사가 San Francisco에서 자율 주행 차량 운행 정지된 사례를 공부하고 “CA의 Registry of Motor Vehicles (RMV)에서 Cruise가 unreasonable risks를 입증하지 못해서 퇴출되었는데, 현재 귀사에서는 어떤 방식으로 이를 대처하고 있고, 어떤 방식으로 quantify해서 이러한 문제를 address하고 있나요?” 같은 질문을 했다. 이러한 질문을 통해 해당 도메인에 대해 실제로 관심이 있었던 척하는 게 가능해진다.

인터뷰어가 누군지 미리 파악하라

여기서 많은 사람들이 모르고 지나치는 팁이 하나 있는데, HR에게 인터뷰어가 누군지 꼬치꼬치 캐물어도 된다는 것이다. 부담스럽게 느껴질 수 있지만, 인터뷰 전에 “Who will I be meeting with?”라고 물어보는 건 전혀 이상한 일이 아니다. 오히려 준비를 잘 하고 싶다는 인상을 줄 수도 있다(미국에서는 proactive한 것이 굉장히 좋은 virtue여서, 연락하는 HR 친구에게 면접 관련해서 일정이 잡히자마자 이것저것 물어봐도 괜찮다).

인터뷰어 이름을 파악했다면, Google Scholar에서 그 사람의 최근 논문들을 훑어봐라. 논문 리스트를 보면 그 사람이 어떤 문제에 관심이 있었고, 어떤 방식으로 생각하는지, 즉 research philosophy가 보인다. 거기서 나온 내용으로 위에 언급한 날카로운 질문을 만들어가면, 그 사람과 나눌 수 있는 대화의 깊이가 완전히 달라진다. 예로 들어 “너는 A 방법론의 전문가인데, 실제로 product에 어떻게 기여하고 있어?”와 같은 질문을 준비해 갈 수 있다.

결국 사람이 인터뷰를 하는 것이다 보니, 그 인터뷰어의 background를 보다 자세히 조사해 가면 호감이 올라갈 수 밖에 없다.

질문 준비하는 방법

  • HR에게 인터뷰어 이름을 먼저 확인하라. 그러면 아래 준비가 모두 가능해진다.
  • 면접관의 최근 publication을 읽거나 LinkedIn을 읽고 약간의 스토킹하기.
  • 해당 팀의 최근 tech blog나 발표를 찾아라. 빅테크의 engineering blog에는 해당 팀이 어떤 기술적 챌린지를 풀고 있는지가 나와있다. 이를 기반으로 질문하면 “아, 이 사람이 우리 팀에 관심이 많구나”라는 좋은 시그널을 줄 수 있다.
  • 자신의 연구 경험과 연결하라. 질문을 할 때 단순히 궁금한 것을 묻는 것이 아니라, “저는 이런 경험이 있는데, 여기서는 어떻게 하고 계신가요?”라는 식으로 자연스럽게 자신의 expertise를 어필할 수 있다. 질문을 하면서 동시에 “나는 이 분야를 잘 알고 있는 사람입니다”를 보여줄 수 있다는 장점이 있다.

정리

미국 빅테크 인터뷰 준비를 세 줄로 요약하자면:

  1. LeetCode를 체계적으로, 충분히 풀어라. Trie 같이 안 쓸 것 같은 자료구조도 나온다. NeetCode 150은 달달 외워라. 미국 취업을 결심하고 한 한-두 달 정도는 application을 하지 말고 Leetcode를 열심히 풀자. 기껏 인터뷰 기회가 왔는데 코딩 인터뷰에서 떨어지면 너무 아쉽고 한 번 떨어지면 해당 기업에 cool down에 걸리기 때문이다.
  2. 코딩 인터뷰는 communication이다. 혼자 풀지 말고, 말하면서 코딩하는 연습을 하라.
  3. 날카로운 질문으로 동료로서의 가치를 증명하라. “Do you have any questions?”는 마지막 어필의 기회다.

이 세 가지를 충실히 준비한다면, 국내 박사 출신이라도 충분히 미국 빅테크에서 좋은 결과를 얻을 수 있다고 생각한다. 물론 쉽지는 않다. 쉽지는 않은데…한 6개월 머리 깨져가며 도전해보니 해볼만 하더라!

이 시리즈가 미국 취업을 꿈꾸는 다른 국내 박사 후배들에게 조금이나마 도움이 되길 바란다.


한국 국내 박사로 미국 취업하기 시리즈입니다.

  1. 한국 국내 박사로 미국 취업하기 - 1. 박사 과정 동안 준비
  2. 한국 국내 박사로 미국 취업하기 - 2. CV Template 선택과 ATS 전략
  3. 한국 국내 박사로 미국 취업하기 - 3. CV 내용 작성하기
  4. 한국 국내 박사로 미국 취업하기 - 4. Interview 준비