네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

2020년 하반기 네이버 공채 1차 / 2차 면접 후기


1년 전, 기억을 되살리기엔 너무 오래전 이야기지만 다른 사람들에게 도움이 될까 싶어서 꺼내보려고 한다.
사실 이 후기를 1년 전에 적었어야 했는데 불합격 후 멘탈을 다시 부여잡는데 시간이 오래 걸렸다. 다시 취준을 시작하는 것이 좀 힘들기도 했고 부족한 점이 뭔지 차근차근 살펴보는 시간도 필요했기 때문에 이제야 글을 쓰게 되었다. 그리고 2021년 하반기 네이버 서류 합불 발표와 함께, 면접 일정이 잡혔다는 소식을 접하게 되면서 면접을 준비하는 사람들에게 도움이 되고자 조금 작성해보려 한다.

물론, 이 글은 면접 전에 작성했던 정보 보안 서약서 때문에 조심스러운 부분도 있다. 하지만, 네이버뿐만 아니라 다른 기업들도 비슷하게 기술 면접을 진행할 것이고 네이버뿐만 아니라 기술 면접을 준비하는 모든 분들을 대상으로 작성하였다. 그동안 내가 기술면접을 보고 나서 생각했던 부분들을 작성하였기 때문에 그 부분을 참고해서 보면 좋을 것 같다. "이런 문항이 나온다!" 보다는 "이렇게 준비하면 좋다!" 혹은 "이렇게 준비했으면 더 좋았을 걸!"이라는 내용을 담을 것이다. 때문에 뻔한 내용일 수 있다는 점... 물론 문제가 된다면 연락 부탁드립니다.

1차 면접

코딩 테스트와 서류 합불 발표가 뜨고 1차 면접 일정이 잡혔다. 서류 발표가 20년 10월 16일이었고 면접 일정은 10월 20일 날 잡혔다. 그리고 면접은 10월 23일(금요일)이었다. 아직도 기억나는 게 이때 내가 42 서울 피신을 진행 중일 때라 정신이 없었는데 더불어 면접도 급하게 준비한다고 바빴다. 피신에서 매주 금요일은 시험을 보는 데, 시험 시간과 면접 시간이 겹치는 바람에 클러스터 근처에 스터디룸을 빌리고 시험 중간에 나와서 면접을 보았다.

중고 신입은 면접 일자가 토요일에 잡히는 듯 보였고 생신입은 평일에 배정되는 듯 보였다. 물론 모든 사람이 그렇게 배정되는 것은 아니지만 면접 일자를 변경할 수 없으니 네이버에서 최대한 배려를 해주신 것 같았다. 나는 당시 대학교 4학년이었고 졸업 예정자였기 때문인지 금요일에 면접을 보게 되었다.

사람마다 1차 면접 내용이 다른 것 같지만 나는 CS 위주의 질문을 많이 받았다. 크게 알고리즘, 운영체제, 네트워크 ! IT 기술 면접에서 흔하게 나오는 질문들이 나온다. 아, 그리고 모든 면접이 그렇듯 1분 자기소개는 준비해 가야 한다. (물어보지 않는 기업들도 있었지만, 거의 99%가 자기소개를 준비해 가는 것이 좋고 네이버 역시 간단한 자기소개로 면접이 시작된다.)

# 알고리즘

