제1국 복기하기

Ji Kim·2022년 3월 16일
5

들어가며

흔히 바둑에선 대국이 끝난 뒤, 앞서 놓은 순서대로 돌을 두어보는 일을 복기(復棋)라고 한다. 승패가 이미 결정 난 바둑판을 보며 무엇을 잘못했고 무엇을 배울 수 있는지 돌아보는 시간을 가지며, 바둑뿐 아니라 인생의 실력을 기른다고 한다.

이번 글은 지난 9개월간 취업이라는 대국을 회고하며, 내가 느꼈던 아쉬웠던 점과 잘못했던 점 그리고 잘했던 점을 열거한 일종의 복기록(復棋錄)이다. 이 글을 통해, 오늘의 내가 성장하기를 그리고 미래의 내가 오늘의 실수를 상기하기를 희망한다.

나에 대해서

미국 보스턴 소재의 대학교에 재학하며 경제학과 컴퓨터 과학(Computer Science)을 복수 전공하고 있다.

친구들에게 자신이 알고 있는 수포자들의 이름을 대라고 한다면, 내 이름이 세 손가락 안에 든다고 자신할 수 있을 정도로 이과적 사고와는 거리가 멀다.

미적분학을 세 번이나 들었지만, 여전히 로그함수를 정확히 이해하지 못했으며 경제통계와 이산수학에서 C+를 받은 화려한 이력이 있다.

타임라인

2021.07.21 - 아마존 핀테크 리쿠르터 연락
2021.07.28 - 아마존 핀테크 1차 OA 응시 및 합격 통보
2021.08.16 - 아마존 핀테크 2차 폰스크린 응시 및 합격 통보
2021.09.01 - 아마존 핀테크 리쿠르터 연락 두절
2021.10.15 - 구글, 메타, 아마존 서류지원
2021.10.27 - 마이크로소프트 서류지원
2021.11.09 - 구글 서류합격 및 1차 OA 초대
2021.11.12 - 메타 서류합격 및 1차 폰스크린 초대
2021.11.15 - 구글 1차 OA 응시
2021.11.17 - 구글 1차 OA 합격 및 온사이트 초대
2021.11.24 - 아마존 서류합격 및 1차 OA 초대
2021.11.26 - 아마존 1차 OA 응시
2021.12.01 - 메타 폰스크린 인터뷰 응시
2021.12.03 - 아마존 2차 OA 응시
2021.12.03 - 메타 폰스크린 인터뷰 합격 및 온사이트 초대
2022.01.05 - 구글 온사이트 응시
2022.01.06 - 아마존 OA 합격 통보 및 온사이트 초대
2022.01.11 - 메타 테크니컬 온사이트
2022.01.14 - 메타 인적성 온사이트
2022.01.19 - 메타 최종 불합격
2022.01.21 - 어펌 서류 지원
2022.01.24 - 아마존 온사이트 응시
2022.01.25 - 마이크로소프트 서류합격 및 1차 폰스크린 초대
2022.02.01 - 구글 추가 인터뷰 요청
2022.02.02 - 어펌 서류합격 및 1차 폰스크린 초대
2022.02.08 - 아마존 최종 합격
2022.02.10 - 마이크로소프트 1차 폰스크린 응시
2022.02.11 - 구글 추가 인터뷰 응시
2022.02.14 - 마이크로소프트 폰스크린 합격 및 온사이트 초대
2022.02.15 - 어펌 1차 폰스크린 응시
2022.02.16 - 어펌 폰스크린 합격 및 온사이트 초대
2022.02.24 - 마이크로소프트 온사이트 응시
2022.02.24 - 마이크로소프트 최종 합격
2022.03.01 - 어펌 온사이트 응시
2022.03.02 - 팔란티어 리쿠르터 연락 및 1차 폰스크린 초대
2022.03.03 - 구글 최종 불합격
2022.03.08 - 어펌 최종 합격
2022.03.12 - 팔란티어 1차 폰스크린 응시
2022.03.13 - 팔란티어 1차 폰스크린 합격 2차 폰스크린 초대
2022.03.15 - 팔란티어 2차 폰스크린 합격 온사이트 초대

