새로운 시작; Software Engineer가 되기까지

올해 상반기까지만 해도 저는 웹알못이였습니다. 물론 그때보다는 낫지만 지금도 모르는게 많고 부족한 점이 많다고 느낍니다.

거두절미하고 결론부터 얘기하자면 다니던 회사를 그만 두고 ODK Media로 이직하게 되었고, 내년부터 Security Engineer가 아닌 Software Engineer로 근무하게 되었습니다.

이 과정에서 있었던 일들과 느꼈던 감정들에 대해 공유하고자합니다.

Motivation

커리어 전향을 결심하게된 계기는 본의 아니게 회사에서 보내준 Google I/O 로부터 시작되었습니다. (Road to enough에 간단히 기술했지만, 좀 더 자세히 얘기해보고자 합니다.)

Google I/O는 가슴 설레는 세션들과 Sandbox들이 있었지만, 아쉽게도 크게 공감하지 못했습니다. 내용들은 이해할 수 있었지만 왜 새롭게 나왔는지 그 배경을 전혀 몰랐기 때문입니다. 예를 들면, lazyload가 어떤 이유로 생겼는지 짐작할 수 없었고, Array.prototype.flat에 청중들이 왜 기뻐하는지 전혀 몰랐습니다.

Google I/O 기간 내내 아래와 같은 생각들이 꼬리를 물었습니다.

기술이 빠르게 변화하는 상황에서 현재에 안주한 채 과연 Security에 대해 논할 수 있을까?

당연히 개발팀보다 내가 먼저 알아야하고 고찰해봐야하지 않을까?

나는 이 팀에서 Security Engineer로서 성장 할 수 있을까?

내가 정말 하고 싶은 게 이게 맞는 걸까?

그 자리에서 위의 질문들에 대해 납득할 만한 해답을 제시하지 못했고, 스스로에게 부끄러웠습니다. 그 때부터 미래에 대한 큰 그림을 다시 그리기 시작했고, 정말 하고 싶은게 뭔지 고민 끝에 좋은 개발문화를 가진 조직에서 원없이 개발을 하고싶다에 이르렀습니다.

왜 Frontend 인가?

운이 좋게도 저는 다양한 조직의 엔지니어분들이 작성한 코드, 커밋로그, 코드리뷰등을 볼 기회가 많았습니다. 또한 잡다하게 이것저것 다뤄봐서 C/C++, Java, JavaScript, Python, Rust, Go, Scala로 작성된 코드를 읽는데 크게 어려움을 겪지 않았습니다. Google I/O에 다녀 온 후 몇 일간 Native App, Backend, Frontend, QA, Data Analyst 분들이 작성한 코드들을 유심히 살펴보았습니다.

그 중 단연 Frontend가 가장 끌렸습니다. 저는 Security Engineer고 어떻게 보면 Backend보다 뒤에서 Supporting 하고있다고 생각합니다. 제 사고방식은 얼마나 안전하게 소프트웨어를 개선할 수 있을까 혹은 어떻게 이상한 입력 값을 생성해서 취약점을 트리거할 수 있을 까에 갇혀있었습니다.

Frontend는 이런 제 고정관념을 보기 좋게 깨부숴 주었습니다. 그리고 이런 말도 있죠. “어떤 사람들은 자신의 반대 성향을 가진 사람에게 끌린다(주의: 사실이 아닐 수 있습니다)“.

제가 느끼기엔 Frontend 엔지니어 분들의 밝고 active 분위기 또한 너무 매력적이였습니다.

가면갈수록 클라이언트의 복잡도가 증가하면서 해당 직군의 수요가 늘어날 것이라 생각했고, 이에 따라 테스팅 및 보안지식을 갖춘 Frontend 팀의 Software Engineer가 경쟁력이 있을 거라 판단했습니다.

그럼에도 가장 결정적인 이유는 그냥 재밌었기 때문입니다.

무엇을 했고, 어떤 문제가 있었고, 그 과정에서 무엇을 느꼈는가?

코드를 많이 읽는 것으론 부족했습니다. 저는 좀 더 (코드를 읽고 어느 정도는 알 수 있었지만) 다른 분들의 intuition을 얻고 싶었습니다.

VanillaJS Study

(스터디에 대한 자세한 내용은 여기서 확인하실수 있습니다.)

