React / Node.js Fullstack 개발직군 면접 후기

2019.03.20일에 React / Node.js Fullstack 개발자를 뽑는 회사에서 면접을 보았다. 면접관님은 그 회사의 개발 총괄자셨다. 나에게 이런저런 질문을 하셨고, 나는 제대로 답변을 못했다.

기본적인 질문들

이전 회사에서의 경력과 개발 경험등을 바탕으로 간단한 자기소개 부탁해요

이전 회사에서 내가 담당한 일들을 이야기 했고, 어떻게 프로그래밍공부를 시작하게 되었는지 말씀드렸다.

지금까지 했던 프로젝트 중에서 가장 인상깊었던 것은?

내가 지난 회사에서 약 4개월간 진행했던 프로젝트에 대해서 설명 드렸다. 워드프레스 관련 플러그인을 직접 커스터 마이징을 하면서 방대한 양의 소스코드를 분석해보는 좋은 경험이 되었고, 또 분석하면서 발견한 문제들을 고쳐서 해당 오픈소스에 pull request를 보내가지고 Contributor가 된 이력도 말씀드렸다. 실제로 내가 가장 애를 많이 쓴 프로젝트였다.

지금까지 했던 프로젝트들을 진행하면서 뭔가 기억에 남는 이슈(실수)가 있었다면?

내가 만든 출석플러그인에 버그가 있었는데, 그걸 20일이나 지나서야 발견해서 고쳤다. 근데 그 사이에 유저들이 중복으로 출석체크를 여러번 해서 약 40만원의 불공정한 이득을 취해버렸다. 나는 이런 경험을 겪으면서 테스트가 정말 중요하다는것을 다시한번 느꼈다고 말씀드렸다.

이전 회사의 개발 프로세스는 어땠는가?

이전 회사에서는 대표님께서 클라이언트에게 요구사항 정의서를 구체적으로 받고, 내가 각 요구사항 마다 몇일이 걸리는지 일일이 적은 후에, jira를 이용해서 개발 프로세스를 관리했다고 말씀드렸다.

디자이너와의 협업은 없었는가?

워드프레스는 주로 테마를 사용하기에 없었다고 말씀 드렸는데, 지금 생각해보니 내가 테마를 직접 만들때 디자이너분들의 도움을 받았었다. 근데 별거 없었다. 그냥 디자인을 해주셨고 나는 (내일은 아니지만,,) 쪼끔 마음에 안드는 부분들을 다시 디자인 해달라고 요청드렸고, 이후에 내가 그 시안 그대로 만들었다. 심플했다. 다툼도 없었다.

주로 어떻게 공부를 하는가?

그냥 모르는건 구글링 하거나 udemy강좌를 보면서 공부를 한다고 말씀드렸다.

자주 찾아보는 레퍼런스 사이트가 있는가?

React공부할때는 제로초님의 블로그velopert님의 블로그를 본다고 말씀 드렸다. 하지만 일반적으로는 딱 정해진건 없고 그냥 구글링해서 좋은 자료가 있으면 그걸 본다고 말씀드렸다.

우리 회사의 서비스를 사용해 보았는가?

면접을 보기 전에 집에서 그 회사의 서비스를 많이 살펴보고 회원가입도 하고 결제직전까지 이것저것 해봤다고 말씀 드렸다. 반응이 괜찮았던것 같다. ‘성의는 있군!’ 하는 느낌을 받았다.

왜 우리 회사를 선택했나?

솔직하게 말씀 드렸다.

  1. 다른 회사에 다 떨어졌고
  2. 이 회사가 병역특례 회사이고
  3. 원하시는 기술 스택을 내가 갖고있어서 자신이 있었고,
  4. 개발자가 일을 주도적으로 할 수 있는 분위기가 있다고 인터넷에서 봤기 때문이었다.

첫번째와 두번째 이유를 말씀드릴때의 반응이 좋진 않았지만, 뭔가 거창한 이유같은건 없어서 어쩔수 없었다.

지금까지 살면서 어떤 난관을 극복한 경험이 있는가?