지원절차

서류 지원

작년 9월부터 약 150여 곳에 달하는 회사에 지원서류를 제출했다. 누구나 알 법한 회사부터 이름을 들어도 갸우뚱할 회사까지 정말 다양한 회사들에 이력서를 보낸 것 같다.

학생비자 신분에 미국에서 그렇다 할 인턴 경력이 없었기에 지원 초반에는 나 스스로 움츠러들어 흔히 말하는 빅테크 기업 지원을 꺼렸었다. 하지만 밑져야 본전이라는 생각과 함께 10월 즈음부터 모든 회사에 지원서류를 넣기 시작했고, 예상과는 다르게 작은 회사들보다는 큰 회사들에서 회신을 받았다.

모든 것이 끝난 이제 와서 돌이켜보면, 부족한 인턴 경력을 만회하기 위해 다양한 개인 프로젝트를 구상한 경험을 인사 담당자들이 좋게 봐준 것 같다.

코딩 테스트

서류전형에서 통과를 한 이후, 당락은 전적으로 코딩 테스트로 결정됐다. 1차 코딩테스트는 각 회사별로 전형이 달랐는데, 온라인 시험(Online Assessment), 45분 비대면 코딩 테스트 혹은 30분 리쿠르터 폰스크린 인터뷰 등 다양한 방식으로 후보군을 추려냈다.

코딩 테스트는 아래의 자료들을 중점으로 준비했다.

Leetcode
Neetcode
나동빈 알고리즘 강의
Blind 75

유명 알고리즘 채점 사이트인 Leetcode 프리미엄으로 알고리즘과 데이터 구조 유형별로 문제를 풀어본 뒤, 코딩테스트가 가까워질수록 해당 회사의 기출문제를 집중적으로 풀어봤다.

처음에는 도저히 답이 떠오르지 않아 60분 정도 생각해본 뒤, 해답을 보며 코드의 구조를 눈에 익히려고 노력했다. 구조라는 말이 다소 추상적으로 느껴질 수도 있는데, 예를 들자면 아래와 같다.

이진 탐색

def binarySearch(nums, target):
	if not nums:
    	return -1
        
    left, right = 0, len(nums)-1
    
    while left <= right:
    	mid = (left + right) // 2
        
        if nums[mid] == target:
        	return mid
		elif nums[mid] < target:
        	mid = left + 1
       	else:
        	mid = right - 1
   
   return -1 

BFS

from collections import deque

def bfs(graph, start):
	adjList = self.constructList(graph)
    
    queue = deque()
    queue.append(start)
    
    visited = set()
    
    while queue:
    	curr = queue.popleft()
        
        if curr: # satisfies the condition
        	return curr
        
        for child in adjList[curr]:
        	if child not in visited:
            	queue.append(child)
                visited.add(child)
                
     
    return -1 

AlgoMonster에서 정리한 알고리즘 유형별 난이도와 출제 빈도 표를 토대로 출제 빈도 상(上)인 문제들을 집중적으로 준비했다. 표에서도 알 수 있듯, 난이도가 어려우면서도 출제 빈도가 적은 동적계획법은 과감히 포기했고 실제로 어떠한 인터뷰에도 동적계획법 문제는 출제되지 않았다 (피보나치 수열 문제가 나오긴 했으나, 매우 기초적인 DP 문제이기에 큰 문제가 없었다).

AlgoMonster에는 나오지 않지만, 객체 지향적 설계(OOD) 문제도 제법 출제되었다. 예를 들자면 주차장 및 상점 시스템설계, 해시테이블 및 카드게임 구현 같은 문제들이 있었다. 이와 같은 문제들은 특정 알고리즘보다는 코드를 구현하는 능력 및 논리력(logic and thought process)을 중점적으로 평가하는 듯 했다.

작년 11월부터 중점적으로 풀기 시작해서 시험이 대략적으로 마무리 된 1월 말까지 약 130여 문제들을 새로 풀어보았다. 약 300여 문제에 이르렀을 때, 새로운 문제를 푸는 대신 기존에 풀었던 문제들을 다시 풀어보며 복습을 했다.

