프론트엔드 개발자 취업 후기
검정고시 고졸에 비전공자가 프론트엔드 개발자가 되기 까지
올해 11월 드디어 프론트엔드 개발자라는 직업으로 회사에 취직했다. 프리랜서로 일을 오래 하다보니까 회사라는 조직의 구성원으로 뭔가 잘 해낼 수 있을까에 대한 걱정이 있었지만, 입사한 지 이제 3주차에 이르면서 느끼는 것은 역시 나는 적응은 잘해
정도이다.
20대 중반부터는 근자감을 자주 느꼈다. 뭘 하든 빨리 이해하고 빨리 적응하고, 주변 사람들은 내가 뭘 하던 넌 뭐든 잘할 거라고 치켜세워 주는 반응이 많았다. 늘 그런 치켜 세우는 평가에 경각심을 가졌지만 근자감을 만들어주는데 큰 기여를 하지 않았을까 싶다. 그럼에도 근거없는 자신감인 이유에는 내가 뭔가 이루거나 해낸 게 없었기 때문이다.
아무튼 이런 근자감은 역시나 독이 되어서 내가 안해서 그렇지 하면 잘한다.
라는 그릇된 생각을 만들게 했었다. 그리고 뭐든 하면 잘 할거니까 아직은 좀 더 이것저것 찍어먹어 보면서 경험을 쌓으려고 했었다. 그러다가 시간이 흘러 20대 후반이 됐을 때의 다재무능
한 나를 발견할 수 있었다. 그 때부터 마음이 조급해졌다.
연봉만 보고 개발자가 되려는 사람들에 대해서는 부정적으로 생각하지만 그만큼 경제적인 보장은 중요하다. 생각 해 보면 나 자신도 영향이 전혀 없었다고 하면 거짓말이다. 하지만 진짜로 개발자가 되기 위해서는 돈을 좇는 것 만으로는 어려울 것이다. 진짜로 개발을 좋아하는 마음을 갖기 위해서는 진심이 없으면 불가능하다는 것을 내가 길을 걸으며 느꼈다.
개발자가 되기위한 소양을 물어보면 세가지 정도 대답할 수 있을 것 같다. 문제를 해결하는 능력
, 새롭게 배우는 것을 즐기는 마음
, 원활한 소통
사실 어디서나 강조하고 있는 내용들이기 때문에 개발자로 취업을 준비하려는 사람들이라면 그냥 외우듯이 알고있는 내용들일 것이다. 중요한 건 ‘이 소양들을 내가 정말로 갖고있는가?’ 에 대한 의문을 던졌을 때 나오는 대답을 봐야한다는 것이다. 개인적으로는 개발자가 되려면 가져야 하는 것을 개발자가 되기로 했기 때문에 갖는 건 지속가능하기 어렵다고 생각한다.
나는 완전 비전공자 개발자다. 고졸이니까 원래 하던 디자인일도 사실 비전공으로 독학을 통해 배웠다. 요즘에 보면 비전공자 개발자가 정말 많다. 오히려 전공자 보다 많은 게 아닐까? 생각이 들 정도로 비전공자 개발자가 많다. 이유 중에는 비전공자를 타겟팅한 학원들의 홍보와 마켓팅이 큰 비중으로 있겠지만, 그보다는 전공과 관계없이 위에서 언급한 소양들을 가진 사람들이라면 정말 누구나 개발에 빠르게 눈을 뜰 수 있기 때문이라고 생각한다. 그리고 나와같은 비전공자나 저학력자 들에게 실력
만으로 평가받아서 내 가치를 증명할 수 있다는 점도 큰 매력으로 느껴질 거라고 생각한다. 이제는 내가 개발을 공부하면서 느낀 점들을 이야기해 보겠다.
개발 공부
비전공자가 개발 공부하는 방법은 보통 독학과 부트캠프가 있을 것이다. 나같은 경우는 독학으로 시작했다가 좋은 기회에 무료로 진행한 부트캠프에 참여할 수 있었다. 사실 독학으로 시작했던 것도 금전적인 문제가 가장 컸었기 때문이었는데, 둘 다 해본 입장에서는 부트캠프를 다니는 것을 강력하게 추천한다. 가능하면 오프라인으로. 내가 다녔던 부트캠프를 진행한 업체는 저퀄리티 강의영상과 과장하는 마케팅으로 유명한 곳이었기 때문에 사실 처음에는 큰 기대는 하지 않았다. 그럼에도 배움에 있어 가장 중요한 것은 배우는 사람이라고 생각했기 때문에 마음을 확실히 먹고 시작했는데 의외로 오프라인 강의는 퀄리티가 좋고 강사진들도 굉장히 훌륭했다. 그리고 함께 배우는 수강생들에게도 정말 많은 자극을 받고 선순환에 기여할 수 있었다. 수료를 하고 취업을 한 지금 상황에서는 좋은 기회를 무료로 제공해준 것에 감사한 마음이 크다.
프론트엔드 부트캠프 과정은 다 비슷한 기술스택으로 진행된다. 알고리즘/자료구조, HTML/CSS, 자바스크립트, 리액트, 리덕스. 내 생각엔 딱 이만큼은 정말 확실하게 배우는 것이 좋을 것 같다. 괜히 이런저런 라이브러리 여러개를 아는 것 보다는 리액트 하나를 확실하게 아는 게 좋다고 생각한다. 기업에서도 배움의 넓이 보다는 깊이를 더 본다. 이 사람이 기술하나를 얼마나 깊이까지 다뤄봤는가를 중요하게 보기 때문이다. 하나를 제대로 배울 수 있는 사람은 뭐든 제대로 배울 수 있는 사람이라고 생각할 것이다.
HTML과 CSS도 제대로 알고 가면 좋다. 물론 대부분의 부트캠프와 기업에서 조차 시멘틱 마크업이나 접근성에 관련해서는 큰 비중을 두지는 않지만 그만큼 스스로의 경쟁력으로 가져갈 수 있는 부분이기 때문이다.
그리고 자바스크립트를 배울 때에는 실행컨텍스트, 이벤트루프, 클로저, 비동기 처리와 같은 핵심 개념들에 대해서 적확한 이해를 반드시 챙겨야한다. 절대로 그냥 피상적으로 외우는 방식이 아닌, 내가 모든 개념에 대해서 자바스크립트를 배우는 사람들에게 이해를 목표로 설명할 수 있을 정도로 이해하고 있어야 한다. 프론트엔드 개발자가 사용하는 언어는 자바스크립트로 한정되어 있기 때문에 더더욱 이 하나의 언어를 완벽하게 파악하고 있어야 한다.
대부분에 기업에서 사용하고 있는 리액트 또한 그 동작원리에 대한 이해가 필수이다. 컴포넌트의 라이프사이클, 성능 최적화, Virtual DOM 등 아주 기본적인 키워드에 대해서 정확하게 파악하고 있어야 한다. 결국에는 정말, 정말 모든 것을 알고있어야 한다는 것이다. 이해가 안되서 넘어가는 것이 없도록 배워야 한다. 당장에 이해가 안되는 부분이 있으면 반드시 나중에 다시한 번 이해하려고 시도해야 한다.
모든 개념을 이해의 영역으로 가져와야 진짜로 배웠다고 할 수 있는 것이다. 자바스크립트는 말할 것도 없고 CSS도 배워보면 Stacking Context, Block Format Context 등 어려운 개념들이 굉장히 많고 HTML에서도 Outline Algorithms이나 WAI-ARIA 같은 생소한 개념이 등장한다. 우리가 개발자가 된다는 것은 전문가가 되어야 한다는 의미이다. 수많은 광고처럼 취미로 사이트를 만들려고 하는 것이 아니기 때문에 더 학문적으로 접근할 필요가 분명히 있다고 생각한다.
테스트와 면접
기업에 이력서를 넣고 코딩테스트나 과제전형을 통과하면 면접을 보게된다. 나같은 경우는 코딩테스트 준비에 꽤나 애를 먹었는데, 코딩테스트는 알고리즘(DFS/BFS, 이분탐색, 투포인터 등…)을 숙달하는 것도 중요하지만, 문제를 보고 바로 접근방법을 도출해내는 것도 중요하다. 문제를 보고 어떤 방식으로 풀어야 할지 한 번에 파악할 수 있는 능력은 정말 다양한 유형의 문제를 풀어야만 터득할 수 있는 듯 하다.
그리고 나같은 경우는 DP와 같이 난이도가 높은 유형은 거의 포기를 했다(…) 다른 알고리즘 유형과 다르게 논리적인 점화식을 통해서 풀어야 하기 때문에 어떻게 해도 머릿속으로 그림이 그려지질 않았다. 나머지 유형같은 경우는 머릿속에서 다이어그램을 그리면서 진행하면 어떻게든 풀 수 있었지만 DP만큼은 어떻게 해도 어려웠다. 2차원 DP는 더욱. (나는 아직도 0-1 배낭 문제를 풀어보라고 하면 못한다.) 그래서 아예 DP유형에 대해서는 대비를 전혀 하지 않았다. 사실 수시전형의 개발자 채용에서는 코딩테스트의 난이도가 그렇게 높지 않기 때문에 DP문제가 나오는 경우도 거의 없을 것이다.
수시채용에서는 코딩테스트는 백준 실버3 ~ 골드4 정도 난이도의 문제가 나오기 때문에 너무 어렵게 생각하지 않아도 될 것 같다. 만약 공채를 준비한다면 실버1 ~ 골드2 까지 생각해야 한다. 그러나 요즘에는 부트캠프 출신의 비전공자 개발자들이 많아지면서 CS나 알고리즘과 같은 이론지식 보다는 더 실무에 밀접한 능력을 보려고 하는 추세로 변하고 있는 듯 하고, 코딩테스트가 아닌 과제전형으로 진행하는 경우도 많다. 하지만 CS지식과 알고리즘, 특히 자료구조는 반드시 알고있어야 하는 지식이니 개발자의 소양이라 생각하고 반드시 학습하길 바란다. 또한 관련 내용을 기술면접에서 물어볼 수도 있다.
나같은 경우에도 코딩테스트는 전혀 없이 과제전형으로 진행한 회사에서 좋은 평가를 받으면서 최종합격을 할 수 있었다. 과제를 진행하면서 상당히 디테일하게 문서화를 진행하면서 작업했는데 처음에 기술스택을 선정한 이유부터 과제를 하면서 했던 고민과 해결 과정들을 모두 문서화해서 정리했고 모든 코드들을 작성한 이유들을 가능한 많이 담아서 함께 제출했다. 그 덕분에 좋은 인상을 남길 수 있었으리라 생각된다.
기술 면접같은 경우는 위에서 말했듯이 코어한 개념들을 완벽하게 이해한 상태로 정말 기술면접은 두렵지 않을 만큼 철저하게 준비하면 된다. 그리고 면접관들은 보통 이력서를 보고 질문을 하기 때문에, 어떤 질문을 해도 대답을 할 수 있는 기술이 아니라면 기술스택에서 제외하는 것을 추천한다. 이렇게 완벽하게 준비한 상태라고 해도 분명히 내가 모르는 질문이 나올 수 있기 때문에 본인이 할 수 있는 한 최대한 완벽하게 준비해야만 한다. 기술면접에 자신이 없다면 아직 취업준비가 되지 않은 것이니 더 준비를 하는 것을 추천한다. 또한 앞서 말했듯 기술면접에서 CS나 알고리즘, 자료구조 등의 전공지식을 물어볼 수 있으니 프로세스와 스레드, 네트워크 프로토콜, 기본적인 큐, 스택, 해시테이블, BST 등의 자료구조와 정렬 알고리즘 정도는 숙지해두면 좋을 것 같다.
인성면접을 볼 때에는 보통 성격, 협업 태도, 상황 대처능력 등을 중점으로 물어본다. 또한 해당 회사에 지원한 이유, 회사에서 기여할 수 있는 부분등 매우 알려진 질문들이 들어오기 때문에 예상 질문에 대한 답변을 모두 한 번 작성해 보는 것을 추천한다. 또한 스타트업 같은 경우에는 인성면접이 CEO면접일 가능성이 높기 때문에 입사하고 싶은 회사의 정보를 가능한 샅샅히 알아보고 가면 좋다. 회사의 비전, 투자 현황, CEO에 대한 인터뷰 영상, 프로덕트에 대한 이해를 숙지하고 면접에 임해 CEO에게 회사에 대한 높은 이해도를 비추면 더 좋은 평가를 받을 수 있을 것이다.
아무튼 이렇게 신입 개발자의 첫 걸음을 내딛었다. 26살쯤에 개발자 전향을 시작해서 약 16개월의 준비기간(실제로는 12개월 정도일 것이다) 끝에 개발자로 취업할 수 있었다. 만약에 6개월 만에 개발자가 된다는 광고에 혹한다면 스스로 반성하고(물론 될 수는 있다. 될 수는) 개발자라는 직업에 대해서 더 무겁게 생각해 보길 바라고, 나 같은 경우에는 고졸도 검정고시로 원래 하던일도 개발과는 거리가 있었음에도 괜찮은 회사에 취직할 수 있었음에 감사하면서도 나 말고 많은 사람들이 그럴 수 있으리라 믿는다. 그렇기에 이 글이 사람들에게 희망과 도움이 되었으면 한다.