Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
카카오 계열사 이직 준비 & 면접, 그리고 꿀팁
#ssul
2년 전
14,011
9

안녕하세요, 저는 이제 막 1년차가 된 신입 백엔드 엔지니어입니다.

저는 운좋게 얻은 기회를 통해 카카오 계열사의 1차 면접까지 갔었으나, 아쉽게도 탈락하고 말았습니다. 하지만 면접을 준비하고, 복기하는 과정에서 스스로 배운 내용이 굉장히 많았기에, 이를 공유하여 열심히 공부하고 계실 취준생분들, 또는 이직을 희망하시는 분들께 조금이나마 도움이 되고자 글을 써봅니다.

면접까지의 여정

1. 부트캠프 참여

저는 작년 7월에 쿠버네티스 부트캠프에 참여하였습니다. 쿠버네티스는 요즘 워낙 핫한 컨테이너 오케스트레이션 툴이기 때문에 배워두면 제 커리어에 반드시 도움이 될 것이라는 확신이 있었기 때문입니다. 가격은 조금 비쌌지만, 강의 내용이 매우 알찼고, 늦은 시간에도 슬랙으로 질문에 대한 답변을 성심성의껏 해주셨던 강사진분들 덕분에 직장을 다니면서도 매우 만족하며 재밌게 학습할 수 있었습니다.

강의가 마무리되고 부트캠프가 종료될 즈음에, 수료생을 대상으로 한 카카오 계열사의 채용 전형에 지원할 수 있는 자격을 부여한다는 공지사항이 올라왔습니다. 사실 현 직장에 나름 만족하며 다니고 있긴 했지만, 모처럼 얻은 기회인 만큼 열심히 준비해서 좋은 결과를 내보자는 마음가짐으로 약 한 달간 집중해서 이직을 준비하였습니다.

2. 코딩테스트 준비

채용프로세스는 코딩테스트 -> 1차 면접 -> 2차 면접으로 이루어져 있었습니다. 카카오 계열사의 코딩테스트는 워낙 어렵기로 소문이 자자했기에, 코딩테스트 전까지는 코딩테스트 준비에만 올인하기로 하였습니다. 1주일은 구현 및 시뮬레이션 문제 위주로 준비하였고, 그 이후에는 프로그래머스나 백준의 기출문제를 풀면서 DFS나 BFS, DP같은 빈출 유형에 해당하는 알고리즘도 꼼꼼히 공부하였습니다.

3. 코딩테스트 과정 및 결과

예상했던 것과는 다르게 코딩테스트는 굉장히 쉬운 난이도로 출제되었습니다. 부트캠프 수료자 대상 전형이기 때문인지는 모르겠지만, 실제 카카오 공채 코딩테스트와는 꽤 차이가 있었습니다. 총 4문제에 2시간이 주어졌고, 1~3번은 모두 시뮬레이션 및 구현 문제로 출제가 되었고, 4번은 다양한 알고리즘으로 접근할 수 있는 문제였습니다. 하지만 입력 데이터의 크기가 굉장히 작았기 때문에, 시간 복잡도를 고려하지 않고 직관적으로 떠오르는 방식으로 풀이를 하였습니다. (이것이 면접때 굉장히 큰 패착이 되었습니다.. 자세한 내용은 후술합니다.) 약 1시간 10분만에 4문제를 모두 풀었고, 코딩테스트는 통과했다는 확신이 들었기에 바로 면접 준비를 시작하였습니다. 예상대로 1주일 뒤에 코딩테스트에 합격했다는 메일을 받았고, 혹시나 했던 불안감이 사르르 녹아내리면서 면접 준비에 더욱 몰입하게 되었습니다.

4. 1차 면접 준비

가장 먼저 자기소개와 이직 사유를 준비하였습니다. 쿠버네티스 관련 직군이었고, 부트캠프 이외에 쿠버네티스를 사용한 경험은 없었기 때문에 면접관의 관점에서 최대한 이해와 납득이 갈 수 있을 만한 내용으로 구성하였습니다. (저는 이러이러한 경험은 없지만 이러이러한 일을 해왔기 때문에 해당 직무를 수행함에 있어 도움이 될 것이라는 내용을 우회적으로 녹여내었습니다.) 첨삭에 첨삭을 거치며 자다가 벌떡 일어나도 달달 외울 정도로 암기하였습니다.