코딩테스트를 준비하면서 몇 가지 아쉬웠던 점은, 실제 면접 환경에서는 적합한 알고리즘을 유추해내는 것도 문제의 일부분이라는 것을 잊고 대부분의 연습문제를 유형별로 분류하여 풀어본 것이었다. 그래서 준비 기간의 중반 즈음 부터는 무작위로 문제를 추출해 제한된 시간에서 실제 환경처럼 풀어보았다.

또 다른 아쉬운 점은 시간복잡도의 중요성을 간과했던 점이다. 단순히 중첩된 반복문의 갯수로 시간복잡도를 유추하는 기존의 공부 방식으로는 재귀적 알고리즘의 시간복잡도를 파악하는데 애를 먹었다. 여러 면접에서 얕은 시간복잡도 지식이 탄로 나 지적받은 것을 생각할 때, 기본기에 조금 더 충실해야 된다는 생각을 했던 것 같다.

문제들을 풀어본 다음에는 깔끔하게 정리된 해답지를 읽거나 영상물로 복습을 했다. 이 과정에는 NeetCode와 나동빈 유튜브 채널을 토대로 자주 이용했다. LeetCode 문제에 대한 풀이와 코드를 원한다면 NeetCode를 찾았으며, 알고리즘의 개념과 구현에 대한 설명을 볼 때는 나동빈을 자주 찾았다 (위상정렬, 다익스트라 알고리즘 그리고 플로이드 와샬 알고리즘 같이 자주 출제되지는 않지만 알고 있으면 좋은 알고리즘들에 대한 설명이 훌륭했다).

기업별 채용 프로세스

간략하게나마 내가 느꼈던 기업별 채용 과정에 대해서 적어보려고 한다.

구글

  • 1차 서류전형
  • 2차 100분 온라인 테스트
  • 3차 300분 비대면 면접 (4라운드 기술 면접, 1라운드 인성 "Googliness" 면접)
  • 4차 90분 비대면 면접 (필요시 2라운드 추가 기술 면접)
  • 5차 Hiring Committee(HC) 승인 이후 팀매칭 인터뷰
  • 최종 오퍼

구글은 채용 과정이 오래 소요되기로 유명하다. 실제로 10월에 지원을 한 시점부터 최종 불합격 통보까지 약 6개월이 걸렸다. 300분에 달하는 코딩 테스트를 끝낸 뒤, HC의 결과를 받아보기까지는 짧으면 2주 길게는 6주까지 소요된다. HC의 승인을 받으면 각 팀의 매니저들과 팀 매칭 인터뷰를 수 차례 진행해야 하는데, 이 과정에서 최종 불합격 통보를 받는 사람들도 여럿 봤다.

나는 3차 비대면 면접에서 일관된 퍼포먼스를 보이지 못해 4차 추가 면접을 진행했으며, 그 이후 최종 불합격 통보를 받았다.

메타

  • 1차 서류전형
  • 2차 45분 비대면 면접 (1라운드 기술 면접)
  • 3차 135분 비대면 면접 (2라운드 기술 면접, 1라운드 인성 면접)
  • 최종 오퍼

메타는 비교적 신속하게 채용 과정이 진행됐다. 구글과는 다르게 리쿠르터의 답장 속도도 비교적 빠른 편이었으며, 지원자를 위한 연습 문제 페이지까지 따로 있을 정도로 과정이 전반적으로 만족스러웠다.

인터뷰어들이 직접 구상한 듯한 구글의 문제들과는 다르게 메타의 몇몇 문제들은 LeetCode에서 본 것과 정확히 일치하여 놀란 적도 있었다. 내심 문제를 잘 풀었다고 생각 해, 좋은 결과를 기대했던 것과는 달리 불합격 통보가 빠르게 나와 침울했던 기억이 난다.

아마존

  • 1차 서류전형
  • 2차 180분 온라인 테스트 (총 두 부문으로 분리되어 있음)
  • 3차 135분 온라인 테스트 (3라운드 Leadership Principle + 기술 혼합 면접)
  • 최종 오퍼

