신입 프론트엔드 개발자의 면접 후기 - 3

이전 게시글에서 다룬 P사의 면접 후기에 이어 L사의 면접 후기가 너무나도 길어진 관계로, 별도의 게시글로 분리하여 작성한다.

L사

L사는 의료 인공지능 기술을 바탕으로 하는 스타트업이다.

채용 프로세스

서류 제출 → 1차 실무자 면접 → 1차 라이브 코딩 테스트 → 2차 기술 과제 → 3차 임원 면접 → 최종 합격

  • L사에 근무하고 있는 지인의 추천으로 채용 프로세스가 진행되었다. 지인에게 이력서를 전달한 것이 6월 말이었는데, 이런 저런 사정으로 실무자 면접이 7월 말에 진행되었다.

1차 실무자 면접

  • 실무자 면접은 세 명의 면접관이 참석하는 다대일 면접으로 진행되었으며, zoom을 사용하여 비대면으로 진행되었다. 두 명의 면접관은 외국인인 관계상 영어로 면접이 진행되었다.
  • 면접은 기본적으로 résumé walkthrough 방식으로 진행되었으며, 약간의 인성 면접 질문이 추가된 형태였다. 생각나는 면접 질문들은 다음과 같다:
    • 영어로 자기소개해주세요.
    • 왜 프론트엔드 개발을 하려고 하나요?
    • 석사과정에서 진행한 연구에 대한 소개해주세요.
    • 사이드 프로젝트에 대해 소개해주세요.
      • 왜 Redux를 사용하였나요?
      • Redux-saga를 사용하며 느낀 점은 무엇이었나요?
      • (사이드 프로젝트 링크에 접속한 면접관의 질문) 작동하지 않는다고 뜨는데 왜 그런가요?
  • 사내 추천으로 진행되었기 때문에, 추천인과 관련된 질문도 받았다:
    • (추천인)이 당신에 대해 극찬하는 추천서를 작성했는데요, (추천인)과는 어떻게 알게 되었나요?
    • (추천인)과 어떤 프로젝트를 진행하였나요?
    • (추천인)에 대해서 어떻게 생각하나요?

1차 라이브 코딩 테스트

  • 면접이 약 30분 가량 진행된 시점에, 라이브 코딩 테스트를 진행하겠다는 안내를 받았다. 사전에 코딩 테스트를 안내받은 적이 없었던 관계로 당황스러웠지만, 어차피 P사의 합격 통보를 받은 상태였기 때문에 "이것도 경험이다"는 생각으로 테스트에 임했다.
  • 코딩 테스트의 문제는 아래와 같은 베이스 문제가 있고, 여기에 조금씩 제약사항이 추가되는 소위 "구글 스타일"의 라이브 코딩 테스트였다.
    • 임의의 양의 정수 n이 주어집니다. (단, n < 150)
    • 다음 조건을 만족하는 배열을 생성하는 함수 generateRandomArray()를 작성하세요:
      1. 배열의 길이는 2n + 1입니다.
      2. 배열의 원소들은 랜덤한 정수입니다, Math.random()을 사용하세요.
      3. 배열의 원소들은 [-100, 100] 구간 내에 존재합니다.
    • 추가 제약사항 (위 조건을 만족한 함수를 작성한 뒤에 하나씩 공개됨)
      1. 배열의 원소들이 단 한 번씩만 등장하게 만들어주세요.
      2. 이번에는, 단 하나의 원소를 제외하고 나머지 원소들이 두 번씩 등장하도록 수정해주세요.
      3. 배열의 원소들이 랜덤한 위치를 가지도록 수정해주세요, 이 때 위치를 변경하는 알고리즘은 in-place로 작성해주세요.
  • 위 라이브 코딩 테스트가 끝난 다음에는, 추가적인 알고리즘 관련 사고력을 확인하는 질의응답을 진행하였다:
    1. generateRandomArray()로부터 생성된 임의의 배열에서 단 한 번 등장한 원소를 찾는 방법은 무엇일까요?
      • 나는 hash map을 사용해서 단 한 번 등장한 원소를 찾아낼 수 있을 것이라고 답변하였다.
    2. 답변하신 방법의 시간 복잡도와 공간 복잡도는 어떻게 될까요?
      • 기본적으로 배열을 최소 한 번은 iterate해야 하므로 시간 복잡도는 O(n), 공간 복잡도는 최악의 상황에서 O(n)이 될 것이라고 답변하였다.
    3. 그렇다면 공간 복잡도가 O(1)이 되는 알고리즘은 어떻게 될까요?
      • 나는 한 번에 정답이 떠오르지 않았고, 면접관이 "bit operation"이 힌트라고 귀띰해주었다.
      • 면접관의 힌트를 듣고 나서, XOR을 사용하면 된다고 답변하였다.
  • 라이브 코딩 테스트는 CodeInterview라는 플랫폼을 사용하여 진행되었다. 알고리즘 문제의 난이도는 높은 편이 아니었지만, 내가 자바스크립트를 써서 알고리즘을 풀어본 적이 많지 않아 어려움이 있었다.
  • 다행스럽게도, 면접관 분들께서 문제 해결 능력 자체가 더 중요하다는 입장이셨다. 문제 풀이 과정에서 내가 잘못된 문법을 사용하는 경우 면접관께서 즉석에서 수정해주셨다.
  • 전반적으로 화기애애한 분위기에서 면접이 진행되었다. 우선 사내 추천으로 채용 프로세스가 진행되었다는 점도 영향을 미쳤을 것 같고, P사의 합격 통보를 받은 상태에서 실무자 면접에 임해서 그런지 개인적인 부담이 덜했다.

