brunch

You can make anything
by writing

C.S.Lewis

by MrCC Jan 15. 2019

온사이트 인터뷰 - 넷플릭스

Episode 10. Onsite Interview - Netflix

(사진: Netflix)

드디어 Netflix와 온사이트 인터뷰이다.

Nextflix는 이번 인터뷰를 통해서 가장 가고 싶던 회사 중의 하나인 만큼 온사이트 인터뷰 준비에도 가장 신경을 많이 썼고 가장 좋은 컨디션에서 인터뷰를 볼 수 있도록 월요일에 스케줄을 잡았다. 
인터뷰가 아침 10시 반에 시작을 해서 조금 여유를 두고 Los Gatos에 위치한 Netflix 본사 한 건물에 도착을 하였다. 


(사진: 넷플릭스 본사)


깔끔한 디자인의 건물에 조금은 한산해 보이는 로비가 있었다.

건물 자체에는 큰 특징 없이 그냥 깨끗한 느낌이었다. 
Reception에서 Check-in을 하자 오늘 인터뷰 스케줄과 간단한 스낵이 담긴 welcome gift를 주었다. 


(사진: 넷플릭스 인터뷰)


스케줄 표에는 엄청 빡빡하게 인터뷰들이 스케줄 되어 있었다. 

각 30/45분 총 7개 (Part 1: 5개, Part 2: 2개)의 인터뷰에 점심시간은 15분만 주고 마지막 두 개의 인터뷰는 심지어 Director 들과 잡혀 있었다. 
Part 2는 Part 1의 인터뷰 성적에 따라 진행이 될지 안 될지가 결정이 난다고 하였다. 
한마디로 Part 1 성적이 안 좋으면 Part 2 없이 바로 탈락이라는 말이다. 
반면에 Part 2까지 진행이 되면 꽤 긍정적인 신호라고 볼 수 있다.

다음은 오늘 인터뷰 스케줄이다.


Part 1:
10:30 - 11:15 am — Interviewer 1 (Engineering Manager)
11:15 - 12:00 pm — Interviewer 2 (Senior Software Engineer)
12:00 - 12:15 pm — Interview Break
12:15 - 1:00 pm — Interviewer 3 (Senior Software Engineer)
1:00 - 1:30 pm — Interviewer 4 (Manager, Talent Acquisition)
1:30 - 2:15 pm — Interviewer 5 (Senior Software Engineer)
2:15 - 2:45 pm — Interview Break

Part 2:
2:45 - 3:30 pm — Interviewer 6 (Director of Engineering)
3:30 - 4:00 pm — Interviewer 7 (Director of Talent, HR)


Netflix에선 인터뷰 보기 전 팀을 미리 선택을 해서 진행이 되기 때문에 전화 인터뷰 때부터 온사이트 인터뷰까지 그 해당 팀의 매니저와 엔지니어들과 인터뷰가 이루어진다. 
새로운 엔지니어가 필요한 팀이 자신들의 팀에 합류할 동료를 직접 뽑는 것이었다. 
팀의 입장에선 같이 일할 동료를 찾는 과정이기 때문에 좀 더 신중하게 또 팀에 도움이 될 만한 사람을 뽑으려고 하기 때문에 회사 레벨에서 뽑는 인터뷰보다 조금 더 까다로울 때가 많다. 

10시 반쯤 되자 첫 인터뷰어가 나를 로비로 마중을 나왔다. 
내가 오늘 인터뷰를 보는 팀의 엔지니어링 매니저였다.
그리고 오늘 하루 인터뷰가 진행이 되는 인터뷰 룸으로 안내를 해주었다. 

첫 인터뷰는 테크니컬 한 인터뷰보다는 팀에 대한 소개와 질의응답 위주로 진행이 되었다. 
매니저인 만큼 테니크컬한 부분보단 다른 쪽으로 나에 대해서 자세히 알아보려는 듯하였다. 
이 매니저와는 1번째 전화 인터뷰를 통해서 한번 얘기했던지라 어느 정도 서로에 대해 알고 있어서 대화가 잘 풀렸다.
그리고 역시나 넷플리스 문화에 대한 질문을 빼놓지 않고 물어보았다. 
전화 인터뷰 때에도 느꼈지만 Culture Fit을 중요시 생각하는 듯하였고 지원자가 얼마나 넷플릭스 문화에 대해 잘 이해하고 또 문화와 얼마나 잘 맞을지에 대해서 파악을 하려는 듯한 질문을 많이 하였다.
대화 위주로 인터뷰가 진행이 돼서 큰 어려움 없이 첫 번째 인터뷰를 마칠 수 있었다. 
중간에 warm-up 용으로 코딩 질문을 하나 주긴 하였지만 말 그대로 Warm-up을 시켜주려는 듯한 쉬운 문제였다. 


