바보 같았던 올해 첫 면접에 대한 회고

ppamppamman
Written by ppamppamman
바보 같았던 올해 첫 면접에 대한 회고
젠장!

올해 첫 면접을 봤다!

두근두근

1333357662

결론

느꼈다. 내가 얼마나 어리버리했고 허접인지.

읽어주셔서 감사합니다.

IMG_0416

다시

나름 학교에서 발표 위주의 과제 수업이 있다면, 비교적 편하게 수강했었다. 청중 앞에 나서서 발표하는 것은 대본 쓰는 것 같은 큰 준비를 하지 않아도 어렵지 않게 해냈었다. 그럼 대체 뭐가 문제길래 “내가 나였어도 나 안뽑았다.” 같은 말을 하게 된걸까?

면접에서 무엇이 부족했는가?

큰 키워드로 정리를 하면 세가지이다.

  • 아는 것도 말하지 못하는 순간의 부족한 판단력
  • 당연하지만 공부 부족
  • 특색없는 프로젝트

부족한 순간 판단력

몇 개의 인상적인 바보 답변이 있다.

1. 브라우저에서 자바스크립트가 어떻게 작동하나요?

A : 어… 브라우저의 렌더링 원리를 여쭈시는건가요?

Q : 아뇨. 브라우저에서 자바스크립트가 어떻게 작동하나요?

A : 답변까지 시간이 좀 필요할 것 같습니다.

사실 어려운 질문은 전혀 아니다. 문제는 현장에 있던 내 머리가 빠릿빠릿하게 돌지 않았다는 점이다. 그래서 했던 답변은 참 바보같았다.

A : 이게 맞는 답인지 잘 모르겠습니다. 일단 할 수 있는 답변을 해보겠습니다.

서버로부터 리퀘스트가 진행되고 이로부터 html 파일이 로드되고 이 도큐먼트에 대한 파싱이 시작됩니다. <script> 태그를 만나 이것이 js파일을 요청하는 것이라면, 해당 파일이 요청되고, 브라우저는 <script> 태그로부터 asyncdefer등의 처리가 되어있지 않다면, js파일을 메모리에 올릴때까지 다음 파싱을 멈춥니다.

왜 저런 어처구니 없는 답변을 내놓았는가.

  • 브라우저라는 키워드에 매몰되어었다.

프론트엔드 개발자에게 이는 전혀 이상한 점이 아니다. 왜냐하면 본인이 개발한 자바스크립트가 작동하는 환경은 일반적으로 브라우저이기 때문이다. 프론트엔드 개발을 지향하지만 OAuth의 흐름을 추적해보거나, 로우패킷 레벨에서의 핸드쉐이크 과정을 추적해보려고 최근 Node.js를 다뤄보고 있었다. 그래서 “어? 환경이 다르면 어떻게 작동하지?” 라는 의문이 질문을 듣고 곧장 들었던 것 같다. 이미 이 시점에서 이번 면접은 끝이 났다 판단한다.

  • 그럼 브라우저라는 환경에서는 자바스크립트의 작동이 다른가?

그렇지 않다. 자바스크립트는 싱글스레드 기반의 언어로 이것의 작동은 하나의 큰 흐름을 해치지 않는 선에서 작동하는 원리를 갖고 있다.

그렇다. 앞선 질문은 “이벤트루프를 이해하고 있나요?” 에 대한 질문이었다.

브라우저에서의 이벤트 루프와 Node.js의 이벤트 루프는 작동을 위해 libuv라이브러리를 사용한다.

“아 회고 하기 전에 개념 공부하고 쓰는거 아닌가요?”

아니다. 워낙 기초이면서 핵심적인 내용이라 긴 시간을 두고 이해했던 내용이다. 사람 천성이 냉정하지 못해 문제 상황에서의 임기응변이 부족하다.

앞으로 비슷한 사단이 난다면 하고 싶은 질문

“제가 듣기에도 만족스럽지 않은 답변을 드린 것 같다. 괜찮으시다면, 질문에 대한 힌트를 주실 수 있겠습니까? 아마 힌트를 듣게 된다면, 분명 답변드릴 수 있을 것이다.”

아마 이 과정에서 이벤트루프라는 키워드를 만났다면 신나서 답변을 했을 것이다.

  • 다시 하고 싶은 답변
    • 이벤트 루프의 작동과정
      • 콜스택, 매크로태스크, 마이크로태스크, 매크로태스크 큐, 마이크로 태스크 큐
    • node.js에서의 이벤트 루프
      • libuv를 통한 이벤트 루프
    • Non block IO, block IO의 차이

2. 자바스크립트의 최신 스펙을 아는대로 설명해주세요.

머릿 속에서는 Promise.all말고 아는게 없는게 큰일났다. 비상이다 비상. 이라는 생각이 가장 먼저 들었다.

A : 솔직하게 말씀드리면, 제 기준 최신 스펙은 ES6에 머물러있습니다. ES6에는 블록스코프가 적용되어 var이외에도 const, let 키워드로 변수를 선언할 수 있게 되었고, 호이스팅처리에 있어 var와 차이를 지닙니다.

arrow function 을 통해 함수를 만들 수 있습니다. 이때의 arrow function은 일반적인 자바스크립트의 this키워드와 작동이 다릅니다. class가 생겨서 프로토타입 기반의 상속선언이 간단해졌습니다.

옵셔널체이닝이 생겨 처리될 수 있습니다. async await 키워드를 통해 Promisethen 체이닝이 깊어지는 문제를 해결할 수 있게 되었습니다.

왜 저런 어처구니 없는 답변을 내놓았는가.

  • 공부가 부족했다.

앞으로 비슷한 사단이 난다면 하고 싶은 질문

  • 없다. 앞으로 공부 더 해서 좀 더 세련된 답변을 내놓고 싶을 뿐.

Comments

comments powered by Disqus