2차 기술 과제

  • 1차 합격 통보를 받은 뒤, 3일 동안 수행하여야 하는 기술 과제를 안내받았다. 기술 과제는 GitHub을 사용하여 진행 상황이 공유되었으며, 과제 진행 과정에서의 질의응답은 GitHub issues를 통해 진행되었다.
  • 이 때 쯤이 8월 초순이었는데, 나는 8월 16일부터 P사에 출근하여야 하는 상태에 있었다. 따라서 채용 담당자에게 현재 사정을 설명하고, 가능한 빠르게 채용 프로세스를 진행할 수 있는지를 문의하였다. 다행스럽게도 채용 담당자 분께서 사정을 잘 이해해주셔서 속전속결로 채용 프로세스가 진행되었다.
  • 기술 과제는 외부에 공개하지 말아달라는 안내를 받아, 자세하게 설명하기는 어렵다. 가급적 추상적인 형태에서 과제의 내용을 정리하자면 다음과 같다:
    • HTML Canvas에 마우스의 클릭 및 드래그를 하여 임의의 도형을 그릴 수 있어야 한다. 이 때, 사용자가 그린 도형들의 정보가 프론트엔드 시스템에 의해 관리될 수 있어야 한다.
    • 사용자가 그린 도형 중 몇 개를 선택해서 임의의 파일 형태로 저장 혹은 불러오기할 수 있어야 한다.
    • 사용자가 그린 도형 중 몇 개를 선택해서 합치기를 지원하여야 한다. 이때 도형 합치기 알고리즘은 외부 라이브러리를 사용할 수 있다.
  • HTML Canvas는 처음이었기 때문에 처음 요구사항을 읽었을 때는 당황스러웠다. 하지만 구글링을 하면 나오는 수많은 소스들의 덕분으로 큰 어려움 없이 과제를 진행할 수 있었다.
  • 도형 합치기에 대한 부분은 약간 까다로웠다. 관련 내용을 찾아보기 위해 "merging two polygons" 혹은 "polygon union" 등으로 검색했는데 원하는 라이브러리가 등장하지 않았다. 이 부분은 issue를 개설하여 면접관에게 도움을 요청하였고, 면접관께서 특정한 키워드로 검색해보면 좋겠다고 답변해주셔서 원하는 라이브러리를 찾을 수 있었다.
  • 나는 수요일 오후 6시에 기술 과제를 시작했기 때문에, 토요일 오후 6시까지 기술 과제를 다듬을 수 있었다. 하지만 금요일 오후 2시에 과제를 제출하고 검토를 요청하였다. 개인적으로, 그 어떤 면접관도 주말 오후 6시에 과제 제출을 처리하고 싶지 않을 것이라고 생각했다. 따라서 면접관들이 주중 일과 시간에 기술 과제를 처리할 수 있도록 가능한 서둘렀다.
    • 처음 제출했을 때 면접관께서 "README.md가 아직 미완성인 것 같습니다"라고 코멘트를 주셨고, 다행히 시간이 많이 남아있어 README 파일을 작성하여 재제출할 수 있었다.
  • 그 다음 주 월요일, 그리고 화요일에 post-assignment interview를 GitHub issues로 진행하였다. 질문에 대해서는 다음과 같다:
    • 월요일에는, 과제에 optional로 지정된 요구사항이 두 개 있었는데, 해당 요구사항 두 개를 실제로 구현하기 위해서 어떠한 접근법을 사용할 것인가에 대한 질문을 받았다.
    • 화요일에는, 내가 실제로 작성한 코드에 대한 질문을 두 개 받았다. 첫 번째는 배열로 관리되고 있는 도형 정보들에 consistent identifier를 추가하기 위해 어떻게 할 것인지에 대한 질문이었고, 두 번째는 일부 useEffect 훅을 별개의 파일로 분리하여 선언한 것에 대한 design rationale 질문이었다.
  • 모든 질의응답이 끝난 뒤, 면접관으로부터 "질의응답을 종료하고, 다음 단계에 대한 안내를 주겠다"는 답변을 받았고, 몇 시간 뒤에 인사팀으로부터 최종 면접 일정을 조정하는 메일을 받았다.