아마존의 대학생 채용과정은 다소 특이한데, 2차 면접의 퍼포먼스를 기준으로 3차 면접의 형식이 결정된다. 2차 기술 면접의 성적에 따라 45분의 기술 면접 혹은 3*45분의 기술 면접을 보게 된다.

나는 2차 온라인 테스트를 잘 보지 못해 사실 최종 인터뷰에 진출할 것이라고 기대를 하지 않았다. 운이 좋게도 한 달쯤 뒤 3*45 최종 인터뷰에 초청을 받았고 결과적으로 합격을 할 수 있었다.

채용 프로세스에 대해서 첨언하자면 전담 리쿠르터가 배정된 다른 회사들과는 달리 아마존은 최종면접까지 자동화된 프로그램으로 관련 메일을 수신했다. 채용 과정에서 질문이나 문제가 생겼을 때, 직접적으로 연락할 수 있는 창구가 없어 많이 답답했었다.

마이크로소프트

  • 1차 서류전형
  • 2차 30분 비대면 리쿠르터 폰스크린
  • 3차 180분 비대면 면접 (3라운드 기술 및 인성 혼합 면접)
  • 최종 오퍼

위의 타임라인에서 볼 수 있듯, 마이크로소프트는 서류전형 합격 소식이 약 4개월이 걸렸다. 다만 서류전형 합격 이후 전담 리쿠르터가 배정 됐는데, 이때부터는 메타와 더불어 가장 만족스러웠다.

2차 30분 비대면 폰스크린 면접은 코딩이 아닌 자기소개와 간략한 프로그래밍 개념을 설명하는 방식인데, 잘 알려진 문제들이 출제 되어 무난하게 면접을 치뤘다.

2차 면접을 합격한 이후 최종면접 일정을 확정짓기까지 약 2-3주가 소요 될 것이라고 통보를 받았었다. 하지만 아마존 오퍼 데드라인을 근거로 최종면접 일정을 앞당겨달라고 요청했고 그 덕분에 일주일만에 인터뷰를 볼 수 있었다.

정확한 문제를 적을 수는 없지만, 문제의 난이도는 아마존과 비슷하거나 조금 더 쉬운 수준으로 출제됐으며 큰 어려움 없이 모든 라운드를 끝냈다. 추가로 마이크로소프는 하루 만에 합격 통보를 전해줘, 개인적으로 고마운 느낌까지 들었던 것 같다.

어펌

  • 1차 서류전형
  • 2차 60분 비대면 면접 (1라운드 기술 면접)
  • 3차 300분 비대면 면접 (3라운드 기술 면접, 1라운드 인성 면접, 1라운드 그리팅콜)
  • 최종 오퍼

어펌은 마이크로소프트와 비슷하게 각 라운드가 60분씩 배정 돼 체력적으로 버거웠다. 또한 다시 생각해보자면 가장 동기부여가 떨어졌던 인터뷰였다. 이미 아마존과 마이크로소프트를 합격한 뒤 치르는 면접이어서 그런지 인터뷰를 취소할까 고민도 했지만, 마지막까지 최선을 다해 보고 싶어서 임했던 것 같다.

예상 외로 인터뷰는 매우 흥미로운 주제들이 많이 나왔으며, 내가 개인적으로 좋아하는 유형의 문제들만 나와 재밌게 인터뷰를 풀고 나왔다. 사흘 안에 결과가 나올 것이라는 약속과는 달리 최종 합격 통보에는 일주일 정도가 소요됐는데, 인터뷰 과정에서 인터뷰어들이 마음에 들어 어펌 쪽으로 마음이 기운 적도 있었다.

팔란티어

  • 1차 리쿠르터 접촉
  • 2차 60분 비대면 면접 (1라운드 기술 면접)
  • 3차 30분 폰스크린 인터뷰
  • 추가 인터뷰 취소

팔란티어는 모든 면접 과정이 끝난 뒤에 링크드인을 통해 연락이 왔는데, 개인적인 욕심으로 인터뷰를 수락했다. 며칠 전 코딩 테스트를 마친 뒤 폰스크린 인터뷰에 합격, 최종 인터뷰에 초대받았으나 인터뷰를 취소했다.