알고리즘은 크게 이론라이브 코딩으로 나뉘게 된다.
이론은 다들 알고리즘이나 자료구조 시간에 배웠던 이론들을 다시 정리하는 시간을 가지면 좋을 것 같다. 지금 생각해보면 삼성 알고리즘 특강이 많이 도움이 되었을 것 같다. (20년도에 네이버 면접을 보았고 21년에 삼성 알고리즘 특강을 들었다) 지금까지 배운 알고리즘을 정리하면서 어떤 문제가 생겼을 때 어떤 알고리즘을 쓰는 것이 효율적인지 정리하는 것이 좋다. 네이버뿐만 아니라 다른 기업에서도 코딩 면접에서는 시간 복잡도와 공간 복잡도를 물어보는 경우가 많다. 단순히 이런 알고리즘에는 시간 복잡도가 뭔지 암기하는 것이 아니라 코드를 보면 시간 복잡도는 얼마인지 공간 복잡도는 얼마인지 계산할 줄 알아야 된다.
라이브 코딩은 문제가 주어지고 그에 맞는 코드를 작성하면 된다. 작년 네이버 공채 면접은 손 코딩으로 진행되었는데 면접에 따라 화면 공유를 해서 라이브 코딩을 한 경우도 있었다(네이버 웹툰 인턴 면접은 화면 공유로 진행했었다). 문제는 생각보다 단순하고 어렵지 않다. 내가 생각했을 땐 코딩 테스트를 합격하고 면접을 본 사람이라면 라이브 코딩에서 나오는 문제는 쉽다고 느낄 확률이 높다. 라이브 코딩에서 중요한 건 면접관들과의 소통이라고 생각한다. 라이브 코딩에 주어지는 문제는 대개 코딩 테스트에 쉽고 단순하기 때문에 허점이 있다. 절대 코딩 테스트에서 나오는 것처럼 처리해야 할 모든 예외처리를 알려주지 않는다. 이 때는 면접관들과 이런 경우 어떻게 처리하면 좋은지(예. 배열을 반환해야 하는 메서드를 작성해야 할 경우, 아무것도 없는 상태를 반환하고 싶을 때 null을 반환할지 []을 반환할지 [0]을 반환할지, 물론 문제 상황에 따라 어떤 것을 리턴해야 좋을지는 다를 것이다.) 대화하면서 작성하는 것이 중요한 것 같다. 단순히 코딩 능력을 보는 것이 아니라 주어진 문제에서 어떤 것을 보았고 어떻게 면접관과 소통하며 해결해 나갈 것인지를 확인하는 질문이라고 생각한다. 크게 걱정을 하지 않아도 되는 점이 코드를 보고 면접관분들이 질문을 해주시는 과정 속에(이런 경우는 어떻게 하면 될까요?, 지금 코드는 이런 것은 반영하지 않은 것 같은데요.) 코드를 작성하면 수월하게 해결할 수 있을 것이다. 보통 이런 경우 꼬리물기 질문이 계속된다. 코드를 작성하는 것뿐만 아니라 코드 한줄한줄마다 정당성을 부여하면서 말로 정리하는 연습을 하면 좋을 것 같다.

# 네트워크, 운영체제 및 기타 CS 지식

이 부분에 대해선 말해줄 것이 크게 없다. (깃허브만 가도 정리해주신 분들이 엄청 많다.) 오히려 말하고 싶은 것은 그런 것에 너무 의존하지 말라는 말을 드리고 싶다. 면접 전 스스로 고민할 시간이 무조건 필요한 것 같다. CS 질문 같은 경우 연관된 개념 이론들이 많아서 꼬리물기 질문이 계속될 수밖에 없다. 꼬리물기 질문을 받다 보면 당연히 막히는 구간이 생길 것이다. 그런 질문에 대답을 잘하는 것이 중요한 것 같다. 다양하게 생각해보는 것만으로도 좋은 준비가 될 수 있고 실제 개발에선 어떻게 해결하는지 찾아보고 가면 더 좋을 것 같다. (예를 들어 A와 B의 차이에 대해서 설명하다가 면접관이 그래서 무엇이 좋은 것 같나요? 혹은 본인이 개발한다면 어떤 것을 사용하실래요? 묻는 질문에 대답을 할 때 단지 "어떤 것"만 언급하는 것이 아니라 논리적이고 합당한 이유도 대답하면 좋다. 대답을 했을 땐 그런데 이런 단점도 있지 않을까요? 이런 것은 어떻게 해결하실래요? 와 같은 꼬리 질문이 시작된다.)

# CS 면접 준비 관련 깃허브

https://github.com/ksundong/backend-interview-question

GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질

백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문, 인터넷 참고한 질문(CC BY-NC) - GitHub - ksundong/backend-interview-question: 백엔드 개발자로 입사를 준비하며 받았던 질문, 예상했던 질문,

github.com

https://github.com/WeareSoft/tech-interview

GitHub - WeareSoft/tech-interview: 🙍 tech interview

:loudspeaker:🙍 tech interview. Contribute to WeareSoft/tech-interview development by creating an account on GitHub.

github.com

https://github.com/gyoogle/tech-interview-for-developer

GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

# 2차 면접

사실 떨어질 것 같았던 1차 면접이 붙었다. 얼떨떨한 기분이 먼저 들었던 것 같다. 물론 공식적인 경쟁률은 알려진 적이 없지만, 그때 당시 합격자들끼리 추정하던 카더라 2차 면접 경쟁률은 2:1 정도였던 것 같다. (더 아래일 수도 더 위일 수도... 사실 네이버 인사팀 말고는 아무도 모르는 것 아닌가?) 2시간정도 진행되던 1차 면접과는 다르게 2차 면접은 1시간 동안 진행하는 면접이었기 때문에 끝나고 좀 더 마음이 편했다. 20년 11월 13일에 1차 면접 합격자 발표가 떴고 11월 20일에 2차 면접을 보았다.
2차 면접은 자기소개서와 포트폴리오를 바탕으로 한 기술 면접이었다.
면접을 준비하기 전 포트폴리오와 자기소개서를 꼭 정리를 해야한다. 그리고 포트폴리오에 깃허브가 있다면 깃허브 정리를 하면서 코드를 한 번 더 확인하고 코드 리팩토링을 할 수 있으면 진행하는 것을 추천한다. 면접관님들이 무조건 확인을 하기 때문에 깃허브나 블로그를 한 번씩 정리하는 것이 좋다. 블로그에 남긴 글은 한번 읽으면서 상기시키고 가는 것이 꼭 필요하다. 면접 도중에 블로그에 있는 글에 대해 물어보는 경우도 있었다. 내가 정확히 알고 있는 것이 맞는지, 까먹은 것은 아닌지, 잘못된 개념을 블로그나 깃에 올린 것은 아닌지 확인하면서 정리하는 시간이 무조건 필요하다고 생각된다. 깃허브, 블로그 등 안 하는 것보다 하는 것이 낫지만, 기록을 한다면 제대로 알고 기록을 하는 것이 중요하다고 생각했다.
포트폴리오
1. 어떤 기술을 사용했는지
- Spring, JPA, MyBatis, AWS EC2/RDS/S3, Golang, Javascript ES6, React, Vue, JWT, Redis, Mysql 등등
- 그 기술에 대한 전반적인 이론도 알아야 됨. 예) Spring이라면 IoC가 무엇인지, Redis를 사용한 이유는 무엇인지, JWT와 다른 인증 방식의 차이점은 무엇인지 등
2. 기술 - 어떤 문제가 발생했고 어떻게 해결했는지
- N+1 Query 문제 해결, 코드 리팩토링 과정, 배포 시 생긴 문제 등
3. 사람 - 어떤 문제가 발생했고 어떻게 해결했는지
- 팀내 불화, 책임감이 없는 팀원, 백엔드 혹은 프런트 팀원의 부재, 촉박한 마감기한 등
4. 비즈니스 로직을 어떻게 구현했는지
- 그 기능이나 서비스가 필요했는지
- 그래서 비즈니스 로직을 어떤 식으로 짰는지, 2번과 연결 지어 정리

2차 면접은 "이 프로젝트를 진행하면서 이만큼이나 고민했어요.", "저는 회사에서 이만큼 기여할 수 있어요." 혹은 "저는 이 정도까지 열정이 있는 사람이에요" 라는 것을 보여주는 것이라고 생각한다. 그리고 본인의 장점은 무엇인지, 단점은 무엇인지, 그 단점을 극복하기 위해 어떤 노력을 해왔는지 이런 것들을 개발, 본인 포트폴리오와 엮어 설명하면 더 좋을 것이라고 생각된다.



사실 면접 후기라는게 어쩌면 진부한 글(정말 진부했다...)이 될 수 있는데, 아무튼 적어보았다. 나는 비록 최종 면접에서 불합격을 했지만, 정말 좋은 경험이었다.(나의 장점.. 긍정충..) 주위에 친한 개발자 선배들도 없었고 혼자 취업 준비를 했기 때문에 이런 경험은 더 뜻깊었던 것 같다. 또, 피드백을 받는 것을 정말 좋아하는데 개발 경력이 최소 10년 이상인 사람이 내 코드를 읽고 내가 하는 말을 들으면서 조언을 해주고 같이 이야기한다는 것이 너무 감격스러웠고 그 시간이 정말 정말 소중했다. 현실적이지만 합격하든 불합격하든 면접도 나를 성장시키는 또 하나의 발판이라고 생각한다. 면접을 준비하는 기간에도, 면접을 하는 그 시간에도 정말 많은 것을 배울 수 있고 많은 것을 생각할 수 있는 시간을 가지게 된 것 같다.




donaricano-btn




728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !