뒤로가기
실패 이력서를 써봤다

August 8, 2021

essaycareer

트위터에서 "failure resume"라는 개념을 봤다. 이력서에는 성공한 것만 쓰는데, 실패한 것만 모아서 써보라는 거다. 학계에서 시작된 개념이라고 한다. 탈락한 학회, 떨어진 펀딩, 리젝된 논문 같은 걸 적는 거다. 프린스턴 교수가 쓴 failure CV가 유명해지면서 퍼졌다고.

재미있을 것 같아서 노션을 열고 써봤다. 제목은 "실패 이력서". 날짜순으로 정리하기 시작했다.

생각보다 많았다.

면접 탈락 3건#

지금 회사에 오기 전에 세 곳에서 떨어졌다. 부트캠프 끝나고 한 달 동안 이력서를 돌린 시기다.

첫 번째는 시리즈A 스타트업이었다. 교육 관련 서비스. 코딩 테스트에서 떨어졌다. 알고리즘 두 문제 중 하나를 시간 내에 못 풀었다. BFS 문제였는데, 큐를 안 쓰고 재귀로 풀려다가 시간초과가 났다. 재귀 호출이 깊어지면서 스택이 터진 거다. 끝나고 나서 바로 BFS 구현을 찾아봤는데 10줄짜리 코드였다. 배열로 큐를 만들고, shift로 꺼내고, 인접 노드를 push하고. 외울 정도의 분량을 몰라서 떨어진 거다. 그날 밤에 BFS/DFS를 3시간 동안 반복해서 풀었다.

두 번째는 중견 IT 회사. 기술 면접까지 갔다. 면접관이 두 명이었는데, 한 명이 "가상 DOM이 왜 빠른지 설명해보세요"라고 했다. "실제 DOM 조작을 줄여주니까요"라고 대답했다. 틀린 말은 아니지만 너무 표면적이었다. 그다음 질문이 "구체적으로 diffing 알고리즘이 어떻게 동작하나요?"였는데, 말문이 막혔다. "트리를 비교해서... 바뀐 부분만..." 더듬거리다가 끝났다. 면접관 표정이 좀 굳었다. 개념만 알고 동작 원리를 몰랐다. 면접 끝나고 집에 오는 버스에서 React 공식 문서의 Reconciliation 페이지를 읽었다. 버스에서 내릴 때쯤 "이걸 왜 미리 안 읽었지" 하는 후회가 밀려왔다.

세 번째는 꽤 가고 싶었던 곳이었다. 프로덕트가 좋았고, 기술 블로그도 재미있게 읽고 있던 회사. 서류 통과, 코딩 테스트 통과, 기술 면접도 괜찮았다고 느꼈다. 면접관이 웃으면서 "잘 하셨어요"라고 했다. 컬쳐 핏 면접도 좋은 분위기였다. 이직을 왜 하고 싶은지, 어떤 환경에서 일하고 싶은지. 진솔하게 대답했다. 손에 땀이 나면서도 "이거 될 수도 있겠다" 하는 기대가 있었다.

결과는 "최종 탈락." 이메일 한 줄. 이유를 물어볼 수 없었다. 그래서 더 괴로웠다. 뭐가 문제였는지 모르니까 고칠 수도 없었다. 기술이 부족했나? 컬쳐 핏이 안 맞았나? 더 좋은 후보가 있었나? 한 일주일 동안 면접 내용을 복기하면서 "그때 그렇게 말할 걸" 후회만 했다. 대답 하나하나를 다시 떠올리면서 "이 부분이 문제였을까?" 추측하는 게 고문이었다.

프로젝트 실패 2건#

회사에서 맡은 프로젝트 중 사실상 실패한 게 두 개 있다.

하나는 내부 어드민 대시보드. 운영팀이 쓰는 도구인데, 기획이 계속 바뀌었다. 첫 주에 받은 기획서에는 차트가 3개였는데 둘째 주에 5개로 늘었다. 필터 기능도 처음에는 날짜만이었는데, 사용자 유형별, 지역별, 결제 방식별로 계속 추가됐다. 셋째 주에는 대시보드 레이아웃 자체가 바뀌었다. 나는 매번 코드를 갈아엎었다. 기획이 바뀔 때마다 컴포넌트를 새로 만들고, 상태 관리를 다시 잡고.

결국 데드라인을 2주 넘기고 나서야 "일단 이거로 가자"가 됐는데, 코드가 누더기였다. 세 번 갈아엎은 흔적이 고스란히 남아 있었다. 사용하지 않는 컴포넌트 파일, 주석 처리된 코드, 의미를 잃은 변수명. 리팩토링할 시간도 없었고, 지금도 그 코드는 건드리기 무서운 상태로 남아 있다. 누가 그 프로젝트 유지보수를 맡으면 미안할 것 같다.

이건 내 탓만은 아니었지만, "기획이 불안정하면 먼저 범위를 정해야 한다"는 걸 그때 배웠다. 시키는 대로만 코드를 바꾸면 안 되고, "이번 스프린트에서는 이것까지만 하겠습니다"라고 선을 긋는 게 필요했다. 주니어라서 그런 말을 하기 어려웠지만, 안 하면 코드가 망가진다. 지금은 기획이 흔들리면 "범위를 먼저 확정하고 싶습니다"라고 말할 수 있다. 그때의 실패 덕분에.