나는 20살때 시골로 내려가서 독학재수를 해서 성적이 비약적으로 올랐다는 점을 말씀 드렸다. 꽤 호기심을 갖고 들어주셨다. 사실 인터넷에서 이 회사를 검색 했을때 회사의 대표님이 ‘결핍이 있고 그것을 이겨낸 사람’을 선호한다는 인터뷰 내용을 본적이 있어서 약간 예상했던 질문이었다.

기술적인 질문들

Git과 Github으로 협업해 본 경험이 있는가?

나는 git을 써봤고 오픈소스에도 참여해 봤다고 말씀 드렸다. 하지만 솔직히 오픈소스에 그렇게 많이 참여한것도 아니었고 여러명이서 협업하면서 Git을 써본적은 없기 때문에 잘 쓴다고 말하기는 어려웠다.

이전의 커밋들을 합쳐서 하나의 커밋으로 만들 수 있는가?

해본적도 없고 누가 이렇게 한것도 본적이 없어서 모른다고 했다. 이 부분에서 내가 Git을 혼자서 대충 커밋만 날리는 정도로 사용한다는걸 아셨을것같다.

NoSQL을 써봤는가?

예전에 인터넷에서 튜토리얼을 따라하면서 MongoDB를 쓴 적이 있었는데, 그냥 써보고 불편했던 점들만 말씀 드렸다. 내가 이부분은 잘 몰라서 모른다고도 말씀 드렸다.

ORM으로는 무엇을 사용해봤는가?

Python으로 만들어진 웹프레임워크인 Flask인가, Django인가 하는곳에서 ORM을 사용한다고 듣긴 들었는데, 뭔지 몰라서 그냥 모른다고 했다. 시퀼라이져? 이런용어도 나왔는데 내가 serialize와 햇갈려서 이상한 말을 하기도 했다.

클라우드 호스팅을 써봤다고 했는데 AWS였나?

AWS는 가볍게 개인 블로그를 운영할때 써봤다가 비용문제 때문에 안쓴다고 말씀 드렸다. 또한 Vultr라는 다른 클라우드 호스팅 업체에서 가상 컴퓨터 하나 빌려서 우분투 위에 Node.js + Nginx + MySQL을 직접 설치해서 사용하고는 있다고 말씀 드렸다.

PHP와 Javascript의 변수 스코프에 대한 차이는?

나는 PHP나 Javascript모두 함수 안에서 외부의 변수에 접근할 수 없는점(이것도 정확하지 않음…), Javascript는 함수안에 함수를 쓰면 클로저로 외부 함수의 변수에 접근할 수 있는점, 그리고 몇가지 말같지도 않은 지식들을 말씀드렸다. 되게 기본적인 거라서 잘 모른다고 말씀드리기가 어려웠다. 나에게 “그래서, PHP는 블록 단위고 Javascript는 함수단위로 변수 스코프가 결정된다는 말인가요?” 라고 되물으셨지만, 대충 얼버무리면서,,,이상하게 답변이 끝났다. 이때 스스로에게 많이 실망했고, 이때부터 몸이 조금 긴장되서 떨리기 시작했다.

Javascript의 클로저에 대한 설명을 해보세요

이건 다행이 내가 전날에 클로저에 관련된 좋은 글을 읽어서 잘 대답할 수 있었다.

Javascript의 언어적인 특징을 이야기해보세요

함수가 객체인점, 변수의 키워드로 var를 사용하고, 클로저라는 특이한 함수가 있고, 등등을 이야기 하다가 생각이 안나서 은근 슬쩍 V8엔진으로 이야기를 바꾸어서 설명했다. 이벤트 루프가 어쩌니, 비동기 통신이 어쩌니, Node.js와 PHP에서 사용자의 request를 처리하는 방식이 어떻게 다르니 등등을 이야기 하다가 면접관님께서 다시 질문을 하셨다. “아니 그거 말고요 처음에 질문한 javascript의 언어적 특징에 대해서 설명해 보세요”. 나는 이때 내가 약간 사기치다가 걸린 기분이었다. 그래서 본론으로 돌아갔는데 그 이후는 잘 기억이 안난다. 아마 대답을 잘 못했던것 같다.

ES6에 들어와서 생긴 몇가지 특징들을 이야기해보세요

