본문 바로가기
Log/private

2021 Summer Coding - 여름방학 스타트업 인턴 프로그램 면접 후기

by HenryNoh 2021. 5. 20.

5/17 그리고 5/20 2번에 걸쳐 2곳의 스타트업 기업에 면접을 보고 왔다.

인생 처음의 면접이라 그런지 많이 긴장되기도 하였고 사실 그렇게 당장 취업할 마음이 없어서인지 준비도 많이 안 한 상태에서 본 것이라 대답을 못 한 질문도 상당히 많았고, 면접을 하면서도 배운 것들이 상당히 많아서 정리해보려 한다. 두 곳에서 느낀 점에 대한 비교보다는 면접 준비를 어떻게 해야 하는지 IT기업이든 아니든 개발자 면접이 어떤 식으로 정말 진행되는지를 쓸 것이고 나중에 내가 다시 취업전선에 뛰어들어서 면접을 보려고 할 때 이 글이 미래의 나에게 꼭 도움이 되기를 바라면서 작성해본다.

1. 프로젝트

나는 자소서에 프로젝트를 2가지를 써서 냈다. JS를 이용한 크롤링 프로젝트와 React를 이용한 Blog-Clone 프로젝트였다.

첫번째 기업에서는 당장 실무에 필요한 개발자를 찾아서인지 좀 더 프로젝트에 치중된 면접이었다. 내가 React를 사용하면서, Javascript를 사용하면서 어떤 것들을 이용해서 개발을 진행하였고 어떤 식으로 설계를 짜서 하였는지에 대해서 물어봤다. 솔직히 말해서 IT 전문 기업은 아니기에 질문의 깊이 자체는 깊진 않은 편이었으며 첫 면접이라 약간의 준비도 한 상태여서 React에 관련된 많은 질문들에 대해서 완벽하게는 아니더라도 대답을 잘한 것 같기는 했다. 또한 회사에서 AWS를 이용하여 모든 웹앱 서비스를 제공하고 있는 상태여서 AWS에서 어떤 기능을 써봤는지 그걸 사용할 수 있는지에 대해서 물어보는 경향이 강했다.

오늘 본 두번째 기업은 전혀 다른 느낌의 질문들이 강했다. 심지어 프로그래머스의 1차 코딩 테스트 이후에 과제 테스트도 주어진 상태였고 나는 약 3일에 걸쳐서 과제 테스트를 마무리하고 제출하니 4시간 만에 면접을 보러 오라는 답을 받은 상태여서 비슷하게 프로젝트와 과제에 대한 질문들이 많을 줄 알았다. 그런데 막상 면접을 진행해보니 내가 얼마나 언어와 컴퓨터의 깊은 부분까지 알고 있는가, 어떤 함수 혹은 프레임워크의 중추적인 동작 방식이 무엇인가, 그 언어를 선택한 이유가 무엇인가, 이러한 상황에서 그런 프레임워크가 없다면 어떻게 할 것인가 등을 많이 물어보았다.
한 줄로 줄여서 말하자면 내가 프로젝트를 잘했건 못했건 상관없이 네가 한 프로젝트에서 쓴 그 언어들을 너는 얼마나 알고 있어?라는 질문들이 많았다.

처음 면접을 본 이후에는 JS의 기초지식들을 확실히 알면 면접은 볼만 하겠구나. 였다면 오늘 면접을 보고 온 이후는 나는 정말 쥐뿔도 모르는 바보이다.라는 생각으로 바뀌게 되었다.

2. 언어

개발자는 자신의 주력 언어를 가지고 있어야 한다. 나는 주력 언어라고도 말하기 부끄러운 C++과 React가 있다. 지금에서야 React는 클래스형 컴포넌트를 사용하지 않고 함수형 컴포넌트를 사용하고 있지만 요즘 들어 함수형 컴포넌트를 사용함에도 불구하고 LifeCycle Method에 대해서 "알아야" 한다는 생각이 강해진 것 같다.

또한 함수형 컴포넌트로 넘어온 React의 세상에서 Hooks의 역할이 가장 중요하게 바뀌었는데 Hooks란 무엇인가 라는 질문에 제대로 대답을 하지 못하였다. 이것은 전적으로 내가 그냥 Hooks는 이런 게 있고 이렇게 사용한다.라고만 공부하고 거기에 그쳐서 왜 그런 것을 사용하는지 그것의 본질이 무엇인지를 공부하지 않은 내 잘못이다.

React에서는 프로젝트의 규모가 커질수록 Props를 사용한 상태 관리는 불가능에 가깝다. 그러면 대부분이 상태관리 라이브러리로 Redux를 많이 채용하는데 Redux는 하나의 스토어다.라고 끝내버린 내 안일한 생각에 지금도.. 부끄러움을 감추지 못하겠다.

Redux-Saga / Redux-Thunk / 각종 Middleware는 말할 필요도 없다.

그러면 C++은 잘하는가. 그것도 아니다. C++로 코딩 테스트를 준비하면서 STL Library를 마구잡이로 가져다가 썼을 뿐이지 내가 깊이 있게 공부해본 적은 단 한 번도 없다. 이러한 문제는 기초적인 CS지식으로 넘어가면서도 연결된다.