3차 임원 면접

  • 임원 면접은 그 주 목요일에 빠르게 진행되었다. 면접은 현 대표님, 전 대표님, 그리고 최고 연구 담당자(Chief of Research)께서 참석한 다대일 면접이었다.
  • 이미 P사의 오퍼 레터를 가지고 있었던 만큼 긴장할 이유는 없었지만, 엄청나게 긴장했다. 너무 긴장한 관계로 어떤 질문을 받았는지 잘 기억나진 않지만, 대강 추려보면 다음과 같다:
    • 자기 소개
    • L사에서 어떤 기술적인 성장을 기대하나요?
    • 10년 뒤에 어떤 사람이 되어있을 것 같나요?
    • 왜 박사과정을 하지 않았나요?
    • 어떠한 장기적인 목표를 세우고 L사에서 근무할 계획인가요?
    • HCI 연구자의 관점에서, 우리 프로덕트의 사용성을 개선해볼 만한 것은 무엇이 있나요?
    • 연구실 구성원들과 비교했을 때, 내가 이것만큼은 남들보다 뛰어나다고 생각하는 게 있나요?
    • 공부를 하는 스타일은 어떤가요? 배움에 있어 롤 모델이 있었나요?
    • 전문연구요원으로 지원했는데, 전문연구요원이 끝나면 다시 학계로 돌아갈 생각이 있나요?
    • 프론트엔드 개발자로 지원했는데, 백엔드 기술에는 관심이 없나요?
    • 회사에 궁금한 점이 무엇인가요?
      • 나는 회사의 모토인 "끊임없이 성장하는 사람들의 모임"이라는 점을 들며 "끊임없이 성장하기 위해서는 무엇이 필요한가요?"를 여쭤보았다.
    • (추천인)과 어떤 관계에 있나요?
  • 놀랍게도 임원들에게 내가 P사에서 오퍼 레터를 받은 사실과, 16일부터 출근해야 한다는 점이 공유되어 있었다. 한 임원 분께서는 내게 "최대한 빨리 결정해서 결과를 알려드리겠다"고 말씀해주셨고, 면접이 끝난 뒤 엘리베이터를 기다리는 나에게 "합격했으니 다른 회사 오퍼를 알려달라"고 말씀하셨다. 지금까지 받아본 합격 통보 중에서 초고속이었다.

느낀 점

  • 사실 나는 L사에서 채용될 것이라고 기대하고 있지 않았다. 내가 추천인에게 이력서를 건네주었던 것이 6월 말인데, 거의 한 달 동안 아무런 소식도 없었기 때문이다. 심지어 서류 합격 연락을 받았을 때 나는 이미 P사에서 오퍼 레터를 받은 이후였다. 따라서 처음에는 L사의 채용 프로세스를 취소하려고 했으나, 추천인의 강력한 권고와 "면접은 진행했으면 좋겠다"는 요청으로 채용 프로세스를 계속 진행하였다.

  • 실무자 면접이 "내가 들어갈 팀의 첫 인상을 확인하는 과정"과 같은 느낌이었다면, 기술 과제를 진행하는 과정은 마치 "내가 들어갈 팀과의 케미가 맞는지 확인하는 과정"과도 같았다. 면접관들이 내 질의응답에 따봉 이모티콘(👍)을 눌러주었을 때의 기분은 정말 환상적이었다.

  • 또한 인사팀, 실무자, 그리고 임원진이 전부 나서서 나의 채용 프로세스가 가능한 빠른 시일 내에 끝날 수 있도록 관심과 배려를 받는다는 점이 인상적이었다.

  • 따라서,

    1. 추천인의 강력한 회사 추천
    2. 기술 과제를 진행하며 느낀 "팀과의 케미"
    3. 많은 배려를 받은 채용 프로세스

    ...와 같은 이유로 오퍼 레터를 받지도 않은 시점에서 L사를 최종적으로 선택하게 되었다.

결론

내 커리어에 있어서 첫 회사를 찾아가는 과정은 다소 험난했다. 합격할 것이라고 기대했던 T사에서는 병역 관련 이슈로 채용이 취소되었고, 연달아 V사에서의 불합격 통보를 받았다. 그럼에도 불구하고, P사에서의 합격 통보는 나로 하여금 자신감을 충전할 수 있는 전환점이 되었고, 이후 L사에서 합격 통보를 받으며 나의 취업 계획이 마무리되었다.

이 글을 읽는 독자들도, 누군가는 쓰라린 아픔을 안고 있을 것이고, 다른 누군가는 합류할 회사를 선택하는 기쁨과 함께 이 글을 읽고 있을 것이다. 나의 면접 후기가 "나름 해피 엔딩"으로 끝맺은 것처럼, 모두가 해피 엔딩의 결실을 얻을 수 있기를 바란다.