(사진: Paysa.com)


이어지는 다음 인터뷰는 같은 팀의 시니어 엔지니어와 테크니컬 인터뷰였다. 

Netflix에서 일한 지는 1년 정도밖에 안 된 Microsoft 출신 인도 엔지니어였는데 간단한 greeting을 한 후 바로 코딩 문제로 들어갔다. 


Given deck of name cards, find the position of the input name
Card {
  String name;
  String rightPersonName;
}


처음 보는 문제였지만 한 번쯤 접했을 법한 문제였다. 

문제 자체가 조금은 vague 했기 때문에 주어진 문제에서 명확하게 제시되지 않은 조건들을 찾아내기 위해서 초반에 인터뷰어에게 여러 질문들을 하면서 문제를 명확하게 하는 과정을 거쳤다. 
크게 어렵지 않은 문제였지만 인터뷰어와 다양한 각도에서 문제를 같이 풀어나가는 식으로 인터뷰가 진행이 되었다. 
인터뷰에서 나오는 알고리듬 문제는 대부분 최종적으론 효율적인 data structure를 써서 가장 optimal 한 솔루션을 찾아내야 하기 때문에 주어진 시간 동안 최선의 솔루션을 찾아서 화이트보드에 코드는 완성하는데 집중을 했다. 
그렇게 해서 나름 만족스럽게 두 번째 인터뷰를 마칠 수 있었다. 
인터뷰 마지막 5분 정도는 내가 질문을 할 수 있는 시간이 있었는데 Microsoft와 Netflix의 차이점과 Netflix로 이직을 하고 나서 1년 후 느끼는 장단점에 대해서 물어볼 수 있었고 인터뷰어는 유쾌하게 솔직한 자신의 개인적인 생각을 공유해 주었다. 


(사진: The Cheat Sheet)


2번째 인터뷰가 끝나니 12시가 돼서 15분 정도 쉬는 시간이 있었는데 인터뷰룸으로 점심을 가져다가 주었다. 

보통 온사이트 인터뷰를 오면 점심시간에 회사 식당에서 1시간 정도 여유 있게 점심을 먹으면서 대화할 수 있는 시간을 주곤 하는데 Netflix에선 15분 안에 그것도 인터뷰룸에서 혼자 점심을 해결하라고 해서 조금 당황하였다. 
당연히 15분 안으로 점심을 다 먹을 수도 없었고 먹는 도중에 다음 인터뷰어가 인터뷰를 이어가기 위해 들어왔다.


(사진: Innovasia)


3번째 인터뷰어는 Netflix에서 일한 지 5년이 넘은 아시안계 시니어 엔지니어였다. 

점심 먹는 걸 급하게 마무리하면서 간단한 소개를 한 후 바로 인터뷰 문제로 들어갔다. 
이번 인터뷰어는 Leetcode에서 볼 수 있었던 문제들을 가져왔다. 
첫 번째 문제는 word break 문제


Given a string and a list of words (dictionary), add spaces in the string to construct a sentence where each word is a valid dictionary word.
Return all such possible sentences.
example:
s = "catsanddog",
list = ["cat", "cats", "and", "sand", "dog"].
return ["cats and dog", "cat sand dog"].


Leetcode에선 Hard로 분류된 난도가 높은 문제였다. 
예제를 Netflix에 관련된 것을 주긴 했지만 문제 자체는 거의 똑같았다. 
인터뷰 준비하면서 Leetcode Hard 문제는 거의 보질 않아서 직접 이 문제를 풀어본 적은 없지만 비슷한 word break 문제는 medium 난이도 문제들 나와서 그동안 다양한 문제를 많이 풀어본 것이 꽤나 도움이 되었다. 
쉽진 않았지만 그럭저럭 첫 번째 문제를 풀고 다음 문제로 넘어갈 수 있었다.
두 번째 문제는 Median을 찾는 문제


Design a data structure that supports the following two operations:
* void addNum(int num) - Add a integer number from the data stream to the data structure.
* double findMedian() - Return the median of all elements so far.

For example:

addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3) 
findMedian() -> 2


이 문제 역시 Leedcode hard에 해당하는 문제였다. 
Leetcode에 나온 문제라는 건 인터뷰를 본 후에야 알았지만 인터뷰어가 인터뷰 문제를 어디서 가져오는지는 분명히 알 수 있었다. 
남은 시간이 많이 않아서 직접 화이트보드에 코딩하기보단 솔루션을 찾고 인터뷰어에게 내 솔루션을 설명을 하면서 문제 해결을 하려고 하였다. 
겨우겨우 쓸만한 해결책을 찾아내서 pseudo code 정도까지 완성하니 시간이 다 되었다.

(사진: Technofizi.net)


그다음은 HR Manager와의 인터뷰로 이어졌다. 

회사의 문화를 특히나 강조하는 Netflix인 만큼 회사 문화에 맞는 사람인지 검증을 하기 위해 다양한 질문들이 이어졌다. 
조금은 오버한다 싶을 정도로 (마치 숙제를 했나 확인하는 것처럼) Netflix Culture에 대해 질문을 하고 또 그에 대한 내 생각을 물었다. 
그래도 30분 정도로 비교적 짧은 인터뷰이고 기술면접과는 다르게 내 솔직한 생각과 질문과 연관된 내 경험을 잘 조합해서 대답을 하면 돼서 큰 어려움 없이 인터뷰를 마칠 수 있었다. 

다음 이어지는 인터뷰는 Part 1의 마지막 인터뷰이자 오늘 마지막 기술 면접이었다. 
4시간 연속으로 거의 쉬지도 않고 이어지는 인터뷰 마라톤이라 정말 힘은 들었지만 그래도 어려운 인터뷰는 이게 마지막이라는 생각에 다시 심기일전하고 인터뷰에 임했다. 
이번 인터뷰어는 이 팀의 가장 Senior 엔지니어 중에 한 명인듯하였다.
서로 간단히 소개를 하고 바로 인터뷰 문제로 넘어갔다. 
이번 인터뷰는 코딩보단 내 이력서에 있는 경력들을 보고 fundamental 한 질문들로 시작을 하였다. 


What is scalable system?
What makes system scalable?
What is RESTful?
How to use create RESTful service?
Why do you use RESTful service over others?
What is event-driven architecture?
Why do you use non-relational database over relational database?
...


내 이력서에 나온 경력들을 바탕으로 다양한 fundamental 한 질문들을 쏟아냈다. 
인터뷰 방식은 참신했지만 막상 이런 질문들이 예상치 못하게 인터뷰에서 나오니 제대로 설명하기가 어려웠다. 
평소 깊게 생각을 안 하고 당연하다고 생각했던 부분까지 질문으로 이어지니 막히는 부분이 많았다. 
당황을 하니 영어도 꼬이고 어버버하고 있으니 뒤통수를 한대 얻어맞은 기분이었다. 
솔직히 말하면 시니어 레벨 엔지니어라면 당연히 알아야 하는 내용들이었지만 막상 온사이트 인터뷰 질문으로 나와서 설명을 하려니 쉽지가 않았다. 
그래도 인터뷰는 계속 이어졌다. 
이번엔 코딩. 
Task runner를 만드는 문제가 나왔다. 


Build task runner

Task {
List <Task> dependencies; 
Void run();
}
Public void process(List <Task> tasks) {
// run task only after its dependencies are all run
}


Task runner를 만드는데 Task들마다 dependency가 List로 있는고 각 Task를 run 하기 전에 dependency task들을 먼저 다 process를 하고 해당 task를 run을 해야 하는 게 문제였다. 
생각보다 어려운 난이도가 아니라 생각이 들어서 시간 내에 설루션을 완성하기 위해 폭풍 코딩을 하고 있는데 중간중간에 또다시 fundamental 한 질문들이 이어졌다. 


Why do you use ArrayList over LinkedList? 
When do you think LinkedList is better than ArrayList?
What happens if you set ArrayList size and add more than the size? 
...


역시 기본적인 질문 들이었지만 이 역시 명쾌하게 한 번에 대답하지 못했다. 
원래 질문인 Task runner를 최종적으로 완성하는 것보다 이러한 fundamental 한 질문들이 계속 이어졌고 나는 멘틀까지 탈탈 털렸다...
그러다가 보니 어느덧 시간이 훌쩍 지나가서 Part 1 마지막 인터뷰가 끝이 나고 이로써 5개의 인터뷰를 모두 마쳤다. 