3. CS (Computer Science) 지식

전공 4년을 거치며 정말 많은 것을 배웠고 전공과목을 공부할 당시에는 정말 많은 노력을 하였다. 근데 지금 보면 아무것도 모른다. 왜? 정리를 해놓지 않아서. 복습할 자료가 남아있지 않은 것이다. 만약에 이 글을 보고 있을 대학생이 있다면 정말 지금부터라도 다 정리하는 습관을 가지는 것을 추천한다.

사실 위와 같은 계기로 블로그도 시작했던 것이지만 코딩 테스트 관련 문제풀이에만 너무 집중한 것 같아서 요즘은 그 방향성을 조금 바꿔 보려 한다.

오늘 본 면접에서 Sort와 관련된 질문을 받았고 결국 제대로 대답하지 못하였는데 면접 이후에 잠깐 찾아보고 왜 다 까먹었을까를 고민하고 다음과 같은 것들을 알아야겠다 라고 생각을 하였다.

알고 있는 Sort에 대해서 3가지 정도 말하고 그것의 시간 복잡도와 공간 복잡도를 얘기해보고 뭐가 다른지를 설명해볼 것.
해당 Sort들이 실제로 언어에서 동작할 때도 그것과 똑같은 방식으로 진행되는지?
Sort를 자신이 사용하는 언어에서 실행할 때 메모리를 직접적으로 사용하는지 혹은 참조하는지 혹은 다른 방식을 사용하는지.
위의 질문을 대답할 수 있다면 어떠한 가상의 상황을 생각해서 어떤 정렬을 사용해야 할지.
그보다 더 좋은 방법은 없는지.

이것은 정렬에 대해서만 국한되는 것들이 아니다. 다른 자료구조들에 대해서도 각 언어마다 모두 다른 차이를 가지고 있기 때문에 자신이 사용하는 언어에 대해서 자료구조들이 어떠한 특성을 가지는지는 기본적으로 알아야 하는 필수요소인 것 같다.

(심지어 나는 자료구조, 알고리즘, OS에 대해서 셋다 A+을 받아놓고는 다 까먹었다.. 정말 이제는 하나도 기억이 안 난다.)

4. 진짜 개발자로 취직을 하려면 무엇을 준비해야 하는가에 대한 생각

규모가 큰 프로젝트? 사용자수를 몇 천명 확보하는 서비스? 많은 프레임워크들과 라이브러리를 써서 UI UX가 거창한 웹앱?
이제야 느낀 것이지만 내 코드를 세세하게 다 뜯어볼 기업은 한 곳도 존재하지 않는다. 다만 README.md를 읽는 기업은? 100%이다. 프로젝트가 절대로 중요하지 않다는 것은 아니다. 다만 막 8개 9개 10개씩이나 써가며 포폴을 거창하게 늘릴필요는 없다고 본다. 오히려 많으면 많을수록 질문이 수없이 많아질 것이고 면접 때 힘들기만 할 것이다. 적당하게만 제출하면 된다. 본인이 최대한 자신 있고 잘한 것으로.

또한 내가 했고 완벽한 프로젝트에 대해서는 자소서 혹은 포폴에 제출하기 전에

  1. 주석 작성
  2. 에러 해결에 대한 코드 작성
  3. 확실하게 알 수 있는 함수명 및 변수명
  4. 얼마나 프로젝트를 하면서 깊이 있게 고민하였는지

를 모두 생각하고 정리해놓은 다음 제출하는 것을 추천한다.

코딩 테스트에 대해서 요즘 들어 바뀐 생각인데 주석 작성을 생각보다 많은 사람들이 하고 있는 것 같다. 그래서 나도 해보려 한다. 시간에 쫓기듯 코드 쓰는 게 아니고 확실하게 설계하고 주석 다 쓰고 순서에 맞게 코드를 짜가는 과정을 반복하는 것으로 바꿔보려고 한다. 물론 코딩 테스트는 진짜 노력과 시간과의 싸움이다. 단기간에 해서 발전할 수 있는 것은 전혀 아니고 꾸준히 노력해서 공부해야 한다.

그리고 마지막으로 가장 중요한 건 습관인 것 같다.

  1. 고민하는 습관.
  2. 깊이 있게 알려는 습관.
  3. 그냥 무턱대고 코드 짜니까 되는 것 말고 어떻게 되는지 확실히 알고 코드 짜는 습관.
  4. 모르는 것을 찾을 때는 공식 Document -> API Reference -> StackOverflow -> 블로그 순으로 찾아보기.
  5. 마지막으로 정리하기. 

자신이 지금 무엇을 해야 할지 모르겠고 어떤 방식으로 성장해야 할지 모르는 사람이 있다면 주변의 개발자들이 어떤 식으로 공부할지를 찾아보며 따라 하는 것도 아주 좋은 방법이라고 생각한다.

취업은 잠시 접어두고 다시 공부를 힘내 보도록 하자. 개발자를 준비하시는 모든 분들 파이팅!

(궁금하신 점이 있으시다면 따로 댓글을 남겨주세요!)

댓글