brunch

You can make anything
by writing

C.S.Lewis

두 번째 아마존 인터뷰

Spotify와 비슷하게 아마존에서도 연락이 왔었다. 아마존은 이제 두 번째 인터뷰라서 뭘 준비해야 하는지 너무 잘 알고 있었다. 코딩 인터뷰는 별로 어렵지 않은 수준이었던 기억이라 시스템 디자인과 leadership principle 위주로 준비했다. 아마존 인터뷰에 LP가 중요하다는 건 워낙 유명한 이야기라 아예 사람들이 스프레드시트를 만들어놓은 게 있는데, 이걸 채워가면서 이야기를 준비했다. 글로만 쓰면 말로 할 때 막상 잘 안 나오니 읽어가면서.


저번에 지원할 때는 그랜드 하얏트 호텔에서 인터뷰를 봤는데 이번에는 JW 메리어트더라. 어쨌거나 인터뷰룸은 다 비슷하게 생겼다. 이번에는 전날 좀 여유 있게 준비하고 싶어서 호텔을 준비해달라고 부탁했는데 메리어트가 아니고 그랜드 하야트에 숙박을 잡아주더라. 인터뷰어들과 같은 호텔에 묵지 않게 하는 것이 원칙이라고. 아마존 인터뷰 이야기는 저번 글에서 많이 했으니 간략하게 인터뷰 후기만.


첫 번째 시간 : 아마존 커리어 사이트 담당하는 시니어 엔지니어였는데 머신 러닝 관련 일을 한다는 공통점이 있어서 내가 했던 일에 대해 잘 이야기했다. 재미 었어하는 눈치였다. 처음 만났을 때는 조금 악센트가 듣기 힘들었는데 익숙해지니까 적응이 됐다. LP 질문을 하나 했는데 다행히 준비했던 질문이라 잘 대답했고, 디자인 질문도 하나 물어봤는데 기초적인 URL shortener를 물어봐서 잘 대답할 수 있었다. 내 대답에 만족해하는 느낌이었다.


2. 두 번째 세션은 AWS에서 일한다는 시니어 엔지니어였는데 특이하게 shadow가 한 명 있었다.


Shadow란 테크 회사들의 인터뷰어 트레이닝 과정 중에 하나다. 말 그대로 다른 인터뷰어의 쉐도우(그림자)가 되어서 인터뷰 과정을 지켜봄으로써 인터뷰어가 되기 위한 준비를 하는 것. 큰 회사들 중에는 이런 과정을 거치지 않으면 다른 사람을 인터뷰할 수 없는 회사들이 많다. 


LP 질문과 코딩 문제 하나를 받았는데, 코딩 문제가 너무 쉬워서 45분 인터뷰 중에 15분이 남아버렸다. (string을 단어 단위로 reverse 하는 문제였다.) 무슨 일을 하는지, 어떤 기술을 쓰는지, 정말 아마존 직원들은 AWS 무제한 사용 가능한지 뭐 이런 질문들을 하면서 시간을 보내다 나갔다. 내가 하는 말에 리액션이 너무 없어서 정신적으로 쉽지 않은 인터뷰어였다. 항상 반응 없는 면접관이 제일 어려운 것 같다.


3. 마찬가지로 LP 문제로 시작했다. 비슷하게 미리 준비해 갔던 대답을 하면서, 카카오 다니면서 애플리케이션 캐시 성능 개선했던 이야기를 해주니 재밌어하는 반응이었다. 내가 캐시 이야기를 해서인지 디자인 문제도 캐시로 내줬는데, 캐시의 설계는 기초적인 디자인 질문 중에 하나라서 익숙한 문제. Eviction policy랑 설계할 때의 이런저런 trade-off에 대해서 이야기를 했다. 왜 캐시의 key를 string으로 쓰느냐? generic을 쓰면 안 되냐? generic을 키로 쓰려면 그 클래스에 어떤 어떤 메서드가 있어야 하냐? 뭐 이런 질문들이 나왔는데 크게 어렵지은 않았다. 역시 시간이 남아서 요즘 하는 일이 뭐냐고 물어봤는데, ntp로 다른 대륙에 있는 머신들의 시간을 sync 하는 일을 한다고 했다. "너네 팀에 아인슈타인 한 명 있어야 하는 거 아니니?"라는 농담을 하니 웃으면서 "Really nice talking to you."라고 이야기하면서 나갔다. 저번 시간에 무뚝뚝한 인터뷰어를 만나서 위축되었는데 조금 멘탈이 회복됐다.


4. 제일 힘든 마지막 시간이었다. 온사이트는 원래 마지막 시간이 제일 힘들다. 인터뷰의 특성상 긴장을 할 수밖에 없는데, 아무리 중간에 휴식 시간이 있어도 4시간 동안 집중을 유지하는 일이라는 게 근본적으로 힘들 수밖에 없다. 체력이 중요하다. 나는 매 휴식시간마다 방에 있던 커피에 설탕을 부어서 각성제처럼 들이켰다. 


왜 이 시간이 제일 힘들었나? 마지막 인터뷰어는 중국계 사람이었는데, 이 사람 발음을 내가 못 알아듣고 내 발음도 이 사람이 못 알아들으니까 나도 모르게 위축이 됐다. Sorry? Pardon? 을 연발하며 대화를 이어갔는데, 설상가상으로 리액션도 거의 없고 표정이 뭔가 짜증 난 듯한 표정에, 내가 말을 해도 인상을 찌푸리며 바로 받아치듯이 추가 질문을 날려서 정신이 나갈 지경이었다. 대화라는 게 주고받는 것이다 보니 상대방의 반응이 별로이면 나도 많은 말을 하기가 어렵다. 대략 3가지 정도의 질문을 받았다. 


"지금 프로젝트에서 네가 해결한 biggest techincal challenge가 뭐니?" 

"내가 요즘 새로운 알고리즘을 도입했는데 어쩌고 저쩌고..."


"검색 엔진에서 동의어를 어떻게 구분하는지 알고 있니?"

"그 유저의 히스토리를 보면 동의어 중에 어떤 거에 관심이 있는 건지 알 수 있지 않을까?"

"그 키워드를 처음 검색했을 때는 어떻게 해?"

" 그러면 예전 클릭 히스토리를 가지고 관련 문서를 상위에 표시해주면 될 것 같아."

"그건 그냥 아이디어잖아. 구현은 어떻게 할 건데?"

"예전 검색 히스토리를 가져와서 tf-idf 같은 걸로 vectorize 한 다음에 해당 검색에서 retrive 된 문서들을 vectorize 해서 그 사이 distance로 sort 하면 될 거 같다."

"흠..."


대답을 해도 이런 식으로 반응이 없으니 내 대답에 만족했는지를 도무지 알 수가 없었다.


"어떤 애플리케이션 컨트롤러가 있고, 몇몇 종류의 리퀘스트가 있고, 다양한 종류의 request에 따라서 여러 종류의 data factory를 조회해서 가져오는 서비스가 있다 치자. 여기 캐싱을 어떻게 적용할래?"

"각각의 req 종류에 대해서 다른 prefix를 가지고 request parameter를 key로 해서 캐싱을 하겠다."

"어디서 캐싱을 하겠냐?"

"data factory 앞에서 하면 될 거 같은데?"

"그럼 이러이러한 문제가 있지 않냐?"

"아 그럼 그냥 컨트롤러에서 하는 게 낫겠다."

"그럼 컨트롤러가 데이터 팩토리 수정하면 같이 바뀌어야 하는 거 아니냐? 이게 맞는 설계냐?"

"그럼 블라블라 블라...." 


이런 식으로 계속 질문에 대답을 하면 또 다른 질문이 날아오고, 칼싸움을 하는 기분으로 열심히 주고받다 보니 어느새 인터뷰 시간이 끝났다. 심지어 마지막으로 질문 있냐는 이야기도 없이 엘리베이터로 배웅을 해줬는데 배웅이라기보다는 쫓겨나가는 기분이었다. 눈치채신 분들도 있겠지만 이 인터뷰어가 bar raiser였다. 나는 bar raiser라고 하면 질문의 내용만 어려울 줄 알았더니 심리적인 압박을 줘서 상대의 반응을 보려는 목적도 있는 것 같았다.


인터뷰 자체는 생각보다 난이도가 높지 않았는데 만약 떨어진다면 마지막 인터뷰어에 제대로 대처하지 못해서일 거라는 생각이 들더라. 다행히 이번에는 건물을 나오자마자 탈락 메일을 받지는 않았다.

매거진의 이전글 코딩 인터뷰 준비하기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari