개발자 99% 커뮤니티에서 수다 떨어요!
안녕하세요. befree라고 합니다 🤗 다음 달에 프론트엔드 개발자 신입으로 첫 출근을 앞두고 있습니다. 많지 않은 경험이지만, 면접 준비를 하시는 분들께 조금이라도 도움 될 만한 정보를 공유하고자 글을 남겨봅니다. 후기를 남기기에 앞서 말씀드리고 싶은 내용이 있어요. 저는 30대 중반이라는 다소 늦은 나이에 노마드코더를 통해 개발에 입문했습니다. (제가 개발자로 전향할 수 있었던 것에는 노마드코더의 지분이 엄청 큽니다 ㅎㅎ) 나이 때문에 고민이 많아서 중간에 그만두고자 했던 시기도 있었는데요. 실제 취업 시장에서는 제가 걱정했던 것보다 그 장벽이 크게 느껴지지 않았습니다. 그래서 혹시 저와 비슷한 처지에서 도전하시는 분들이 있다면 너무 염려하지 않아도 된다고 말씀드리고 싶어요. 모두 파이팅입니다!
지금까지 세 곳의 스타트업과 면접을 보았습니다. 투자 단계는 각각 seed, pre-A, series-B라고 조회되네요. 제 부족한 글쓰기 실력으로 각 면접의 생동감 있는 후기를 남기기보다는 면접에서 받았던 질문 리스트와 전반적인 느낌을 말씀드리려고 해요. 제가 지원한 회사가 갖고 있는 공통된 키워드는 스타트업, 프론트엔드, 자바스크립트, 리액트입니다.
괄호 안 *는 빈도수입니다. 면접을 3번 봤으니까 3개가 max입니다!
#웹, HTML, CSS
브라우저 작동 원리(***) - 사용자가 브라우저에 주소를 입력한 후에 서버로부터 전송된 데이터가 화면에 보이기까지 그 일련의 과정을 설명할 수 있어야 합니다.
CORS 에러(**) - 정의, 특징, 해결 방법
클라이언트 사이드 렌더링과 서버 사이드 렌더링(**) - 각각의 특징, 장단점 등
attribute와 property의 차이(**)
쿠키와 세션(*) - 각각의 특징, 각각을 사용하는 이유, 장단점 등
CSS 전처리기, CSS in JS(*) - 사용해 본 적이 있나, 있다면 소감을 말해달라는 질문
CSS 가상 요소에 대해 알고 있는지, 사용해 본 경험이 있는지(*)
이벤트 전파와 이벤트 위임에 대해 설명해주세요(*)
inline과 inline-block의 차이(*)
class와 id의 차이 + CSS에서의 우선순위(*)
#JS
this에 대해 아는 대로 설명해주세요(**)
클로저에 대해 설명해주세요(**)
이벤트 루프에 대해 설명해주세요(**)
map과 foreach의 차이(*)
실행 컨텍스트란(*)
var, let, const의 차이 및 특징(*)
자바스크립트의 메모리 관리에 대해 아는 대로 설명해주세요(*)
#Typescript
Type과 Interface의 차이(*)
타입스크립트를 사용해 본 경험이 있는지, 있다면 소감을 말해주세요(*)
타입 추론에 대해 아는 대로 설명해주세요(*)
#React
리액트 생명주기에 대해 아는 대로 설명해주세요(***)
상태 관리 라이브러리 사용 경험, 리덕스가 아닌 다른 라이브러리를 사용해 본 경험이 있는지(**)
가상 돔(Virtual-DOM)에 대해 설명해주세요(**)
state와 props의 차이에 대해 설명해주세요(**)
메모이제이션에 대해 설명해주세요(*)
리액트가 등장하게 된 배경(이유)에 대해 설명해주세요(*)
#기타
TDD에 대한 경험과 장단점에 대해 설명해주세요(이력서에 TDD와 관련된 내용 기재)
개발 도중에 발생하는 에러에 대해 보통 어떻게 대처하는지?
팀 프로젝트에서 겪었던 소통 문제가 있었는지, 있었다면 어떻게 해결(해소)했는지
개발자라는 직업을 선택하게 된 계기
그중에서 프론트엔드를 택한 이유
개발자가 본인의 적성에 맞으신가요? 그렇게 생각하는 이유는?
우리 회사에 지원한 이유
코드 리뷰 경험 유무
#코딩테스트 #과제테스트
규모가 큰 회사가 아니라서 그런지 코테 난이도가 높지는 않았어요. 이후 면접에서 제가 dfs로 풀었던 문제의 개선 방법에 대한 질문을 받기도 했는데 다른 방법이 떠오르지 않아서 잘 모르겠다고 답변했던 적이 있네요 😅
한 기업에서는 과제테스트를 진행했어요. 피그마로 주어진 디자인 시안을 잘 구현하는지, 과제에서 사용해야 하는 라이브러리를 빠르게 학습해서 잘 적용하는지, 주어진 API를 잘 활용하는지, 유닛 테스트를 작성할 수 있는지, 타입스크립트에 대한 숙련도 등이 평가 사항이었습니다. 일주일 정도의 시간이 주어져서 큰 부담 없이 과제를 수행할 수 있었습니다. 부족한 실력이지만 최대한 확장성, 재활용성, 가독성을 고려하면서 과제를 구현했습니다.
기술 면접은 세 곳 모두 40분에서 1시간 정도의 비대면 화상 면접으로 진행됐고 모두 합격했습니다. 그중 한 곳에 최종 합격을 했고 나머지 두 곳 중에 한 곳은 불참, 한 곳은 불합격을 했습니다. 합격하지 못했던 최종 면접은 대면으로 진행됐는데, 비대면 면접에 비해 꽤나 긴장했던 점과 제 나이와 관련해서 그간의 공백 기간에 대한 압박 질문에 대해 더 솔직하고 자신감 있게 대답하지 못한 게 패착이라고 판단했습니다. 첫 인성면접에서 불합격했던 경험이 나중에 큰 도움이 되었습니다. 그동안 열심히 준비했던 만큼 솔직하고 당당해지자고 다짐했습니다.
기술 면접에 모두 합격하긴 했지만 모든 질문에 잘 답변한 것은 아니었어요. 그럼에도 솔직하게 답변하려는 태도가 좋은 결과로 이어졌던 것 같습니다. 모르는 내용은 잘 모르겠다고 솔직하게 말하고, 애매하게 아는 내용은 '나는 이 정도까지 알고 있다'라는 식으로 아는 만큼 대답하려고 했어요. 검색해도 바로 나오지 않을 것 같은 주제라면 도리어 제가 질문을 하기도 했습니다. 그렇게 했던 이유는 세 면접에서 모두 소통이 잘되는 사람인지 확인하려는 느낌을 받았기 때문이에요. 경직된 자세로 질문에만 답변하기보다는 서로 대화하고 있다는 분위기를 주려고 노력했습니다. 평소 잘 긴장하는 저로서는 비대면 면접이라는 점이 큰 도움이 되었던 것 같아요.
세 면접 모두 끝 무렵에 회사에 대한 질문을 할 수 있는 시간이 있는데, 만약 그 회사에 가고 싶은 마음이 있다면, 이때 회사나 개발팀에 대한 관심을 최대한 표현하는 것이 좋다고 생각해요. 회사가 사용하는 기술 스택이나, 회사가 갖고 있는 개발 문화, 협업 방식 혹은 개발팀 인원이 어떻게 구성돼 있는지.. 등등 질문이 많을수록 그분들도 좋아하시는 것처럼 보였습니다.
기술면접에서는 지엽적인 내용보다는 어떤 개념에 대해 아는 대로 최대한 많이 설명해달라는 식의 질문이 많았어요. 첫 면접에서 리액트 생명주기에 대해 아는 대로 설명해달라는 질문을 받게 되니까 어디서부터 어떻게 설명해야 할지 막막하더라구요. 그래서 어렴풋이 알고 있던 개념을 최대한 구체적으로 답변할 수 있도록 사전에 정리하고 이해하는 준비가 필요하다고 느꼈습니다. 자바스크립트에 대한 지식은 정재남 님의 책 '코어 자바스크립트'의 도움을 많이 받았어요. 다른 유명한 책들도 많지만 책 두께가 부담스럽지 않고 핵심 내용이 잘 정리되어 있어서, 여러 번 읽으면서 중요한 개념들을 어느 정도 이해할 수 있었습니다.
마지막으로 깃허브나 블로그에 공부하거나 고민했던 흔적을 남기면 좋게 봐주신다는 느낌을 받았습니다. Today I Learned나 깃허브 잔디심기를 매일 하시는 분들도 계시던데, 저는 그렇게 까지는 하진 못했어요. 그래도 중간중간 배웠던 내용, 부족했던 부분, 앞으로의 다짐 같은 것들을 회고로 남겼는데 면접 때마다 그런 흔적들에 대해 긍정적으로 말씀해주셨습니다.
다 작성하고 보니 구글 등에서 쉽게 접할 수 있는 정보인 것 같네요😅 취업 준비하시는 분들께 조금이라도 도움이 되면 좋겠습니다. 긴 후기 읽어주셔서 감사합니다. 혹시라도 궁금하신 점이 있다면 댓글로 남겨주세요!