이제 또 다시 도비에요
백수생활 한 달 만에 드디어 풀타임 직장으로 이직에 성공했다! 그동안 여러 회사들과 계속 면접은 보고 있긴 했는데 그중에 가장 가고 싶었던 보다폰으로부터 오늘 잡 오퍼를 받았다. 보다폰은 외국계 통신사가 없는 우리나라에선 낯선 이름이지만, 매출액상으로 따지면 전 세계 2위 규모의 통신사업자이고 총 종업원 수는 9만명이 넘는 큰 회사이다. 축구팬들이라면 한때 맨유의 스폰서였던 회사로 기억할 수 있을지도.. 아무튼 그래서 처음 서류 통과 메일을 받고 코딩 테스트 볼 때까지만 해도 인터뷰 과정을 경험하는데 의의를 두자고 생각했었는데 이렇게 최종 합격할 거라고는 상상도 못 했다 ㄷㄷ
보다폰의 인터뷰 프로세스
폰 스크리닝 인터뷰 -> 코딩 테스트 -> 기술면접 -> 페어 프로그래밍 인터뷰까지 총 네 단계의 긴 과정을 거치면서 이 정도까지는 내가 확실히 알고 있구나 싶어서 뿌듯하기도 했고, 내가 부족한 부분에 대해서 깨달을 수 있었어서 면접 결과와는 별개로 인터뷰 과정에서부터 정말 많은 걸 얻은 기회였다.
폰 스크리닝 단계는 여느 회사와 크게 다를 것 없이 리크쿠터가 내 CV에 대해 체크하고 계속 인터뷰 과정을 진행할 의사가 있는지를 묻는 30분 가량의 짧은 인터뷰였다. (이 인터뷰는 하도 많이 해서 별로 이젠 떨리지도 않고 따로 준비할 필요도 없다..ㅋㅋ) 이 단계를 통과하고 나서 코딩 테스트 과제를 받았고, 리트코드와 비슷한 테스트 사이트에 접속해서 문제를 풀고 나면 바로 답변이 제출되는 시스템이었다. 그동안 이 단계가 너무 자신이 없었어서 백수기간동안 리트코드 문제를 엄청 풀었었는데, 리트코드 Easy - Medium 수준의 난이도였고, 예전에 봤었던 Yelp 코딩 테스트보다는 훨씬 쉬운 수준이었다. 여러 문자열과 오브젝트를 문제의 지시사항에 따라 처리한 후 처리된 결과들을 조합해 함수에 인자로 넘기면 정답이 도출되는 재미있는 챌린지였는데, 마지막에 Promise로 선언된 함수를 async await을 활용해 처리하는 게 좀 어려웠다.
(*코딩 테스트는 리트코드의 아래 링크의 Top Interview Questions 문제들을 풀면서 준비했다)
코딩 테스트를 통과하고 나서는 보다폰의 시니어 엔지니어와 함께 테크니컬 인터뷰를 했다. 이 때는 직접 코딩을 하지는 않고, 자바스크립트 및 웹 프로그래밍 전반에 대한 질문, 지난 프로젝트에서 어떤 일을 담당했고 동료들과 어떻게 일을 진행 해나갔었는지에 대한 질문들을 받았다. 프로그래밍 기초가 얼마나 탄탄한지, 일을 할 때 태도가 어떤지를 중점적으로 보기 위함인 것 같았다. 예전엔 채 30분을 못 채웠던 단계였었는데 이번엔 주어진 45분을 꽉 채우다 못해 시간을 초과했어서 이 인터뷰는 마치자마자 바로 통과했겠구나 싶었다. 45분 동안 무려 열네개의 질문을 쉴 새 없이 받았는데 거의 대부분을 막힘없이 대답했어서 그동안 잘 느끼진 못했지만 어느 정도 내 역량이 쌓이긴 했었구나 싶어서 뿌듯했다. 인터뷰를 마치고 바로 두 시간 뒤에 리크루터로부터 합격했다는 전화를 받았고, 자바스크립트에 대한 지식이 탄탄하게 잡혀있고 함께 일하기 즐거운 성격인 것 같다는 좋은 평을 받아서 기뻤다.
*테크니컬 인터뷰 질문 리스트
1) Testing
- How do you test your code?
- what kind of test that I have written & what framework did I used for?
2) Frontend Framework
- What is functional component in React?
- What is React hook?
- What kind of Frontend framework that I have used? What's your preference?
3) Javascript
- What is bind, this?
- What's the difference between var vs let vs const
- What is promise? async await? Are there any different ways of dealing wiht asynchronous code?
- What is the most preferable feature of JS ES6?
- What's the unique feature of arrow function?
4) Web programming
- What is http?
- Explain about http request methods and response codes
5) General questions
- What techstack that I want to master in the future?
- How I collaborate with other colleagues? (especially with non-technical people)
- How I approach to new tech stack or development environment? (Dealing with legacy codes)
그리고 대망의 파이널 인터뷰... 보다폰의 테크팀 리더, 시니어 엔지니어와 함께 간단히 작동하는 웹사이트를 리액트로 만들어보는 두 시간짜리 페어 프로그래밍 인터뷰였다. 인터뷰를 시작하면 어플리케이션 요구 사항이 주어지고, 요구사항을 분석 후 어떻게 만들어 나갈지에 대해 설명한다. 그리고 실제 코드를 작성하기 시작하면 다른 프로그래머들과 계속해서 의견을 주고받으면서 내가 잘못 접근하고 있는 방향이 있다면 리뷰에 따라 내 코드를 수정해나가는 방식으로 진행됐다. 일단 api url에서 유저 데이터를 받아온 후 받아온 유저를 정의된 ui에 따라 표시하고, edit button이 클릭되면 유저 정보를 업데이트하는 수정모드로 변하는 대시보드를 만드는 과제였다. fetch api를 이용해 유저 데이터를 받아오는 건 금방 해결했는데, sub component를 어떻게 구성할 건지에 대한 접근을 잘못하는 바람에 시니어 엔지니어의 도움을 받아 코드를 리팩토링했다. 비록 처음엔 문제 해결 방향에 잘못 접근했었지만, 피드백을 빠르게 캐치하고 이를 코드에 반영하는 태도에서 좋은 점수를 받았다고 했다. 두 시간 동안 주어진 요구사항들을 다 해결하긴 했지만, 이 코드를 어떻게 더 나은 방향으로 개선할 수 있을지, 어떻게 테스팅할 수 있을지, 웹 접근성 관점에서 보완할 점은 없는지에 대한 추가 질문들에 대해 자신감 있게 대답하지 못했어서 결과에 자신이 없었다. 그래도 이 단계에서 더 코드를 깔끔하게 작성하는 es6팁을 많이 얻었고, 시니어 프로그래머들의 생각하는 방식을 엿볼 수 있었어서 비록 합격하지 못하더라도 얻은게 많았다고 느꼈던 인터뷰였다.
저번 주 금요일에 최종 인터뷰를 봤고 통과했다면 오후에 바로 연락을 받을 수 있을 줄 알았어서 주말 동안엔 다른 인터뷰 준비나 잘해야겠다고 체념하고 있었다. 어제까지도 연락이 없기에 진짜 떨어졌나보다 했는데 오늘 아침에 리크루터로부터 인터뷰 결과에 대한 피드백을 받았다. 사실 Mid-level engineer role로 지원했던 거였는데 인터뷰 피드백에 따르면 아직 시니어 레벨이라기엔 경험치가 모자란 것 같아서 주니어 레벨로 잡 오퍼를 주겠다고 했다. 아직은 역량이 좀 부족하지만 팀에 합류하고 나면 빠르게 시니어로 성장할 포텐셜이 보인다는 피드백을 받아서 무엇보다도 기뻤다. 게다가 주니어 레벨이긴 하지만 내 예상 연봉보다도 높게 오퍼를 줘서 망설이지 않고 리크루터와 전화 통화하면서 바로 오퍼를 수락하기로 했다.
하고있던 컨트랙터 일에서 주니어 치고는 꽤 괜찮은 시급을 받고 있었던데다 계속하려면 계약을 연장할 수 있던 상황이었고 일을 그만둔 후에도 같은 부트캠프를 졸업한 친구가 컨트랙터로 일해볼 생각이 없냐며 제안을 주기도 했었지만 좀 더 안정적인 환경에서 내 경험치를 차근차근 쌓을 수 있는 곳으로 옮기고 싶었다. 지금껏 한 번도 오랜 기간 백수였던 적이 없어서 이러다 평생 놀면 어떡하지라는 걱정이 있긴 했었는데, 잠시 일을 멈추고 부족했던 부분을 재충전하는 시간을 갖길 잘했다는 생각이 든다. 첫 출근일은 다음 달 초로 잡혀있어서 아직 시간이 좀 남아있으니 그동안 인터뷰 과정 중에 부족했다 느꼈던 부분들을 채우며 새 커리어를 시작할 준비를 해야겠다.