아마존 취업 후기 1
2014년 12월 초에 아마존 킨들팀에서 한국 개발자를 채용하러 서울에 왔었다. 아마존은 이후에도 2015년 6월(프라임), 2015년 11월(킨들&에코)에 서울에서 채용 이벤트를 열었다고 한다. 이 글은 어떻게 아마존에 취업하게 되었는지 간단히 정리한 것이다. 아마존이나 다른 외국 회사에 취업하는 데 도움이 되지는 않겠지만, 어떤 식으로 진행되는지 참고할 수는 있을 것이다.
시작
2014년 11월 어느 날 메일을 한 통 받았다. 자신을 아마존의 킨들 및 디지털 제품 그룹에서 일하는 리크루터라 소개하며, 링크드인에 올려놓은 내 프로파일을 보고 좀 더 자세히 알고 싶어 연락했다고 했다. 채용팀이 12월에 서울을 방문해 소프트웨어 개발자 면접을 진행할 계획인데, 관심 있으면 이력서를 보내달라는 내용이었다. 메일을 열 번도 넘게 다시 읽었다. 아마존에서 나를 보고 싶다는 이야기인가?
이 메일을 받기 얼마 전, 이미 다른 회사로 옮기기로 결정한 상태였다. 연봉 협상도 끝났고, 다니던 회사에 그만두겠다고 이야기했다. 그런 와중에 아마존에서 연락이 온 것이다. 마음이 편하지는 않았지만, 어차피 합격하기는 어려울 테니 경험 삼아 도전해 보는 것도 나쁘지 않을 것 같았다.
그보다 1년 전쯤, 그러니까 2013년 말에, 블리자드에 지원한 적이 있다. 비록 2차에서 떨어지기는 했지만 좋은 경험이었다. 오랜만에 면접관이 아닌 지원자 입장을 경험했고, 전화 영어에 대한 두려움을 어느 정도 극복하는 수확을 얻었다. 1차 면접 때는 거의 두 시간 동안 영어로 질문 대답을 하며 비교적 잘 넘어갔던 것 같다. 2차 면접에서는 잘못 내뱉은 말을 끝내 수습하지 못해 망했지만. 이번에도 그 정도는 하지 않을까.
통화
이력서를 보냈더니 바로 답장이 왔다. 한 주 후쯤 전화로 좀 더 논의하자는 내용이었다. 기술 면접이냐고 물었더니 아니라고 한다. 그냥 내 기술과 배경에 대해 자세히 이야기할 것이라 했다. 특별히 준비할 것은 없어 보였다. 아니, 뭘 준비해야 할지 아무 생각이 없었다고 하는 게 정확하겠다.
리크루터와 통화한 후 좌절했다. 리크루터가 하는 말의 10%도 이해할 수가 없었다. 최종 학위가 석사 맞느냐, 주 사용 언어가 자바 맞느냐, 주 업무가 프로그래밍 맞느냐 정도만 알아들었을 뿐이다. 채용 이벤트에 대해 설명을 해주었지만 알아들을 수 있는 말은 거의 없었다.
과제
전화 통화 후 코딩 과제를 제출해 달라는 메일이 왔다. 일단 시작하면 중단했다 다시 시작할 수 없으므로 시간을 충분히 확보한 다음 시작하라고 했다. 최대 4시간이 주어지지만 대부분 1시간 반에서 2시간 사이에 푼다는 설명도 있었다.
새벽에 출근해 과제를 시작했다. 공교롭게도 다니던 회사 출근 마지막 날이었다. 그다음 주부터는 다른 회사로 출근해야 했다. 문제는 어렵지 않았다. 보자마자 우선순위 큐를 사용하면 되겠다는 생각이 들었다. JDK, STL, .Net 프레임워크에 포함된 어떤 함수나 클래스를 써도 된다고 했으므로, JDK에서 우선순위 큐를 찾았다. 문제를 푸는 건 금방이었지만, 테스트케이스 작성, 시간 및 공간 복잡도 분석, 문서화 등에 시간이 많이 들었다. 만족스러운 상태는 아니었지만 2시간 정도 작업한 다음 제출했다. 더 잡고 있는다고 나아질 것 같지 않았다.
준비
금요일에 과제를 제출했는데 월요일에 연락이 왔다. 대면 면접을 진행하기로 했고, 대면 면접 안내를 위해 전화 통화를 하고 싶다는 내용이었다. '메일로 알려줘도 될 텐데 왜 자꾸 통화하자고 하지? 알아듣기도 힘든데...' 하는 생각이 잠시 들었지만, 적당한 날짜와 시간을 잡아 알려주었다.
이번 통화에서는 지난번보다 많이 알아들을 수 있었다. 오래되어 자세한 내용은 생각나지 않지만, 다음 말은 지금도 기억에 남아 있다.
"우리는 지원자가 어떤 옷을 입고 있는지에 관심있는 게 아니라, 어떤 말을 하는지에 관심이 있습니다. 옷을 잘 차려입을 필요 없으니 편하게 입고 오십시오."
인성 면접이 아닌 기술 면접이며 데이터 구조나 알고리즘에 대해 심도 있는 질문을 할 것이라고 알려 주었다. 면접관 2~4명을 만날 것이라 했는데, 아마도 처음 두 면접관의 마음에 들어야 나머지 면접관도 만날 수 있으리라.
그리고 면접 가이드라며 다음 주제를 복습하면 좋다고 했다. 프로그래밍 언어, 자료 구조, 알고리즘, 코딩, 객체지향 설계, 데이터베이스, 분산 컴퓨팅, 운영체계, 인터넷 등등... 이게 뭐야! 이거 다 보려면 1년도 넘게 걸리겠다! 면접까지 두 주 조금 넘는 기간이 남았을 뿐이었다.
게다가 이 모든 걸 영어로 설명해야 한다는 점이 가장 큰 부담이었다. 한국어로 말한다면 모르는 주제가 나와도 적당히 얼버무리며 넘어갈 수 있을 것 같은데, 영어로 말한다면 과연 알고 있는 것이나 제대로 표현할 수 있을지 걱정되었다. 그래서 목표를 정했다. 망신만 당하지 말자!
인터넷에서 아마존 면접 관련 자료를 찾아봤지만 도움될만한 자료는 없었다. 그냥 알고리즘 문제 중 기본적인 것 풀어보고, 자료구조 중 간단한 것만 대충 복습하는 정도까지 할 수 있을 뿐이었다.
면접
면접 당일. 장소는 남산 자락에 있는 그랜드 하얏트 호텔이었다. 아침 일찍 일어나 강남역으로 갔다. 지각하고 싶지 않았지만, 면접 장소에 너무 일찍 도착하고 싶지도 않았다. 맥모닝으로 아침을 때우고 적당한 시간에 맞춰 남산으로 가는 버스에 탔다. 호텔에 도착해 2층으로 올라갔다. 아마존 직원이 면접실로 안내해 주었다. 언뜻 보니 면접실이 10개 정도 있는 것 같았다. '나 말고도 많은 사람들이 여기 면접서 면접을 보겠구나.' 대학 졸업하고 이렇게 긴장해보기는 이때가 처음이었던 것 같다. 다른 아마존 직원이 면접실에 들어와 물병도 주었다. 기다리는 동안 보라고 킨들 파이어도 주고 갔지만 네트워크가 안 되어 할 수 있는 게 없었다.
드디어 면접 시작. 첫 면접관은 나이가 지긋한 분이었다. 인사를 주고받았다. 내게 책도 썼느냐며 조금 놀란 듯 하면서도 좋아하는 모습이었다. 면접을 시작하기 전에 면접관이 말했다.
"우리는 당신의 영어 실력을 평가하러 온 게 아니라 프로그래밍 실력을 평가하러 온 것입니다. 질문이 이해되지 않으면 몇 번이든 다시 설명할 테니 너무 긴장하지 마십시오."
안 그래도 이해 안 되는 질문에는 몇 번이고 질문할 생각이었지만, 그런 말을 들으니 마음이 조금 편해졌다. 질문이 시작되었다. 기본적인 자료구조부터 알고리즘까지, 단답형 질문에서 시작해 조금씩 어려워졌다. 처음에는 쉽게 답했지만, 점점 답하기가 어려워졌다. 중간에 화이트보드에 코드를 작성하기도 했다. 정신이 없어서 제대로 답했는지는 알 수 없었다. 말귀를 알아듣지 못해 버벅거리지 않았다는 사실에 만족했다.
두 번째 면접관은 여자분이었다. 이 분은 내게 알고리즘 문제 두 개를 냈다. 첫 문제는 예전에 본 적이 있는 문제였다. 풀어보지는 않았다는 게 함정이지만. 그래도 알리는 게 좋을 것 같았다. "저, 이거 예전에 본 적이 있는 문제인데, 괜찮을까요?" 하고 물었더니, "그럼 다른 문제로 바꿔줄까요?" 하고 되물어왔다. 그래서, "그냥 이 문제 풀어볼게요." 하고 대답한 다음 문제를 풀기 시작했다. 화이트보드에 열심히 코드를 쓴 다음 면접관에게 다 풀었다고 했더니, 면접관이 내 코드의 실행 결과를 화이트보드에 써보라고 했다. 실행 결과를 쓰다 보니 코드에 버그가 있었다. 면접관이 웃으며 문제를 해결해보라 했다. 사소한 문제라 쉽게 해결할 수 있었다. 그런데 무슨 일인지, 둘째 문제도 예전에 본 적이 있는 것이었다. 물론 풀어보지는 않았다. 젠장! 그래도 문제 자체를 이해하는 데 드는 시간은 절약한 셈이었다. 이 문제 역시 예전에 봤던 문제라고 예기했지만, 면접관은 크게 신경쓰는 것 같지 않았다. 코드를 다 작성하기엔 시간이 부족할 것 같아서 어떤 식으로 풀 수 있을 것 같다고 알고리즘의 개요만 설명했다. 면접관이 내 설명을 다 이해하고, 내가 생각하지 못한 경우를 지적하는 것에 놀랐다. 어찌어찌해서 둘째 문제도 통과했다. 면접관이 잘 했다고 말했다.
세 번째 면접관은 키가 큰 젊은 남자였다. 객체지향 설계 문제를 내게 냈는데, 발음을 알아듣기가 매우 어려웠다. 다시 설명해달라는 요청을 네다섯 번씩 하려니 민망했지만, 그래도 설명을 이해하지 못하면 문제를 풀 수 없으니 어쩔 수 없었다. 처음 설계에 변경된 요구사항을 적용하면서 리팩터링하는 문제였는데, 설명을 못 알아들어 버벅거리긴 했지만, 문제 자체는 잘 풀었나보다. 마지막에 면접관이 잘했다고 했다.
네 번째 면접관은 영화배우처럼 멋졌지만 말투나 태도로 미루어 깐깐한 분으로 보였다. 간단한 요구사항을 설명해 주고는 시스템을 설계해보라고 했다. 황당했지만, 개략적인 시스템 구조는 그릴 수 있을 것 같았다. 화이트보드에 시스템 구조를 그리자 질문이 시작되었다. 트래픽이 엄청나게 늘어나 시스템을 확장해야 할 때는 어떻게 할 것인지, 특정 요구사항은 어떻게 처리해야 할지 등의 질문이 이어졌다. 끝나고 나니 면접관이 아주 잘 했다고 말했다.
면접이 끝나고 질문이 있느냐고 하길래, "미국에도 프로그래머가 많을 텐데 왜 한국까지 와서 영어도 잘 못하는 사람들을 뽑으려 합니까?" 하고 물었다. 면접관이 웃었다. 다른 지원자도 똑같은 질문을 했다고 하며, "우리는 훌륭한 엔지니어를 뽑으려 하는 것입니다. 영어는 중요하지 않습니다." 하고 답했다. "그래도 커뮤니케이션에 문제가 있지 않을까요?" 하고 다시 물었더니, "우리는 엔지니어입니다. 코드로 이야기할 수도 있고, 그림으로 설명할 수도 있습니다. 심지어 중국인이나 인도인들은 자기들끼리 있을 때 자기네 언어로 이야기합니다. 그리고 정리해서 다시 영어로 이야기합니다. 그렇게 해도 아무런 문제가 없습니다."고 답했다.
면접이 끝나고 호텔 밖으로 나왔다. 날씨가 조금 쌀쌀했지만, 기분은 좋았다. 네 시간 꽉 채워 면접을 봤으니 결과가 나쁘지 않을 것 같다는 생각이 들었다. 합격 여부를 떠나 정말 좋은 경험이었다. 그리고 꼭 합격해서 저런 사람들과 일하고 싶다는 생각이 들었다.
결과를 기다리는 동안 매우 초조했다. 면접 당시에는 그럭저럭 잘했다고 생각했는데, 집에 오니 면접 때 잘못 대답한 것이 자꾸 생각났다. 처음에는 한두 개였는데, 점점 더 늘어났다. 젠장!
합격
결과가 나오려면 한참 기다려야 할 줄 알았다. 그 사람들 미국으로 돌아가서 며칠 정리한 다음 결과를 알려줄 수 있을테니 최소 한두 주는 걸리지 않을까 생각했다. 그런데 바로 며칠 후 메일이 왔다. 다른 누가 다음 단계 진행을 위해 곧 연락할 거라며, '좋은 소식이다, 더 자세한 건 다음 날 알려주겠다'고 했다. 다음 날 다른 리크루터에게 메일이 왔다. 아마존 면접에 참여해줘서 고맙고, 소프트웨어 개발자 역할을 제의하고 싶은데 여전히 미국 시애틀로 오는 것에 관심이 있는지 물었다. 자세한 사항은 전화로 이야기하자고 했다.
믿기지 않았다. 내가 미국에, 아마존에 가는 건가?