그러던 와중, 친구의 SNS에 “VanillaJS 스터디 추천함”(이렇진 않았지만…연대보증도 했던 것 같은데…) 이라는 포스팅을 보게되었습니다. 사실 스터디를 시작하기 전까지 정말 고민을 많이 했습니다. 정말 냉정하게 보면 결국 언어를 사용하는 패턴을 학습하는건데 혼자 공부하면되지 않을까 싶었고, 투자한만큼 내가 원하던 intuition을 과연 얼마나 얻을 수 있을까에 대한 의문이 좀 컸습니다.

이 스터디가 진행될수록 리더의 매력에 빠지게 되었습니다. 리더로부터 intuition을 얻는것 뿐만 아니라 직/간접적으로 제 mindset까지 바꿔놓고 있다는 걸 깨달았습니다. 엔지니어는 어떤 사람이고, 어떤 엔지니어가 되어야하는지, 어떤 방향성을 가지고 성장해나가야 하는지, 바람직한 개발문화는 어떤 것들인지 등에 대해 다시 생각해보게 되었고 끊임없는 피드백을 주고받게 되었습니다.

홀로서기

스터디가 끝나고 굉장히 아쉬웠지만 이제부터는 저 자신과의 싸움이 시작되었습니다. 역시 현실은 녹록치 않았습니다.

문제 1: 생각보다 Frontend 생태계가 엄청 크네.. 다 알아야하나?

babel, webpack, sass 이런 것들은 무엇이며 왜 생겨났고 수많은 라이브러리들 중 도대체 무엇을 써야할까? 그리고 이걸 정말 다 알아야하는 걸까?

제 나름대로의 해결책은 우선 복잡한 거 다 치우고 “기본에 충실하자”였습니다.

CS 지식들을 제외한 기본은 결국 HTML, CSS, JS라고 나름대로 판단했고 편법 없이 오로지 반복된 연습만이 답이라고 생각했습니다. (JavaScript30, You-dont-need-JavaScript 등을 주로 참고했고, 클론 코딩이 많은 도움이 되었던 것 같습니다).

이 과정에서 HTML과 CSS가 JS 못지 않게 정말 어렵고 심오하다는 걸 깨달았고, 이 때 이 것들에 대해 충분히 짚고 넘어가지 않았다면 정말 힘들었을 것 같습니다. 이 과정을 거치고나니 위에 언급한 도구들과 라이브러리들이 왜 생겨났는지 자연스럽게 알 수 있었고, 그 뒤에 도구들과 라이브러리들을 붙여나가는 건 비교적 수월한 일이였습니다.

문제 2: (Frontend를 바라보는) 다양한 관점/시각을 얻고 싶은데 어떻게 하지?

이건 제가 정말 운이 좋다고 생각하는데, 사내에 UI/UX, FE Meetup들 그리고 교육과정들이 굉장히 빈번하게 열렸고 거의 모든 세션에 참석한 것 같습니다. 전부 이해하지는 못하더라도 계속 듣다보니 반복적으로 등장하는 키워드들이 눈에 띄었고, 발표자 분들의 경험담을 통해 어떤 기술을 어떻게 받아 들이고 있는 지 어느 정도 알 수 있었습니다.

그 외엔 JSConf, Deview 등 외부 Conference들을 가능한 많이 참석했습니다. 결국 원하는 바를 얻으려면 어쩔 수 없이 많이 보고 듣는 수 밖에 없는 것 같습니다. 혹은 좋은 동료들이 주변에 있다면 더더욱 좋을 것 같습니다.

다른 필드의 개발자분들 혹은 몇몇 지인분들의 의견을 들어보았는데, 아직 Frontend를 약간 경시하는 분들이 계셔서 좀 아쉬웠습니다. “굳이 왜 Security 내려놓고 Frontend를 하려고하니?”, “누구나 할 수 있지 않냐?” 라는 말을 들었을 때 위에 했던 고생들이 떠오르며 반박하고 싶었지만 개인적인 의견이니 크게 유념하지 않았습니다. 물론 아닌분들이 대부분입니다! 사실 약간 슬펐어요

문제 3: 동기부여

무엇보다도 지속적인 동기부여가 가장 어려운 문제였습니다. 사실 중간에 내려놓고 싶었던 적도 몇 번 있었습니다.

회사에서 정말 개발을 하고 싶었지만 맞물린 여러 요인에 의해 지속할 순 없었습니다. 팀에 개발 문화가 전혀 없었고, 조직의 특성 상 코드를 볼 줄 아는 분이 많지 않으셔서 무언가 진행하면 전부 홀로 개발부터 유지보수까지 진행했어야했기 때문에 스스로 지치는 경우가 많았습니다. 실제로도 이런 점에서 많은 회의감을 느껴 개발을 잠시 중단한 상태였습니다.

스스로 개발에 대한 갈망이 꽤나 컸는지 깃헙에 잔디심기를 시작하게 되었고, 이 것이 어느정도 습관이 되다보니 자연스럽게 계속 이어질 수 있었습니다. 어느 하나라도 어제보다 나은 내가 되는 느낌이라 동기부여 측면에서 좋았던 것 같습니다. 이 것 또한 ‘VanillaJS 스터디’에서 이렇게 하시는 분들이 계셨고 제안해주셨습니다.

그리고 이 스터디는 참 특이하게도 이전 기수가 다음 기수의 스터디에 참가할 수 있었습니다. 새롭게 스터디에 참가하는 분들의 모습을 보고 다시 자극을 받게 되었고 그 때마다 스터디를 진행할 무렵의 제 모습이 떠올랐습니다. 제가 공부를 이어갈 수 있었던 건 그 분들의 열정이 있었기 때문이였던 것 같습니다.

대망의 이직준비

코딩테스트 준비는 leetcode를 주로 이용했고 적당히 medium 난이도를 통과할 정도로 준비했습니다. 저는 1~2시간 고민해보고 안풀리면 다른 분들 푸신 방법을 보고 생각만해뒀다가 기억에서 지워질때 쯤 다시 풀었습니다. 처음엔 재밌었는데 결국엔 이것도 패턴이 있어서 나중엔 재미가 떨어졌습니다.

그리고 CS 전공지식들을 좀 많이 되새김질했습니다. 처음엔 꽤 오래되어서 기억이 잘 나진 않았지만 이해했던 컨셉들을 떠올리다보니 그 뒤는 쉽게쉽게 기억이 되살아났던 것 같습니다.

Frontend는 그냥 평소에 하던대로 꾸준히 진행했습니다.

이번 생에 티타임은 처음이라

이직 준비 도중에 어떤 스타트업으로부터 티타임을 제안받은 적이 있었습니다. 가장 큰 걱정은 도대체 “무슨 이야기를 해야하지?” 라는 생각이 앞섰다는 것입니다.

이 티타임이 그 분에겐 시간 낭비가 되었을 수도 있지만 저에겐 많은 도움이 되었습니다. 일단 스스로가 충분히 준비가 되었다고 생각하지 않다보니 자신감이 없었고, 말하는 어투에서부터 Frontend 쪽 실무경험이 없다는 점으로 나를 가두고 있다는 걸 짚어주셨습니다.

거의 고민 상담을 들어주신 느낌이라 그 당시에 제 마음은 후련했지만 티타임을 마치고 돌아왔을 때 죄송한 마음이 들었습니다. (사실 코딩테스트를 보고 꽤 시간이 흐른 상태인데 결과가 나오지 않은 상태여서 거의 매시간 메일함을 들여다보고 있었습니다.)

면접 그리고 오퍼를 받기까지

코딩테스트를 통과했다는 연락을 받고 최대한 빠르게 면접일을 잡았습니다. 면접은 너무 편안했고 토론하는 기분이 들어서 재밌었습니다. 제가 여태까지 봤던 면접들이 너무 힘들었던 탓도 있는 것 같습니다.

  • 대학원 면접: 방 3~4개를 돌아야하고, 방마다 교수님들이 3~4분씩 계셨음
  • 현재 기준 다니고 있는 회사 면접: 방 4개를 돌아야하고, 1:1 면접을 1시간동안 진행함

면접에서 너무 좋은 인상을 받아서 여기서 일하면 즐겁게 일 할 수 있을 것 같은 느낌이 들었습니다. 몇 일 후, 오퍼를 받게 되었고 조만간 합류할 예정입니다.

마치며

첫 연봉협상, 첫 스터디, 첫 이직준비, 첫 티타임, 첫 이직! 이번 한해에 처음하는게 정말 많았습니다. 도움주셨던 모든 분들께 감사드립니다. 덕분에 좋은 기회를 얻어 새로운 출발을 할 수 있게 되었습니다.

생각보다 긴 저의 이직기 읽어주셔서 정말 감사합니다.

Published 29 Nov 2019