페이스북 아키텍쳐 공부하라고 해놓고 인턴 면접엔 다른 문제?

이학렬 기자
2015.11.02 16:10

[美유학생의 글로벌 기업 인턴면접후기]가장 가보고 싶은 회사…지각+불성의 면접 '최악'

[편집자주] 대표적인 ‘미생’인 인턴. 하지만 인턴은 회사가 어떤 일을 하는지를 경험하고 정규직으로 가는 가장 빠른 길이기도 하다. 특히 미국에서는 구글, 마이크로소프트 등 글로벌 기업들이 다양한 인턴십 프로그램을 운영하고 있다. 머니투데이는 글로벌 기업 인턴을 준비하는 학생들과 취업준비생들에게 도움이 될 수 있도록 미국 유명 사립대인 노스웨스턴대 컴퓨터공학과 학/석사 통합과정 3학년 재학중인 유학생 황성윤씨(20)의 인턴십 면접 후기를 옮겨왔다. 황씨는 캘리포니아 마운틴뷰에 위치한 교육 스타트업 Shmoop에서 파트타임 소프트웨어 엔지니어링 인턴으로 2년째 일하고 있다. 황씨의 면접후기는 개인적인 경험일 뿐이며 모든 지원자들이 같은 과정을 겪는 것은 아니다. 또 미국내 인턴 지원 과정과 한국내 지사의 인턴 지원 과정이 다를 수 있다.
/사진제공=페이스북

페이스북 면접 후기를 시작합니다. 미리 말씀드리자면 페이스북 면접은 제 면접 인생 중 구글 면접 이후로 최악이었습니다. 다른 회사들보다 준비를 더 했으면 더 했지 덜 하진 않았다고 생각합니다. 준비를 딱히 안해서 잘 못 본 것 같진 않습니다.

제가 가장 일하고 싶었던 회사는 페이스북이었습니다. 알고 계시는지 모르겠지만 페이스북의 코드베이스는 대부분 PHP입니다. PHP는 실제로 코딩을 해보면 개발자를 상당히 짜증나게 만드는 언어입니다.

PHP는 빠른 개발, C나 C++을 해본 개발자라면 상대적으로 친숙한 문법 등의 장점이 있지만, 동적 타입이나 namespace(명칭공간) 관련해 개발자를 짜증나게 하거나 성가시게 하는 것들이 많습니다. 메모리도 엄청나게 잡아습니다.

게다가 인터프리터 언어라 컴파일 타임에 체크될 버그들이 그대로 들어가는게 큰 문제점입니다. 특히 그 부분을 쓴 개발자가 성의없이 테스트도 안해보고 올려본 경우라면요. 언어 자체에 버그도 꽤 있습니다. 무엇보다도 개발에 익숙하지 않은 사람이 참 쉽게 더러운 코드를 적어 나갈 수 있다는 게 가장 큰 문제점인 것 같습니다.

페이스북은 기존 legacy(레가시)코드가 PHP로 작성돼 있기 때문에 단점들을 극복하기 위해 우주방위대급(?) 개발력을 투입해 HHVM이라는 가상머신을 만듭니다.

보통 기존 코드베이스에 쓰인 언어나 프레임워크가 비효율적일 경우 코드베이스 자체를 더 효율적인 언어나 프레임워크로 갈아엎는게 일반적이지만 페이스북은 PHP에서 더 나아가서 HHVM에서 도는 Hack이라는 언어를 개발했습니다.

Hack에서는 메서드 파라미터들에 타입을 추가할 수 있게 됐고 람다식 지원, 비동기 지원, type aliasing(타입 에일리어싱) 등 다양한 기능이 추가됐습니다. 이런 기능들을 추가했음에도 PHP보다 엄청난 성능 향상도 있었습니다. 컴파일이 안된다는 단점을 극복하기 위해 Static Analysis(정적분석) 관련 툴 등도 많이 개발했습니다.

무엇보다 개발자로써 페이스북에서 꼭 일하고 싶다라고 생각하게 만든 점은 이 모든게 오픈소스라는 점입니다.

페이스북만큼 빨리 자라고, 많은 유저가 쓰고 있는 서비스일수록 scalability(확장성)이 중요합니다. Facebook Messenger(페이스북 메신저)가 처음 나왔을때 서비스를 쓰기 시작한 사람들의 수가 우리나라 인구의 몇 십배고 게다가 realtime(실시간)으로 친구가 온라인인지 아닌지, 친구가 언제 마지막으로 들어와 있었는지 등등의 기능들을 다 지원하려다 보니 아키텍쳐가 어마어마 합니다.

현재 페이스북에서 풀타임 개발자로 일하고 있는 고등학교 선배에게 부탁해 면접 제안을 받았습니다.

리크루터에게서 이메일이 날아오고 한 2주 정도 후에 전화 면접이 잡혔습니다. 친절하게도 리크루터가 뭘 공부해야 하는지 알려줬습니다. 기초 알고리즘, 자료구조 뿐만 아니라 페이스북의 아키텍쳐와 스택에 대해서 공부라고 하길래, 2주동안 열심히 페이스북의 기술들에 대해서 공부했습니다. 특히 Erlang(얼랭)을 사용한 메신저의 아키텍쳐는 면접과는 별개로 개인적으로 굉장히 흥미롭게 읽었습니다.

2주 후 면접날, 새로 이사한 집에 인터넷이 아직 안 깔려있었기 때문에 학교 도서관의 방을 하나 빌려서 면접 한시간 전부터 들어가서 앉아있었습니다.

면접은 여러 명이서 함께 코딩을 할 수 있는 플랫폼인 CoderPad에서 봤습니다. 선택한 언어를 웹에서 바로 실행할 수 있게 돼 있는 온라인 IDE(통합개발환경)같은 거였습니다. 제 CoderPad링크를 열어놓고 잠을 잘 못 이뤄서 커피도 넉넉하게 준비했는데 예정된 시간이 됐는데 전화가 안 걸려왔습니다.

그리고 한 30분쯤 지나자 전화가 왔습니다. 인도인 억양을 가지고 있는 엔지니어였는데 대충 문제를 설명하더니 제가 문제를 푸는 걸 듣지도 않고 뭔가를 계속 타이핑했습니다.

일이 바빠서 그런 것 같은데 '면접에 늦어서 미안하다' 이런 사과도 못하고 바로 문제만 던져준 것까진 이해하지만 던져준 문제를 풀고 있는 제 말을 전혀 안듣는 것 같았습니다. 문제 자체도 리크루터가 알려준 그런 scalability, system design(시스템 디자인) 문제는 전혀 안나오고 왠 string manipulation(문자열 조작) 문제였습니다. 문장이 주어지면 그 문장에 단어를 몇 개 만들 수 있는지 그런 문제였습니다.

문제는 String manipulation이 아니라 면접관이었습니다. 원래 코딩 면접을 보게 되면 내가 어떤 생각을 가지고 문제에 접근하는지 말을 계속 해야합니다. 그냥 말없이 코딩을 하기보다는 꼭 말을 하라고 합니다. 그래야 면접관이 지원자가 어떤 방식으로 문제를 푸는지, 혹시 잘못된 방향으로 가고 있으면 도와줄 수도 있기 때문입니다.

그런데 이 면접관은 건성으로 "Yeah" "OK" 이렇게 추임새 넣듯이 대충대충 건성으로 얘기하더니 나중에는 그 추임새조차 사라지고 저 혼자만 벽에 대고 떠드는 듯한 상황이었습니다. 기분이 상했지만 최선을 다해서 문제를 풀었는데 면접관은 제가 쓴 코드를 제대로 읽지도 않고 또 다른 문제를 풀어보라고 하고는 자기는 다시 열심히 타이핑을 시작했습니다.

그리고 5분이 지나자 아직 두번째 문제를 열심히 설명하고 있는 제 말을 끊더니 "미안한데 면접 시간이 끝나서, 가봐야 할 것 같아. 바이!"라고 하고 갔습니다.

지금 생각하면 면접관이 아마 critical한(심각한) 버그를 고쳐야 하는 상황에 처해 있었거나 그런 것 같습니다. 실제로 면접 보기 바로 전날 페이스북에 15분 정도 outage(사고)가 있었습니다.

하지만 그런 경우라면 reschedule(일정 재조정)을 해서라도 앞으로 조금 면접자를 배려해 줬으면 좋겠습니다. 페이스북 면접 바로 다음날에 본 Uber(우버) 면접과는 전혀 상반되는 경험이라 더욱 그랬습니다.

나중에 고등학교 선배한테 전화해서 자초지종을 설명하니 한숨을 쉬면서 가끔 그런 경우가 있다고 했습니다. 그 선배는 마이크로소프트에서 비슷한 경험을 했다고 합니다. 이럴 때는 리크루터한테 직접 이메일을 보내서 이런 상황이었으니 다시 면접을 보게 해달라고 부탁해도 된다고 합니다.

제가 본 면접 중 단언컨대 여러 면에서 최악이었지만, 이런 경험도 해봐야 최악의 상황에 직면했을 때 재치있게 극복할 수 있는 방법을 배울 수 있는 것 같습니다.

<저작권자 © ‘돈이 보이는 리얼타임 뉴스’ 머니투데이. 무단전재 및 재배포, AI학습 이용 금지>