내가 신체적으로나 정신적으로나 더 이상의 면접을 보고 싶지 않은 이유도 있었으나, 이미 오퍼를 수락한 상태에서 다른 회사의 시간과 비용을 소모하는 것 또한 예의가 아니라고 생각했다.

끝내기

내게는 과분한 세개의 오퍼를 두고 장고(長考)에 들어갔다. 각각의 오퍼는 각각의 이유로 매력적이었다. 후회하지 않을 결정을 위해 내가 필요로 하는 것들을 적어봤다.

  • 고용안정성
  • 성장가능성
  • 근무환경
  • 보수

영주권이 없는 나로서는 최대한의 고용안정성을 보장해줄 수 있는 회사를 고르고 싶었다. 어느 곳에 가던 최선을 다하겠지만 1%의 위험이라도 줄이고 싶었고 이러한 관점에선 마이크로소프트가 최선의 선택이었다.

예전에 개발자는 끊임없이 공부해야하는 직업이라고 본 적이 있다. 내가 일을 시작하고도 새로운 기술을 배우고 내 역량을 쌓기에는 기업이 아닌 소비자들을 대상으로 신속한 서비스를 제공하는 회사가 적합하다고 생각했다. 이러한 관점에서 볼 때는 아마존과 어펌이 제격같았다.

내가 찾고자 하는 이상적인 근무환경은 단순히 워라밸을 의미하는 것이 아닌 경력이 부족한 새내기 엔지니어를 포용해줄 수 있는 문화라고 보는 것이 타당할 것 같다. 어느회사에서도 일해 보지 않아서 이는 내 직감을 따르기로 했는데 왠지 모르게 마이크로소프트와 어펌이 끌렸다.

정확한 보수를 밝힐 수는 없지만 어펌, 아마존, 마이크로소프트 순으로 높게 책정 됐었다. 내 옆에서 아낌없이 조언을 해주셨던 분께서 보수에 지나치게 목을 메는 나를 보고 왜 이렇게 "애 딸린 가장"처럼 생각하냐는 말을 듣고 정신을 차렸던 것 같다.

결국 모든 것을 종합적으로 고려한 결과 마이크로소프트에 가기로 결심했다. 처음부터 마음이 끌리던 회사이기도 했고, 내게 있어서는 지금 당장의 돈보다 불안정한 신분의 해결이 중요했다. 또한 지난 몇년간의 부진을 딛고 다양한 분야에서 다시금 성과를 내고 있는 회사라면 내가 믿고 성장을 할 수 있을 것 같다는 생각이 들었다.

총평

당장 1년 전에 내게 아마존이나 마이크로소프트에서 일할 기회가 주어진다고 했다면 믿지 못했을 것이다. 개발자로서 내 자신에게 의구심이 많았으며 내 능력이 충분치 않다고 생각했다. 지난 몇 달간 취업이라는 일련의 과정을 통해 내가 얻어낸 과실은 직장이 아니라 열심히 하면 된다는 깨달음이라고 생각한다.

이런 교훈과 함께 마음은 한없이 조심스럽다. 내 능력에 비해 과분한 제의와 과분한 축하를 받았다. 운이라는 통제 불가능한 요소에 나보다 능력 있는 사람이 탈락의 고배를 마시는 것을 숱하게 목격하고, 지금의 성취가 온전히 내 노력의 결과물인 아닌 주변 친구들과 사람들의 소중한 도움이 합쳐진 열매라는 것을 생각할 때 다시금 겸손이라는 미덕을 되새기게 된다.

마지막으로 지난 9개월간의 대국을 평가하자면 반집차 패배라고 생각한다. 취업이라는 소기의 목적은 달성했지만, 더 잘할 수 있었다는 아쉬움이 지금까지도 많이 남기 때문이다. 이번 경험과 복기록을 자양분 삼아 다음 대국에서는 짜릿한 반집차 승리를 거머쥐길 희망한다.

profile
if this then that

1개의 댓글

comment-user-thumbnail
2022년 6월 25일

enfp가 이렇게 정리를 잘하다니.. 2국은 더 좋은경험이 되길 !

답글 달기