들어가며
무더운 8월 어느 날. 이력서 멘토링을 신청한 사람의 이력이 흥미롭습니다. 금융 업계에 있다가 프론트엔드 개발자로 전직을 했거든요. 개발자로 일하다 직업을 금융업으로 전직하는 경우는 몇 번 봤지만, 그 반대는 처음 봤습니다. 이력서는 간결하고, 훌훌 읽힙니다. 이력서 주제에 맞춰 이력서 내용이 잘 정렬되어 있네요. 웬지 신청자가 설정한 주제가 맞을 것 같은 예감이 듭니다.

👱♂️ : 첫 번째 거로 잡았습니다.

👱♂️ : 일단 저는 두 가지로 말씀드리고 싶은데요. 사실 그 중에서도 제일 제가 첫 번째로 여기고 있는 부분은 게임 프로젝트에서 겪은 문제였어요. 디스플레이 주파수 관련해서 렌더링 횟수가 달라지는 문제가 있었는데, 그 문제를 해결하기 위해서 여러 문건들을 찾아보았어요. 자바스크립트 게임 엔진은 이 문제를 어떻게 해결했는지 좀 파고들고자 자바스크립트 게임 엔진 중에 제일 많이 사용되는 두 개의 라이브러리의 소스 코드를 파면서 작업을 했었거든요. 그래서 그거를 가장 중점적으로 말하고 싶습니다.
학습에 관한 흥미로운 신호가 발생했는데, 여러분도 느끼셨나요?
멘토링
학습하는 감이 좋다. 그런데 학습력도 따르는.

👱♂️ : 일단 제가 생각했을 때는 rAF(
requestAnimationFrame
)라는 콜백 함수를 당연히 사용해야 된다고 생각을 했었거든요. 왜냐면
setInterval
같은 웹 API로는 애니메이션 구현하는 데 좀 한계점이 명확하고, 그런 한계점을 극복하기 위해서는 rAF라는 애니메이션 전용 API를 써야 해요. 그럼 자바스크립트 게임 엔진들은 이 문제를 어떻게 해결했을까, 라는 생각이 들었어요. 왜냐면 그들이 게임 애니메이션 최적화를 위해서는 rAF를 당연히 썼을 거고, 만약에 썼다면 저와 똑같은 문제에 봉착했을텐데, 그럼 그들은 이걸 어떻게 해결했을까, 라는 생각을 가지고 이렇게 소스 코드를 찾아봤던 것 같습니다.

👱♂️ : 아, 그건 부트캠프에서 진행한 졸업 프로젝트여서 그렇습니다. 3주가 주어졌어요.

👱♂️ : 제가 게임을 좋아하는 편이거든요. 요즘에는 L.O.L이라는 게임을 즐기고, 프롬 소프트웨어 사에서 만든 소울라이크 게임들을 좋아해요. 그리고 게임을 만들고 싶다는 생각을 대학에 다닐 때에도 했었어요. 제가 OOP를 배우면서 게임에 있는 개체 하나 하나가 객체로써 동작하고 상호작용한다는 생각이 들었고, 게임을 만들면 그런 세계를 제가 만든다는 느낌을 받았죠.


👱♂️ : 저는 JavaScript를 좋아하는데 JavaScript에서 클래스 기반 OOP를 써보진 않았어요. 그래서 이번엔 클래스를 제대로 써보자 생각을 했고, 캔버스 API도 안 써봤어서 캔버스 API를 제대로 다뤄보자는 생각을 했었어요.

👱♂️ : 요즘에는 리액트 같은 프레임워크, 라이브러리를 많이 쓰는데, 저는 그 라이브러리나 프레임워크를 온전하게 제 걸로 만들기 위해서는 그것의 원초가 되는 언어를 정말 잘 알고 있어야 했다고 생각하거든요. 리액트 자체가 JavaScript로 구성된 언어이다 보니까 자마스크립트가 어떻게 구성되는지는 모르고서는 리액트를 익혀봤자 겉핥기 밖에 안된다고 생각했어요. 그리고 제가 비전공자인데, 전공자분들의 4년을 절대 무시할 수가 없거든요. 저 또한 이제 다른 전공으로 4년 동안 배우면서 기초 소양이나 근간들이 얼마나 중요한지 알기 때문에 전공자분들하고 경쟁하기 위해서는 저도 정말 밑에서부터 차근차근 착실히 올라가야 한다고 생각을 했습니다. 아니, 그걸 넘어 저만의 무기도 갖춰야 하고요.

👱♂️ : 한 일주일 정도 됐던 것 같습니다.

👱♂️ : 맞습니다. 딱 구분하긴 어려운데, 학습 자체를 한 시간과 시행착오를 거치며 학습한 시간을 합치면 한 5일 정도 들어간 것 같아요.

👱♂️ : 콜스택하고 웹API에 대해 더 잘 알게 됐어요. 콜스택과 태스크큐, 이벤트루프는 JavaScript의 핵심이기도 한 거여서 막연하게라도 알고 있었는데, 실질적으로 문제를 해결하는 데 지식을 동원해야 하는 상황에 직면한 건 게임 프로젝트가 처음이었어요.
setInterval
과 rAF를 비교해서 구현에 적용하려면 당연히 이벤트 루프를 타고 태스크큐가 어떻게 처리되는지 공부할 수밖에 없었고요. 태스크큐 관련해서 rAF는 렌더링 이전에 무조건 콜백 함수가 콜스택으로 들어가 처리된다는 걸 이해하고,
setInterval
은 그것과 관계없이 일정 시간에 따라 돌아가는데 이 시간도 보장되는 게 아니라는 걸 알면서 애니메이션 처리에 대한 고민 자체를 더 깊게 할 수 있게 됐습니다.


👱♂️ : 아, 그게 문서도 읽고...

👱♂️ : 소스 코드를 파본 게 아무래도 더 도움이 된 것 같습니다.

👱♂️ : 구조와 설계를 먼저 이해하고, 구현 의도를 이해하려 노력했습니다. 또, 저도 구현을 따라하며 직접 비교 경험을 했고요. 그러니 어떨 때 어떻게 문제를 해결하는지 이해가 되면서 자연스레 기초 부분을 더 이해하게 된 것 같아요.

👱♂️ : 제게 그런 능력이 있는지 잘 모르겠지만, 감사합니다.

👱♂️ : 아직 잘 감이 오지 않아요.

그렇게 게임 프로젝트에 대해 이것 저것 물어보며 그의 학습 능력을 살펴보았습니다. 문제 정의를 구체적으로 잘하고, 그 문제를 해결해가는 과정에서 내리는 작은 문제 정의와 판단이 무척 적절했습니다. 자신은 왜 그런 판단을 했는지 모른다고 하는데, 암묵지가 작용했든지 아니면 기가 막히게 매번 좋은 판단을 했나 봅니다. 그게 말이 되는 확률인지는 모르겠지만요.
당연한 것처럼 깔끔하고 완결된 일 처리

👱♂️ : 이력서에 쓴 프로젝트 중엔 없는 것 같습니다. 제가 생각했을 때 당연히 해야 된다고 여긴 건 주도적으로, 그리고 선제적으로 해왔거든요.

👱♂️ : 제가 저 문단을 쓴 이유는 이전 경력에 나오는 회사에서 뭐를 원하는지, 그리고 회사가 뭐를 추구하는지를 정말 빠르게 캐치해냈던 사람이라고 생각했거든요. 개발자라고 하면 개발하는 게 가장 중요하다고 생각할 수 있지만, 회사 입장에서는 그게 아닐 수도 있잖아요. 어떤 일을 처리해야 되는 계획이 회사에 있을 텐데 저는 그거를 빠르게 파악하는 능력이 있고, 그거를 위해서라면 언제든지 하던 일을 잠시 멈추고 빠르게 필요한 일에 집중하는, 이런 맥락 전환에 있어서 좀 특화된 사람이라고 생각을 해요. 그런 능력으로 회사가 저에게 굳이 요구하지 않아도 제가 알아서 찾아가서 해결하는 점을 어필하고 싶어서 수록했습니다.

👱♂️ : 부끄럽지만, 저는 그렇다고 생각합니다.

👱♂️ : 제가 그냥 한 겁니다.

