들어가며
약 3개월 동안의 취준이 끝나고, 최종합격 후 1개월이 더 지났다. 시간이 더 지나기 전에 취업 준비를 하며 얻은 정보들, 취업 과정, 그리고 다음 취준 시 개선해야 할 점을 정리하려고 한다.
타임라인
본인은 약 1년동안 스타트업 개발사에서 프론트엔드 개발자로 일한 경험이 있어 주니어 경력직으로 지원했다. 기존 직장에서는 작지만 10개가 넘는 스타트업 서비스를 제작해본 경험이 있었다. 다만, 한가지 서비스를 고도화 해서 개발을 하지 못했다는 점이 가장 아쉬웠고, 사용자들이 많이 사용하는 서비스를 집중적으로 개발할 수 있는 기업을 가고자 목표를 했다. (그리고 당연히 연봉 및 복지가 좋은 곳으로 가고 싶었다.)
1월
작년 말부터 백엔드 공부 및 코테를 준비했으나, 공부를 하며 백엔드 보다는 프론트엔드로 경력을 쌓고 싶어 이번년 1월부터 본격적으로 프론트엔드 공부를 시작했다. 코어 자바스크립트, 자바스크립트 서적, 유투브, 블로그 등을 보며 이론을 공부했고 leetcode로 js 코테를 준비했다. 면접은 블로그 및 깃헙에 올라온 ‘자주 나오는 프론트엔드 질문’들을 모두 노션에 정리해서 공부했다.
2월
가고싶은 기업들을 30개정도 리스트업 하였고, 해당 기업들의 프론트엔드 채용 공고 링크를 표로 정리했다. 그리고 본격적으로 서류는 3월달부터 넣기 시작했다. 지원했던 날짜, 각 전형의 합불 여부를 표에 표시했고 주제별로 정리한 면접 내용들을 매일 공부했던것 같다.
3월
매주 3-4개의 면접을 보았고, 3월 중순 ~ 말에 기업 최종 합격 소식들을 들을 수 있었다. 30개 중에 절반은 서류 탈락 / 그중 절반은 포기(합격 기업이 나왔고 지쳐서 포기함), 그리고 총 6개의 기업에 최종 합격을 했다.
참고 사이트 및 공부 방법
- 코테는 leetcode 에서 매일 한 개씩은 풀려고 노력했다. 처음에는 easy로 시작해서 medium 문제는 하루 혹은 3일정도에 걸쳐서 풀었다. (hard는 거의 풀지 않았다. 코테를 본 기업들도 거의 easy나 medium 수준의 문제가 나왔었음)
- 이론 공부는 코어 자바스크립트 책을 통해서 기초를 다지고, 궁금했던 원리들이나 응용 지식을 인터넷 (공식문서, 깃헙, 블로그, 유투브)을 통해서 공부했다. 간단하게 링크나 새로 안 사실들은 개인 notion에 정리를 했고, 얻은 지식들 중에 중요한 주제들은 블로그에 정리를 했다.
- 면접 전에는 ‘프론트엔드 기술 면접’, ‘javascript 기술 면접’, ‘react 기술 면접’ 등 기술 면접 키워드로 검색을 해서 필요한 내용들을 정리해 공부했다.
공부하면서 유용하게 참고했던 사이트:
코테
공식문서
블로그 & 깃헙
- [깃헙] tech-interview-for-developer (CS 공부)
- [깃헙] prepare_frontend_interview: 프론트엔드 기술 면접을 위한 핸드북 만들기
- [깃헙] Technical Interview Guidelines for Beginners - Javascript
- [블로그] 오웬의 개발 이야기 - 웹브라우저 & HTML / CSS / Javascript
- [네이버 D2] 브라우저는 어떻게 동작하는가?
- [블로그] Vanilla Javascript로 가상돔(VirtualDOM) 만들기
- [블로그 정리] 브라우저에 url을 입력하면 어떤일이 벌어질까? - 번역
- [블로그] 프론트엔드 성능 최적화 정리
- [마이리얼트립] 마이리얼트립 웹사이트 성능 측정 및 최적화 Part 1, 2
- [깃헙] reactjs-interview-questions-ko
- [블로그] [JavaScript] ECMAScript란? ES5와 ES6의 차이
- [블로그] React Query로 서버 상태 관리하기
- [블로그] [Recoil] Recoil 200% 활용하기
- [화해 블로그] Redux Toolkit (리덕스 툴킷)은 정말 천덕꾸러기일까?
- [블로그] 개발자 이력서 작성하기 (feat. 이력서 공개)
자주 묻는 면접 질문
면접을 보면서 각 회사마다 공통적으로 물어보는 질문들이 있었다. 면접 내용은 자기 소개 및 회사 소개 - 왜 이 회사에 지원했는지 - 이력서 기반 질문 - 꼬리 물기 기술 질문 - 컬쳐핏/인성 질문이었다. (순서가 다른 회사들도 있었지만, 대부분 비슷한 내용을 물어봤다.)
경력직으로 지원해서 그런지, 대부분은 ‘이력서’를 기준으로 이전 경험, 경력등을 물어보았다. 아래는 공통적으로 질문한 내용들과 기억에 남는 질문들을 정리해보았다. (거의 모든 면접에서 물어본 필수 질문은 ⭐로 표시)
이력서 질문
- 자기 소개 해주세요 (⭐)
- 왜 우리 회사에 지원했나요? (⭐)
- 이전 직장에서 어떤 역할을 맡았나요?
- 가장 기억나는 프로젝트는 무엇인가요? (배운 점을 중심으로, ⭐)
- (백엔드로 할 줄 아시는데) 왜 프론트엔드 개발자로 지원을 하셨나요?
- 본인의 장단점은?
- 왜 우리 회사가 본인을 뽑아야 하나요?
- 과거 업무를 진행하면서 직장 동료들과 갈등이 있었던 사례는? 갈등을 어떻게 헤쳐 나왔는지? (⭐)
- 비전공자인데 코딩은 어떻게 시작하였나요?
- 주도적으로 일을 하시는 편인가요? (사례)
- 서비스를 운영하면서 큰 트래픽을 겪어본 적이 있으실까요? 해결 방법은?
- 서비스를 작업하면서 ui를 좋게 변경한 경험이 있으실까요? 해결 방법은?
- 개발을 하면서 기술적으로 어려움에 처하면 어떻게 해결했나요? (⭐)
- (이력서 프로젝트) 웹앱 프로젝트 작업할 때 어떤 기능을 담당했나요? 웹과 앱에서 다른 처리도 해야했을 것 같은데 어떻게 처리했을까요?
- 회사에서 컴포넌트 최적화 경험이 있을지?
- 평소에 개발 공부는 어떻게 하는지? (⭐)
- 개발자로서의 장점 및 단점은? 왜 개발자가 되었는지? (⭐)
- 새로운 기술을 익히는 편인지? 익힌다면 어떻게 배우는 편인지?
- 왜 이직하게 결심하게 되었는지? (⭐)
- 팀 내에서 커뮤니테이션은 어떻게 하는지? (동료 및 상사와)
- 팀 내에서 git 관리는 어떻게 하는지?
- 평소 코드리뷰는 어떻게 하는지? 만약 코드 리뷰하다가 상대방이 더 좋은 솔루션 갖고 있으면 적용하는지?
- 리액트를 사용하면서 어려웠던 점은?
기술 질문
- (과제 및 github 코드 내용을 보고) 리액트 프로젝트에서 컴포넌트를 나누는 기준은?
- (과제 및 github 코드 내용을 보고) 왜 해당 라이브러리를 사용했나요? 왜 해당 방식으로 코드를 짰나요? (⭐)
- (과제 및 github 코드 내용을 보고) 개선할 수 있다면 어떻게 변경하겠는가?
- 리액트에서도 데이터 fetching이 많이 된다면 성능 나빠질 수도 있는데, 개선점은?
- 리액트 프로젝트 성능 개선 방법은? 사용해본 방법은? (⭐)
- 컴포넌트 재사용은 어떻게 하는지?
- 라이브러리를 사용하는 이유? 라이브러리를 직접 만든 경험?
- webpack이란? 사용해 보았는지? 왜 사용하는지? 만약 번들이 너무 크다면 어떻게 하는지? code-splitting 구체적으로 어떻게 하는지?
- Babel 이란? 트랜스파일러란? 써보았는지? 어떻게 사용하였을지? 어떤 기능이 있는지?
- React hook에 대한 질문. React hook이란? 왜 hook을 사용하게 되었는지? hook의 장점은?
- typecript란? 타입 추론이란? 왜 typescript를 사용하나요? 장단점은?
- 라이브러리에 typescript 적용 안된거 있다면 어떻게 사용하나요?
- (이력서에 쓴 기술들 원리 및 개념 질문) next.js란? 원리는? node.js란? 원리는? ..
- 만약 next.js, react를 사용하지 못한다면 어떻게 작업을 하실 것 인가요?
- javascript에서 클로저란? (⭐)
- javascript에서 호이스팅이란? (⭐)
- javascript에서 이벤트 루프란?
- 프로젝트에서 react를 사용한 이유는? 리액트의 장단점은? (⭐)
- react 렌더링 과정을 설명해주세요
- react에서 state를 사용하는 원리를 설명해주세요. 왜 state를 사용하고 상태관리를 하나요? 왜 전역 상태관리 라이브러리를 사용하나요?
- CORS란 무엇인가요? 해결 방안은 뭐가 있나요?
- google에서 페이지를 요청했을 때 어떤 과정이 일어나나요? (⭐)
- CS: 자료구조 관련 질문
- HTML: html 속성 질문 (display 속성, position 속성)
- javascript: 자바스크립트 이벤트란? 이벤트 버블링 및 캡쳐링이란?
- React / Next.js 렌더링 성능을 높일 수 있는 방법은? (⭐)
- 대규모 서비스는 react만 사용하는게 나을지? next.js를 사용하는게 나을지?
마무리 질문
- 개발자로서 본인의 장기적 / 단기적인 목표는?
- 5년, 10년후의 내 모습을 그려본다면?
- 본인이 회사의 성장에 어떻게 기여할 수 있을지?
- 회사에 궁금한 점이 있나요? (⭐)
- 혹시 추가적으로 하실 말이 있나요?
다음에 더 개선 해야할 점
아무래도 첫 이직이다 보니, 뚜렷한 목표 및 기간을 설정하지 않고 취준에 임했던 것 같다. 그냥 ‘붙여주는 곳 아무데나’라는 마인드로 시작을 했었는데 다음에는 내가 정말 어떤 기업에서 어떤 경험을 하고 싶은지 목표를 확정하고 지원하도록 해야겠다.
그리고 면접을 보면 볼수록 벼락치기로 몰아서 공부 하지 말고, 평소에도 꾸준히 공부를 해야겠다는 생각이 들었다. 면접을 본 기업들을은 대부분 합격을 했으나, 그래도 면접이 끝나면 뭔가 더 깊은 이해와 고도화된 답변을 하면 좋았을 텐데.. 라는 아쉬움이 남았다. (현재 스터디에 들어서 열심히 공부중이다.)
서류를 넣는 순서도 정말 중요하다는 것을 느꼈다. 면접에 자신이 없어서 가고 싶은 기업들을 최대한 나중에 지원했는데, 오히려 매주 3-4개씩 면접을 보며 몸과 마음이 지쳐갔고 최종 합격된 기업들이 하나 둘 씩 늘어나가 ‘이쯤하면 되겠지’라고 합리화 하며 정작 정말로 가고 싶었던 회사들도 몇개 포기하였다. 취준을 끝내고 쉬면서 다시 생각해 보니 끝까지 도전하지 못했던게 좀 아쉽다.
또한, 깃헙 관리를 잘 한 편이 아니라서 취준을 하면서 아쉽다고 느껴졌다. 대부분 작은 프로젝트를 작업하거나, 작업 도중에 멈춘 프로젝트들이 깃헙에 남아 있어 아무래도 플러스 요소가 되긴 어려웠던 것 같다. 또한, 다음에는 오픈소스 기여를 통해 다른 개발자들에게 실질적인 도움을 줄 수 있는 활동도 해야겠다.
물론, 좋은 기업들에게서 좋은 제안을 받아서 정말 정말 감사하다. 회사를 고르는데 까지 많은 고민을 하였고, 내가 더 배우고 성장할 수 있는 곳으로 결정하게 되었다. 다만, 정말 가고 싶었던 기업들 (두나무, 당근마켓, 네이버파이낸셜, 센드버드 등)에 서류 탈락을 해서 매우 아쉬웠다. 아무래도 3년 이상 경력직을 뽑는다고 명시하기도 했고, 내 경력 및 실력이 충분하지 않아서 서류에서 걸러진 것 같다. 다음에는 경력과 실력을 더 쌓아서 1순위로 원했던 기업들에 다시 도전해봐야 겠다.