다른 하나는 검색 자동완성 기능이었다. 사용자가 검색창에 글자를 입력하면 아래에 추천 검색어가 나오는 기능. 디바운스 로직을 잘못 설계해서, 빠르게 타이핑하면 이전 요청의 응답이 나중에 와서 최신 결과를 덮어씌우는 버그가 있었다. "React"를 입력했는데 "Rea"에 대한 검색 결과가 마지막에 와서 그게 화면에 보이는 거다. race condition이었는데, 그때는 그 단어를 몰랐다. "왜 결과가 이상하게 나오지?" 하면서 디바운스 시간을 늘렸다 줄였다 하고 있었다.

QA에서 잡혀서 핫픽스를 했는데, 핫픽스한 코드도 엣지 케이스가 있어서 또 고쳤다. 결국 AbortController를 도입해서 이전 요청을 취소하는 방식으로 해결했는데, 처음부터 이걸 알았으면 반나절이면 끝났을 일을 일주일 넘게 붙잡은 거다. 그래도 이 경험 덕분에 비동기 요청의 race condition은 확실히 이해하게 됐다.

포기한 사이드 프로젝트 5개#

이건 쓰면서도 좀 부끄러웠다. 깃허브에 아카이브된 레포들을 뒤져봤다.

  1. 개발자 독서 기록 앱 - Next.js + Supabase로 시작. 구글 Books API로 책 검색, 독서 상태 관리, 메모 기능. 로그인까지 만들고 방치. 이유: "기존 독서 앱이면 되는데 이걸 왜 만들고 있지?" 하는 회의감. 3주 작업.
  2. 포모도로 타이머 크롬 익스텐션 - 타이머 UI까지 만들고 방치. 25분 타이머, 5분 휴식, 4사이클 후 긴 휴식. 이유: 이미 좋은 게 너무 많았다. 만들면서 "이걸 누가 쓰지?"라는 의문. 1주 작업.
  3. 블로그 테마 직접 만들기 - Gatsby로 시작했는데 빌드가 너무 느려서 Next.js로 갈아타다가 방치. 이유: 테마 디자인 고르는 데 시간을 다 씀. 폰트 5개, 컬러 팔레트 8개를 비교하다가 지침. 2주 작업.
  4. 면접 질문 정리 사이트 - 노션에 정리하던 면접 질문들을 웹사이트로 만들려고 했다. 카테고리별 분류, 검색, 즐겨찾기 기능. 이유: "이거 그냥 노션 링크 공유하면 되잖아." 2주 작업.
  5. 가계부 앱 - React Native로 시도. 수입/지출 기록, 카테고리별 통계, 월간 리포트. 이유: React Native 개발 환경 세팅에서 이틀 날리고 의지 소멸. Xcode 에러, Android Studio 에러, 시뮬레이터 안 뜨는 에러. 환경만 잡다가 코드 한 줄 못 쓰고 포기. 3일 작업.

5개 중 3개는 "이미 더 좋은 게 있다"는 이유로 포기했다. 근데 지금 생각해보면, 그게 포기의 진짜 이유였을까? 아마 만드는 과정이 재미없어진 시점에서 합리화를 한 것 같다. 재미있으면 이미 좋은 게 있어도 계속 만들었을 거다.

적어보니 보이는 것#

실패 목록을 적으면서 패턴이 좀 보였다.

면접 탈락은 전부 "깊이 부족"이었다. 표면적으로는 알지만 한 꺼풀만 벗기면 대답을 못 했다. "가상 DOM을 안다"와 "가상 DOM의 동작 원리를 설명할 수 있다"는 완전히 다른 레벨이다. 이건 지금도 과제이긴 한데, 그때보다는 나아졌다고 생각한다. 면접 탈락 경험이 "깊게 공부하자"는 방향을 잡아준 셈이다.

프로젝트 실패는 "커뮤니케이션"이었다. 기술 문제가 아니라 사람 문제. 기획이 흔들릴 때 "안 됩니다"를 말하는 용기, 모르는 걸 모른다고 빨리 인정하는 것. 혼자 끙끙거리면서 시간을 날리지 않고 "이거 모르겠는데 도와주세요"라고 말하는 것. 이것도 아직 연습 중이다.

사이드 프로젝트 포기는 "목적 부재"였다. 왜 만드는지가 불분명하니까, 재미가 떨어지면 바로 놓는다. 유일하게 완성한 프로젝트는 내가 진짜 필요해서 만든 거였다. "이거 있으면 편하겠다"에서 출발한 프로젝트는 끝까지 갔고, "포트폴리오에 넣어야지"에서 출발한 프로젝트는 중간에 멈췄다.

실패 이력서를 쓴 뒤로 실패가 좀 덜 무섭다. 왜냐하면 이미 많이 실패해봤고, 그래도 여기까지 왔으니까. 면접 3번 떨어지고 4번째에 붙었고, 프로젝트 2개 말아먹고도 아직 회사에서 일하고 있다. 사이드 프로젝트 5개 포기하고도 결국 하나는 완성했다.

이런 말이 허세처럼 들릴 수 있는데, 진짜로 목록을 적어보면 생각보다 많은 실패를 겪고도 멀쩡하게 출근하고 있는 나를 발견하게 된다. 실패가 끝이 아니었다는 걸, 목록으로 보니까 확실히 느껴진다.

한번 써보는 거 추천한다. 30분이면 된다. 노션이든 메모장이든.