보통 Part 1 인터뷰들의 성적/피드백이 안 좋으면 Part 2까지 진행을 안 하고 그 자리에서 인터뷰가 종료된다고 들었는데 다행히 Part 2로 인터뷰가 이어지는 듯하였다. (아마 Part 1 마지막 인터뷰에 대한 피드백을 못 받아서 그렇듯 하였지만...)

어쨌든 Part 1 인터뷰를 모두 마치고 Hiring Manager와 캠퍼스를 한 바퀴 걸으며 30분 정도 break 타임을 가졌다. 
팀에 대한 소개와 회사에 대해서 설명을 해주고 서로 알아가는 시간을 가졌다. 
마지막 인터뷰에 대한 아쉬움이 커서 대화에 집중을 할 수 없었지만 그래도 Part 2 인터뷰로 넘어가기 전에 어느 정도 휴식 시간을 가질 수 있었다. 

휴식을 마치고 이어진 Part 2 첫 인터뷰는 Director of Engineering와 하게 되었다. 
생각보다 젊은 백인 디렉터였다. 
디렉터와의 인터뷰는 주로 팀이 하고 있는 프로젝트에 관한 내용과 회사 문화, 내 경력, 그리고 역시나 중간중간 날카로운 질문들도 이어졌다. 
팀이 현재 진행 중인 프로젝트들과 해결해야 되는 문제들을 설명해주면서 거기에 대한 나의 생각을 물었다. 
자연스럽게 프로젝트 설명도 되고 내가 즉석에서 바로 이해를 하고 팀이 해결하려고 하는 문제점들의 해결책을 제시해야 해서 쉽지는 않지만 사실 내 생각과 경력을 증명하면 되는 인터뷰라 기술 면접들에 비하면 크게 어렵지는 않았다. 
그래도 질문이 들어왔을 때 대답하기 전에 신중하게 생각해보고 대답을 하려고 노력을 하였다. 
다행히 디렉터와 인터뷰 내용이 나쁘지가 않았다. 
디렉터도 팀에 합류하게 되면 잘해보자는 식으로 말을 해줘서 합격의 기대치를 높여주었다. 

인터뷰가 끝날 때쯤 되니 hiring manager가 밖에서 기다리고 있었다. 
다음 인터뷰는 Director of Talent와 하는 걸로 되어 있었는데 조금 불안한 느낌이 들었다. 
아니나 다를까 불안했던 느낌이 맞았다. 

인터뷰는 그걸로 종료가 되었고 전반적으로 괜찮았지만 Part 1 마지막 인터뷰의 내용이 안 좋았다는 피드백과 함께 Hiring Manager는 Netflix의 hiring bar가 높으니 준비를 좀 더 해보고 다음에 다시 도전해보라는 말을 마지막으로 나를 건물 밖으로 escort 해주었다. 

Netflix에 가고 싶은 마음도 컸고 인터뷰 준비도 많이 해왔던지라 인터뷰를 채 마치지도 못 하고 esport가 돼서 건물 밖으로 나오니 기분이 무척 찹찹하였다. 
하루 종일 이어진 인터뷰에 지친 데다가 그런 식으로 인터뷰가 종료되니 아쉽기도 하고 허망한 느낌까지 들었다. 

이로써 이번 인터뷰 투어 공식적으로 구글에 이어 두 번째 탈락이었다. 
메인으로 생각했던 회사들에 연달아 탈락하니 불안한 느낌이 들기 시작했다. ㅠㅠ
그래도 다음날 있는 Facebook 온사이트 인터뷰를 생각하며 컨디션 조절을 위해서 마음을 추스르고 Netflix 캠퍼스를 떠났다. 




이렇게 해서 Netflix 온사이트 인터뷰가 마무리가 되었다. 

인터뷰 성적에 대해서는 아쉬웠지만 그래도 전반적인 인터뷰 내용이나 인터뷰를 했던 팀, 또 팀 사람들은 굉장히 좋은 느낌을 받았다. 
결과는 안 좋았지만 여전히 Netflix는 언젠가 한 번쯤 꼭 일해보고 싶은 회사로 남았다.               






매거진의 이전글 온사이트 인터뷰 - 리프트
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari