최종 면접이 다섯 시간이라고요?
영국에서 처음으로 본 기술 면접에서 빛의 속도로 탈락하자 정신이 바짝 들었다. 아쉽게 탈락했다면 그냥 ‘이 회사가 나와 안 맞았나 보다’라고 생각하고 넘어갈 수도 있었겠지만, 그 정도가 아니었다. 영국의 기술 면접은 예상보다 훨씬 어려웠고, 그에 비해 내 실력은 생각보다 한참 모자랐다. 그동안 내가 면접을 너무 쉽게 생각했다는 걸 단숨에 깨달았다. 그래도 다행히 아직 면접을 진행 중인 회사가 꽤 많이 남아있었으므로, 남은 면접에 최선을 다하자며 다시 마음을 다잡았다.
여러 면접을 동시에 진행하느라 어느 때보다 바쁜 하루하루를 보냈다. 채용 담당자와의 1차 면접이 잡히면 그전에 회사와 직무에 대한 조사를 하고, 2차 기술 면접이 잡히면 미리 관련 주제를 검색해 공부했다. 하지만 부족한 실력을 단기간에 끌어올리는 건 무리였기에, 채용 담당자와의 면접은 잘 통과해도 기술 면접 단계를 넘지 못하는 경우가 대부분이었다. 그렇게 연이은 탈락 소식에 지쳐가던 와중에 좋은 소식이 들려왔다. 한 회사에서 2차 면접을 통과해 최종 면접에 초대받은 것이다.
최종 면접은 직접 회사 사무실에 가서 보는 면접이라 on-site 면접이라고도 불리는데, 보통 짧으면 3시간, 길면 5~6시간까지도 진행된다. 이 면접은 상당히 길기 때문에 지원자뿐 아니라 회사에서도 많은 시간과 공을 들이는 면접이다. 회사에서 시간은 곧 돈이므로 아무 지원자나 불러서 장시간의 면접을 진행하는 건 상당한 낭비다. 그래서 2차 기술 면접에 어느 정도 난이도가 있는 코딩 테스트를 제출해 지원자가 최종 면접에 부를 만한 실력을 갖춘 사람인지 판단한 뒤, 이를 통과한 지원자만 최종 면접에 초대하는 것이다.
최종 면접은 한 시간마다 다른 방식으로 진행되는데, 일반적으로 이 중 인성 면접은 한 시간이 전부이고 나머지는 모두 기술 면접이다. 이 단계에서 개발자가 흔히 접할 수 있는 기술 면접은 대표적으로 세 가지 방식이 있다.
1. 실시간 코딩 면접
실시간으로 면접관이 내는 문제를 코드로 구현하는 방식. 2차 면접과 비슷한 형식이지만 문제의 난이도를 높이거나 스타일을 바꿔서 낸다.
2. 이론적인 기술 질문
코딩 문제가 아닌 이론적인 기술 질문을 여러 개 묻고 답하는 방식. 컴퓨터 과학 지식부터 특정 프로그래밍 언어 관련 지식까지 광범위한 분야에서 다양한 질문이 나온다.
예) 브라우저에 www.google.com을 치면 페이지가 로딩되기까지 뒤에서 어떤 일들이 일어나나요?
3. 시스템 설계
마찬가지로 작은 부분의 코딩 문제가 아니라 전체 시스템을 어떻게 만들 것인지 설계하는 방식. 보통 문제는 굉장히 간단하게 내지만, 제대로 설계하기 위해서는 지원자가 여러 가지 질문을 통해 더 자세한 요구 사항을 알아내야 한다.
예) 트위터 시스템을 설계하시오.
내가 초대받은 최종 면접은 5시간짜리였다. 이 단계는 면접 시간이 길 뿐 아니라 난이도도 2차 면접보다 훨씬 높아서 더 많은 공부가 필요했다. 하지만 당시 나는 다른 회사들과 1, 2차 면접을 계속 보고 있었기 때문에 이 면접 준비에 할애할 시간이 턱없이 부족했다. 그렇다고 모든 걸 내려놓고 합격할지 아닐지도 모르는 면접에 몰방할 수는 없었다. 결국 준비가 충분히 되지 않은 상태로 면접일이 다가왔고, 바짝 긴장된 상태로 나의 첫 최종 면접을 볼 회사 사무실에 도착했다.
첫 시간은 이론적인 기술 질문을 하는 시간이었는데, 시작부터 예상치 못한 어려운 질문들이 쏟아졌다. 차라리 코딩 문제면 당장 답을 몰라도 뭐라도 한 줄 적으며 시간을 끌 수 있을 텐데, 말로 대답해야 하는 면접이라 더 까마득했다. 정답은 몰라도 어떻게든 대답은 해야 했기에 전 회사에서 일했던 경험을 더듬어보며 비슷한 답안이라도 찾으려 안간힘을 썼다. 그렇게 해서 얼추 대답한 질문도 있었지만, 감도 못 잡고 헤맨 질문이 대부분이었다. 면접관이 이것도 대답 못 한다고 나를 형편없다고 생각할 걸 떠올려보니 부끄러운 마음에 얼굴이 빨갛게 달아올랐다. 쥐구멍이라도 있으면 숨고 싶은 심정이었다. 한 시간이 열 시간처럼 길게 느껴졌다.
‘아, 집에 가고 싶다...’
면접 첫 시간이 끝나고 제일 먼저 든 생각이었다. 어떻게든 질문에 대답하려고 바쁘게 머리를 굴리다 보니 한 시간 안에 모든 체력이 다 소진된 것 같았다. 한 시간 동안 쉬지 않고 달리기를 해도 이보다 힘들지는 않을 것이다. 이렇게 힘겹게 한 시간을 넘겼는데 이런 면접이 네 시간이나 더 남아 있다는 사실이 미친 듯이 막막하게 느껴졌다. ‘어차피 망한 것 같은데 그냥 포기하고 집에 간다고 할까?’ 하고 진지하게 고민하던 찰나에 다음 면접관이 들어왔다. 더 이상 고민할 시간이 없었다. ‘그래, 기왕 시작한 거 끝까지 해야지.’ 다시 정신을 차리고 마음을 가다듬었다.
하지만 남은 면접도 만만치 않았다. 실시간 코딩 면접 두 시간, 시스템 설계 면접 한 시간, 그리고 인성 면접 한 시간이 남아 있었다. 첫 면접만큼 괴로운 시간이 계속되었다. 면접 하나가 끝날 때마다 다 때려치우고 도망가고 싶은 마음이 턱끝까지 올라왔다. 그때마다 다시 마음을 바로잡고, 어떻게든 끝내자는 생각으로 버텼다. 여기까지 와서 이대로 포기해 버리면 나 자신에게 너무 창피할 것 같았다. 스스로에게 당당하기 위해서라도 끝까지 버텨야 했다.
그렇게 힘겨운 다섯 시간의 면접을 겨우 마치고 사무실을 나오며 나는 예감했다. 이 면접은 떨어졌을 거라고. 준비되지 않은 상태로 장시간의 기술 면접을 본다는 게 얼마나 힘든 일인지 몸소 경험으로 깨달았다. 집에 도착하니 그간의 긴장이 싹 풀려 온몸의 힘이 다 빠졌다. 침대에 털썩 주저앉아 거울을 보니 몇 시간 만에 눈 밑 다크서클이 한층 짙어져 보였다. 그래도 온 힘을 다해서 할 수 있는 만큼 다 했다는 걸 짙어진 다크서클이 증명해 주었다. 면접 결과는 좋지 않더라도, 도망치지 않고 끝까지 면접을 잘 마친 나 자신에게 이 말을 꼭 해주고 싶었다.
“고생 많았어. 다음엔 더 잘할 거야.”