👱♂️ : 그렇진 않고요. 또, 제 이력서 디자인이 괜찮다고 생각하지 않기도 해요.


👱♂️ : 세 번째 버전이에요. 첫 번째 버전은 80군데 지원해서 단 한 곳도 서류 전형을 통과하지 못했고요. 두 번째 버전은 60군데 중에서 10군데 정도 서류 전형 통과했어요. 그래서 조금 더 보완해봤습니다.

👱♂️ : 네.

👱♂️ : 그야 당연히...

👱♂️ : 채용담당자가 제 깃헙 페이지에 온 건 이력서를 읽다 제가 작업한 것에 대해 자세히 알고 싶다는 걸 의미한다고 봐요. 하지만 여전히 저에 대해 잘 모른다 생각했던 것 같아요. 사실 이력서에 있는 내용을 풀어쓴 거라서 이렇게 써도 되나? 고민하고 있긴 해요.

👱♂️ : 좋게 봐주셔서 고맙습니다.

👱♂️ : 아마 금융쪽에서 일을 배운 게 있어서 그런 것 같아요.

👱♂️ : 동영상 편집 툴 프로젝트는 한날님 말씀만큼 완결성 있진 않은데, 그런 걸 어필해도 될런지...

👱♂️ : 상용 제품으로 파는 데 필요한 최소한 기준에 미치지 못해서요.

👱♂️ : 그건 아니고, 저 나름대로 정한 목표였어요.

👱♂️ : 음. 혼자 작업해서 3개월 정도 필요할 것 같습니다.

👱♂️ : 일단 품질. 영상 크기가 완벽하게 최적화가 안되어 있거든요. 그래서 이미지를 가공하는 데 있어서 영상을 만들면 용량이가 많이 커져요. 그래서 작업물을 내보내기(export) 할 때 뒷처리가 필요할 것 같고요. 그 외에도 앱까지 출시를 했는데, 지금 앱이랑 웹을 다 다루면서 백엔드 API를 관리를 하려고 하는데, 그걸 제가 다 다듬고 상품으로 내놓기까지는 3개월 정도는 걸릴 것 같습니다.

👱♂️ : 기술적으로 시도해볼 만한 건가요?

👱♂️ : 아하. 현재 컴포넌트 테스트, 유닛 테스트까지는 커버리지가 60~70%정도 되는데, 백엔드엔 테스트 코드가 없어요. 그래서 백엔드 테스트 코드를 작성해야 하고요. 배포 자동화도 안 되어 있어서 CI/CD 구축과 파이프라인 구축도 좀 시간을 들여 해야 할 것 같아요. 백엔드는 익숙하지 않아서 어려움을 좀 겪었거든요. 그래서 일정을 보수적으로 잡아야 할 것 같아요.

👱♂️ : 유닛 테스트는 계속 작성하려고 했어요. 왜냐하면 뒤에서 로직 실행되는 것도 중요한데, 실제 유저한테 제대로 보여지느냐, 정확한 UX를 제공하느냐도 굉장히 중요한 부분이라 생각해왔어요. 그래서 컴포넌트 테스트는 꼭 하려고 하고 있습니다.

👱♂️ : 생각해본 적 없는데, 그런 것 같아요. 유저에게 작업물이 나가는 데 있어서 최초로 그리고 최후에 검증하는 단계니까요.

마치며
유남주님은 자신은 비전공자이므로 전공자들이 4년 이상을 훈련한 시간을 따라잡으려면 많이 노력해야 하며, 따라잡는 데 그치지 않고 차별화 된 무엇인가를 가져야 한다고 생각했습니다. 그리고 그의 세 번째 이력서에서 보다시피 그럴 역량을 갖추고 있었습니다. 학습 능력과 일을 완결짓는 역량이 문제 해결을 위해 무엇도 서슴지 않는 실행력으로 발현된 것이라 생각을 해봤습니다.
🚨 본 컨텐츠에 등장하는 인물 중 글쓴이를 제외한 모든 인물의 이름은 가명이며, 지명, 시간, 단체나 기관, 사건은 각색하고 창작하였습니다. 일부라도 비슷하거나 겹치는 경우는 우연히 일치하는 것이니 이 점, 양지해주시길 바랍니다. 🚨