이후 쿠버네티 관련 서적 한 권을 구입하여 쿠버네티스 클러스터 구축부터 쿠버네티스 리소스, 스케줄링에 대한 실습을 진행하였습니다. ingress나 service와 같이 중요하다고 생각되는 개념은 별도로 메모를 하면서 최대한 암기하려고 노력했습니다. 부트캠프 자료들도 N회독하면서 최대한 많은 범위의 지식을 담기 위해 노력했습니다.

5. 1차 면접 과정 및 결과

면접은 google meet으로 진행되었습니다. 실무개발자 두 분이 면접에 참여해주셨고, 본인의 영어 이름과 하고 있는 일을 소개해주시며 편안한 분위기를 만들어주셨습니다.

1) 간단한 자기소개와 이직사유에 대해 말해주세요.

예상했던 대로, 간단한 자기소개와 이직 사유를 물어보셨고, 철저히 암기했던 터라 매끄럽게 답변하였습니다.

2) 해당 직군을 선택해서 지원한 이유를 말해주세요. 실제로 합격하시게 되면 이러이러한 업무를 맡으실 겁니다. 어떻게 생각하시나요?

이 부분은 제가 부트캠프에 지원하게 되었던 계기와 그동안 해왔던 업무 내용을 말씀드리면서 쿠버네티스 관련 개발을 하며 흥미로웠던 점을 덧붙여서 말씀드렸습니다.

3) 마지막 문제에 대한 시간복잡도를 말해주세요. 이를 더 효율적으로 개선할 수 있는 알고리즘에 대해 설명해주세요.

역시나 코딩테스트에 대한 질문이 나왔습니다. 제가 풀었던 알고리즘의 시간복잡도는 O(n!) (엄청나게 비효율적인..) 이었는데, 면접 당시에 워낙 긴장을 해서 사고가 거의 정지되다시피 하였습니다. 결국 알고리즘의 개선 방안에 대해서는 제대로 답변을 하지 못했고 이 부분이 가장 크게 마이너스가 되지 않았나 생각됩니다.

4) 쿠버네티스를 이용해서 해당 문제를 어떻게 해결할 수 있을까요?

사실 이 질문에서 거의 뇌정지가 오지 않았나 생각합니다. 쿠버네티스로 알고리즘 문제를 해결한다고..? 라는 의문만 머리에 가득 채워진 채로 답변하지 못한 채 넘어가고 말았습니다.. 이후 면접관님께서는 Deployment를 통해 ReplicaSet을 여러 개 생성해서 데이터 입력을 분산시킨 다음, 계산이 끝나면 다시 ReplicaSet을 줄이는 방식으로 해결할 수 있을 것 같다고 말씀해주셨습니다. 쿠버네티스 리소스를 활용하여 해결 방안을 떠올릴 줄은 전혀 생각하지 못했습니다. 저의 문제 해석이 완전히 잘못되었던 것입니다.

5) 부트캠프동안 배웠던 내용에 대해 요약 정리 부탁드립니다.

그동안 배웠던 내용을 천천히 떠올려가며 최대한 자세히 말씀드렸습니다. 긴장해서 그런지 중간에 빼먹은 내용이 되게 많았던 것 같지만, 최선을 다해 설명했습니다.

6) 사용하시는 언어가 python과 C++이라고 하셨는데, 각 언어의 장단점에 대해 설명해주세요.

컴파일 언어와 인터프리터 언어 측면에서의 장단점을 말씀드렸습니다. python은 인터프리터 언어이기 때문에 실행 속도는 느리지만, 생태계가 매우 넓기 때문에 개발을 함에 있어서 매우 편리하다 등등..

7) 클라우드 환경에 대해 설명해주세요.

굉장히 친숙한 단어였음에도 불구하고 이를 풀어서 설명하려니 입이 쉽게 떨어지지 않았습니다. 횡설수설해서 어떻게 답변했는지 정확히 기억이 나질 않았습니다.

8) CNI에 대해 설명해주세요.

쿠버네티스 클러스터에서 컨테이너간 네트워크 통신을 구축하는 역할을 하는 인터페이스라고 말씀드렸습니다.

9) 쿠버네티스 클러스터에 워커 노드를 새로 추가하려면 어떤 과정을 거쳐야 하나요?

VM 준비, 도커 설치 이후 CNI 설치, 해쉬값을 바탕으로 kubeadm join 명령 수행 등 최대한 기억나는 대로 답변하였습니다.

10) ClusterIP와 NodePort의 차이점에 대해 설명해주세요.

