2023. 7. 25. 00:25ㆍ면접준비
1.기업 리스트업 및 서류제출
2022년 12월에 시작한 부트캠프가 6월에 끝이나고, 취업을 준비하며 사이드 프로젝트를 한창 진행하고 있었다.
그러다 어느 날 학과후배가 ICT 인터쉽 신청했냐고 연락이 왔다.
당연히 모르고 있었다.
휴학상태였고, 따로 학교 홈페이지를 확인 못했기 때문에 전달받을 방법이 없었는데 운좋게 소식을 들었다!
기존의 나의 계획으로는 선 취업 후 취업계를 내고 졸업해야겠다는 플랜이 있었는데 학점연계 인턴십으로 채용되게 된다면 취업계를 낼 필요 없이 졸업요건의 대부분을 채울 수 있어서 나에게는 굉장히 매력적이였다.
이력서는 기존에 작성중인 포멧이 있어서 그것을 조금 수정하여 제출했고, 자기소개서는 보편적인 항목들 (지원동기,업무역량,포부 등)을 기재했고 그것에 대해 작성했다.
총 3개의 기업에 지원이 가능한데, 나름의 지원기업의 기준을 만들어서 리스트업했다.
- 서비스의 타겟층이 확실한가? => 보편적인 서비스보다 명확한 타겟층이 있는 서비스는 그에 따른 좀 더 깊은 고민과 디테일을 생각해야하는데, 그 과정에서 배울점이 많을 것 이라고 생각했다. 1만명의 고객들에게 60% 정도의 그저그런 호감을 사는 것 보다 100명의 고객들에게 90%이상의 화끈한 사랑을 받는것이 더 어렵다고 생각하기 때문이다.
- 개발팀이 메인인 회사인가? => 간혹 회사규모는 큰데, 개발팀의 규모는 비교적 작아서 개발팀이 유지보수나 보조적인 업무만 하는 회사가 있기 때문이다.
- 인턴십이 종료되면, 정식채용 의사가 있는가? => 가능하면 인턴십을 하고 다른 기업으로 새로운 취업준비를 하기보다, 인턴생활때의 개발 컨텍스트를 이어가고 싶기 때문이다.
2. 서류 합격 및 면접
서류를 제출하고 약 3~5일 후에 세개의 기업에 대한 결과가 나왔다.
A기업은 서류에서 탈락했다.(비지니스 모델이 확고해서 지원했지만, 개발스택이 조금 상이해서 떨어 진 것 같다.)
B,C 기업은 모두 인사 담당자님에게 문자로 서류 합격을 통보받았다.
마침 휴대폰을 잡고 있을때라 빠르게 답신을 드렸고 그 다음주 월/화 연달아 면접이 잡혔다.
- C기업
B기업 보다 먼저 면접일정이 잡혀서 첫 면접으로 보게 되었다.
기업의 분위기는 굉장히 각자 자리에서 몰두하고 있다고 느꼈다.
마찬가지로 이 기업을 지원 한 이유는 확고한 타겟층이 있는 서비스를 개발중이였고, 내가 생각하기에 그 서비스의 사업성이 괜찮다고 느꼈다.
10분정도 일찍 도착해서 인사담당자님에게 연락을 하니 약 5분후에 식사를 마치고 올라오셔서 사무실로 안내해주셨다.
사무실에서 한 5분정도 대기하다가 면접실로 이동했다.
인사담당자님이 프론트엔드를 담당하고 계시기에, 면접에 들어오시는 줄 알았으나 CTO님께서 면접관으로 들어오셨고 1:1 면접으로 진행됐다.
짧게 아이스 브레이킹을 마치고 기술면접에 들어갔다. 프로젝트에 대한 질문들이 먼저 들어왔다.
어떤 서비스인지? 얼마나 기여했는지, 나는 어떤 부분을 담당했는지에 대해 질문을 주셨고 있는 그대로 설명했다.
프로젝트 중 "Uncover" 라는 상업적 이용가능 음원 스트리밍 서비스에 대한 질문이 많았고, 사이드프로젝트로 재밌는 걸 진행했다고 말씀해주셨다.
프로젝트 관련 질문이 끝나고 본격적인 프론트엔드 기술면접 질문들을 받았다.
1.Promise와 async-await의 차이점을 설명해주세요.
- Promise는 자바스크립트에서 비동기 처리에 사용되는 객체이다. 내용은 실행 되었지만 결과를 아직 반환하지 않은 객체 입니다.
- 비동기 처리가 완료 되지 않았다면 Pending, 완료 되었다면 Fulfilled, 실패하거나 오류가 발생하였다면 Rejected 상태를 갖습니다.
- 비동기 처리가 성공적으로 완료되면 than() 구문을 통해서 결과값을 얻을 수 있습니다.
- 비동기 처리가 실패했다면 catch() 구문을 통해서 에러 값을 얻을 수 있습니다.
- async-await은 콜백이나 프로미즈의 단점을 해소하고자 탄생했습니다.
- async 함수 내에서 await 을 통해 Promise의 반환값을 받아 올 수 있습니다. (이 부분을 긴장해서 설명드리지 못했다.)
- 첫번째로 async await 이 promise보다 코드 가독성면에서 간결합니다.
두번째로 에러 핸들링이 용이하다는 차이점이있습니다.
2.프로젝트에서 상태관리는 리코일을 사용해주셨는데, 리코일을 사용하신 이유가 있나요?
- 지금까지 제가 진행한 프로젝트의 볼륨에서는 리덕스를 사용하기에는 오버 엔지니어링 이라는 생각이 들었습니다.
보일러 플레이트가 방대한 리덕스 특성상 프로젝트 볼륨에 비해 배보다 배꼽이 크다고 생각했고, 다른 대체제를 찾던 중 리코일을 선택하게 됐습니다. - 리코일은 리액트에서 만든 상태관리 라이브러리인데, 리액트 친화적인 문법이기 때문에 러닝커브가 상당히 낮았기에 리코일을 채택했습니다.
물론 "난 이 상태관리 라이브러리만 사용할거야" 라는 건 아닙니다. - 상태관리 라는건 프로젝트 볼륨에 따라 유동적으로 바뀔 수 있고, 결국엔 여러가지 라이브러리를 다룰 줄 알아야 한다고 생각합니다.
다만 가장 러닝커브가 낮은 리코일로 시작해야겠다고 생각했습니다. - 리코일은 아톰과 셀렉터를 통해 전역 상태관리를 합니다.
- useRecoil, useSetRecoil 를 사용하여 상태를 관리하는데, 리액트의 state,setState와 매우 유사해서 사용하기 쉽습니다.
또한 리코일은 원하는 컴포넌트만 리렌더링 시킬 수 있기 때문에 렌더링 최적화 부분에서도 나쁘지 않습니다. (이 부분도 긴장한 탓에 제대로 설명 못드렸다..)
다른 질문들도 많았지만 대부분 프론트엔드 개발자라면 보편적으로 받게되는 질문들이기에 따로 더 기록하진 않겠다.
다만 내가 면접에서 아쉬움이 많이 남는 질문들이 있다.
1.cors에 대해 설명해주세요.
- 아...어... cors... 크로스...오리진... 어.. 교차출처...허용...(하 교차출처리소스공유 !!!!!! 왜 말을 못하니)
cors.. 처음엔 저를 왜이렇게 괴롭히나 했는데요! 이녀석 사실 알고보면 좋은 녀석이더라구요?! (멘탈나가서 만담해버렸다.)
보안상 위험성 때문에 브라우저는 동일한 출처의 리소스만 사용 가능하도록 제한이 되어있습니다만, 어떻게 서비스를 만드는데 다른 출처의 리소스를 사용하지 않을 수 있겠습니까? 그것을 가능하게 해주는게 cors입니다! (세상에 이럴거면 모른다고하지 왜 대답한걸까)
2.디자인 패턴은 어떤걸 사용해보셨나요?(CTO님은 당연히 써봤겠지 하는 뉘앙스였다.)
- 어.. 디자인패턴.. 사용해보지 않았습니다.
그 아토믹패턴등 디자인 패턴을 적용해보려고 시도는 해봤으나, 너무 작은 단위부터 상향식 개발을 하다보니 컨텍스트가 중간에 끊어지게 되고, 애매한 상태가 되어버려서 좀 더 실력을 키우고 적용해보려고 생각했습니다.(아직 디자인 패턴에 대해 느껴 본 적이 없어서 마냥 미뤘는데, 굉장히 후회됐다.)
3. 면접 후기
CTO 님은 디자인 패턴이 없는 프로젝트는 없다며 꼭 공부해야 한다고 말씀해주셨다.(ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ)
디자인 패턴 없는 프로젝트는 없다 => 나는 디자인패턴을 안써봤다. => 내가 참여 할 프로젝트는 없다.
머릿속에선 이런식으로 결론이 나고 있었다.아마 면접 탈락하게 된다면 이부분이 큰 부분을 차지하지 않을까 아쉬움이 남는다.
https://www.patterns.dev/posts
하지만 면접은 면접이고, 디자인패턴 사용경험이 없는게 나의 약점이된다면 최대한 빨리 적용해보고, 다음에는 디자인패턴에 대한 이야기를 할 수 있다면 좋겠다.
CORS 부분도 프론트엔드 개발자로써 정확하게 설명 하지 못했다는게 많이 속상하다.
개인적으로 C기업에서 개발중인 프로젝트의 비지니스 모델도 맘에들고, 복지도 만족스러워 욕심이 생기지만 면접에서 얻은 경험들도 소중하기 때문에 좋게 생각하고 다음 면접을 준비하려고 한다.
생에 첫 면접이라 많이 떨기도 했지만 이 또한 익숙해지고 숙달되면 언젠가 좋은 결과가 있지 않을까?!
'면접준비' 카테고리의 다른 글
모아프렌즈 면접 준비 (0) | 2023.07.25 |
---|