let과 const, async/await, import 등이 생겼다고 말씀 드렸다. 하지만 이 외에도 더 많이 있는데 내가 모르는것 같다고 말씀해주셨다. 맞다,, 저것밖에 몰랐다.

async/await 함수의 리턴값은?

이건 다행이 내가 에러를 겪은적이 있어서 Promise를 돌려준다는걸 알아서 대답을 잘 했다.

Promise란 무엇인가?

제대로 써본적이 없어서 그냥 callback hell을 피하기 위해서 만든, 개발자를 위한 비동기 함수 호출할 때 사용하는 틀? 같은거라고 답변을 드렸다. 또 then으로 계속 이어서 쓸수 있다고 말씀 드렸다.

let과 const가 var와 어떻게 다른가?

varvar a = 10 이라고 쓴 다음에 또 var a = 100 이렇게 재선언을 할 수 있다고 했고, 이게 프로그래밍을 하는데 버그를 만들 여지가 있어서 let이 도입됐다고 말씀 드렸다. let은 재선언은 안되고 값을 재할당 하는건 된다고 했고, const는 이름처럼 상수로써, 재선언 및 재할당이 안된다고 말씀드렸다.(맞는지 모르겠다)

아까 실행 컨텍스트에 대해서 말씀하셨는데, let과 const가 실행 컨텍스트 측면에서 var와 어떻게 다르죠?

모른다고 말씀드렸다. 뭔가 다른게 있는지 처음알았다.

코드 리뷰는 해보았는가?

처음에는 말 그대로 내가 쓴 코드를 내가 다시 본다는 의미인줄 알았는데, 알고보니 내가 쓴 코드를 다른사람과 공유하면서 개선할 점이 있는지 의견을 나누는 과정을 의미하는거였다. 그런적은 없어서,,, 없는걸로 이야기가 마무리됐다.

자동화 테스트는 해보았는가?

안해봤다고 말씀 드렸다. 부연설명으로 자동화 테스트를 할만큼의 규모있는 프로젝트가 없었다고 말씀드렸다. (사실은 귀찮아서 안한거지만…)

철학적인 질문

개발자에게 있어서 성장이란 무엇이라고 생각하는가?

뭐라 막 말했는데, 잘 기억이 안나지만 분명한건 이상한 말이었다.(ㅠㅠ)

훌륭한 개발자란 어떤 개발자라고 생각하는가?

1초만에 대답했다. “기초가 탄탄한 개발자 입니다”. 근데 말하자 마자 뇌에서 0.1초만에 이런 말이 들렸다. “너 아까 javascript의 기초적인 것들도 몰랐잖아…”. 부끄러웠다. 하지만 나는 지식적인 측면(컴퓨터 공학 및 내 전문분야)에서도 기초지식이 중요하다고 생각하고, 태도적인 측면(약속을 잘 지킨다던지, 상대방의 말을 경청한다던지, 내가 틀릴 수도 있다는 점을 인지하고 있는다던지)에서도 기초가 중요하다고 생각한다. 그래서 기어가는 목소리로 위와 같은 나의 생각을 말씀드렸다. 이때 내가 뭔가 헛소리를 하는 몽상가가 된 기분이 들었다. 면접관님의 반응은 그냥 그랬다.

결론

나는 면접을 하면서 내가 많이 부족하다는것을 느꼈다. 또한 많이 부족한 나와 면접을 40분이나 진행해주신 면접관님께 감사했다. 다음에 다른곳에서 면접을 본다면, 관련 기술을 미리 많이 공부하고, 모르는건 모른다고 솔직하게 말하고, 질문에 알맞는 답변을 해야겠다. 떨리고 스스로에게 실망한 면접이었지만 나의 부족한 점들을 알 수 있어서 좋은 경험이었다😁​​.

P.S. 위에서 제가 제대로 답변못한 개발 지식 관련 질문들에 대해서는 다른 포스트에서 다룰 예정입니다 😀

  1. 정말 도움 많이되는 글이였습니다
    풀스택으로 경력이 없는 초반에는 언어의 핵심적인 질문에 답하기가 더 어려운거 같아요

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Up Next:

SSH로 EC2 Instance에 접속하기

SSH로 EC2 Instance에 접속하기