ClusterIP는 클러스터 내부에서만 접근 가능하지만 NodePort를 통해서는 외부에서도 접근 가능하다고 답변했습니다.

11) Service 오브젝트를 통해 트래픽이 로드밸런싱되는 과정을 설명해주세요.

이 과정을 설명하면서 Container와 Pod를 혼동하는 치명적인 실수를 하였습니다. 트래픽이 서비스 포트에 접근하여 파드로 로드밸런싱이 된다고 말했어야 했는데, 파드에 접근해서 컨테이너로 로드밸런싱이 된다고 잘못 답변하였습니다. 두 번째 치명적인 실수였다고 생각합니다.

12) Ingress에 대해 설명해주세요. Service와는 어떤 차이점이 있을까요?

Ingress는 http 도메인을 기반으로 OSI 7계층에서 트래픽에 대한 로드밸런싱을 수행하고, Service는 3계층에서 로드밸런싱을 수행한다고 답변했습니다.

13) MSA 아키텍처의 정의와 장단점에 대해 설명해주세요.

하나의 프로그램을 여러 컴포넌트로 분할하여 서비스를 구축하는 방법론이라고 말씀드렸습니다. 프로젝트 관리에 더 수월하지만, 많은 서버가 필요하여 비용이 많이 든다는 단점이 있다고 답변하였습니다.

14) 마지막으로 물어보고 싶은 것 있으면 질문해주세요.

프로젝트를 진행하면서 심각한 이슈가 발생했을 때 해결하는 별도의 노하우가 있는지 여쭤봤습니다. 성심성의껏 질문에 답변해주셨고, 훈훈한 분위기로 면접은 일단 마무리되었습니다.

이 외에도 많은 질문이 있었던 것 같지만, 일단 기억나는 대로 최대한 작성해보았습니다.

6. 탈락 원인 분석

면접 후, 약 일주일 뒤에 탈락했다는 메일을 받았습니다. 아쉬우면서도, 떨어질 만 했다고 생각했었기 때문에 생각보다 멘탈이 많이 흔들리지 않았고 덤덤한 느낌이 더욱 강하게 들었습니다.

면접을 복기하면서 제가 탈락했던 이유를 몇 가지 꼽아보았습니다.

  • 너무 완벽하게 답을 해야 한다는 압박감에 특정 질문에 답변 자체를 하지 못했습니다.

  • 일부 질문에서 기본적인 개념을 설명할 때 혼동해서 잘못 답변하였습니다.

  • 아예 모르는 것도 아니고, 정확하게 알고 있는 것도 아닌, 애매하게 알고 있는 개념이 많았습니다. (선택과 집중에 실패했습니다.)

7. 요약 및 꿀팁 정리

  • 면접 이전에 코딩 테스트를 보셨다면, 해당 문제를 꼭 기억해두셨다가 해당 문제를 더 효율적으로 풀 수 있는 방법이 있는지, 또는 다른 방법이 있는지에 대해 고민을 해보시기 바랍니다. 특히나 본인이 풀었던 알고리즘의 시간복잡도가 O(n^2)이 넘어간다면, 분할정복, DP, 이분탐색과 같은 방법을 통해 시간복잡도를 줄일 수 있는지 꼭 한번 다시 생각해보세요.

  • Job Description을 꼼꼼히 보셔야 합니다. Job Description에서 요구하는 기술 스택이나 경험을 본인의 경험과 어떻게 연결시켜 면접관에게 어필할 수 있을지 끊임없이 고민해야 합니다. 설령 관련 경험이 없더라도, 단순히 "저는 이러이러한 경험은 아직 없습니다."라고 말하기 보다는, "저는 이러이러한 경험은 아직 없지만 이러이러한 경험을 해왔기 때문에 이러이러한 부분에 대해서 잘 해낼 수 있습니다."처럼, 자신의 경험을 통해 단점을 최대한 메꿀 수 있도록 노력해야 합니다.

  • 면접 전 많이 긴장하시는 스타일이라면, 청심환 꼭 챙겨드세요. (바이럴 아닙니다.) 저는 나름 효과를 많이 보았습니다.

8. 글을 마치며..

처음으로 작성한 면접 후기여서 다소 서투른 부분이 있을 수 있지만, 읽어주셔서 감사드립니다. 최선을 다한 도전은 그 자체만으로도 충분히 가치가 있다고 생각합니다. 취준생분들, 이직 준비하시는 분들 모두 좋은 결과가 있기를 바랍니다!

9 comments