Devlog

파이썬 백엔드 개발자 코테, 면접 후기 (1) (2022.6 ~ 2022.7) 본문

후기 & 리뷰

파이썬 백엔드 개발자 코테, 면접 후기 (1) (2022.6 ~ 2022.7)

recoma 2022. 7. 6. 17:50

이번에 6월 ~ 7월 초에 7군데를 지원했고 이번에 봐야 할 면접들 전부 다 본 기념으로 후기 한번 적어보려고 한다.

일단 네카라쿠베나 중견/대기업은 일체 지원하지 않았고, 스타트 기업 기준으로만 지원했다. 지금 나한텐 대기업이니 네카라머시기니 그런거 따질 상황이 아니다. 당장 밥빌어먹고 살아야 하니까, 돈이 없다고 돈이!

취준 log
지원 - 7
서류 통과 4/7
1군데 다른사람 최종오퍼 수락으로 우선순위 밀려서 탈락
2군데 코딩테스트 요구, 전원 통과. 남은 기업 3군데
면접 탈락 2/3
나머지 1군데 면접 결과 기다리는 중

7군데에서 4군데 서류통과했고 3군데 면접을 봤다. 이정도도 감지덕지 하다고 생각한다. 왜냐하면 이전에는 서류만 하도 광탈해서 면접을 볼 기회가 없었으니까. 이정도면 나름 선방 했다고 생각한다.

이제 면접을 본 3군데 기업에 대한 면접 및 코테 후기를 적어보려고 한다.

A 기업

코테: X
면접: 1시간
결과: 1차 불합격

생긴 지 3~4년 정도 된 신생 기업이라고 한다. 지원 포지션은 DJango 백엔드 개발자.

면접

1차 2차 면접이 따로 있고, 1차는 개발자 면접, 2차는 컬쳐핏 면접(CEO)였다. 내가 지원하고자 하는 포지션의 현직 개발자 1분과 면접을 진행했다. 기술 면접이라고 안하고 개발자 면접이라고 한 이유는, 기술 관련된 질문을 받지 않았기 때문이다.

주로 받은 질문은 내가 진행한 프로젝트에 대한 설명, 갖고 있는 기술 스택, 협업에 관련된 예기다.

특히 협업에 관련된 심도 깊은 질문을 많이 받았다. 예를 들어, 작업 도중에 의견이 갈렸을 때 대처 방법 같은 것들... 결론은 2차가 컬쳐핏 면접임에도 불구하고 1차가 기술 면접 보다는 거의 컬처핏 면접에 가까웠던 것 같다. 

결과는 1차 면접에서 탈락이다. 사유는 내 성향이 기업과 맞지 않아서다.

B 기업

코테: O (알고리즘)
기술 면접: 2시간
결과: 탈락

자격 요건에서 알고리즘 능력을 많이 강조한 회사다. 아마 2/3이 알고리즘 관련이었을 거다. 지원 포지션은 주니어 소프트웨어 엔지니어(DJango)

코딩테스트

알고리즘 4문제, SQL 1문제 총 5문제에 플랫폼은 프로그래머스에서 진행했다. 알고리즘 4문제 중 1문제는 효율성 테스트 문제다. 즉, 최적화를 요구하는 문제다.

알고리즘 3문제를 거의 10분 컷 하고 SQL문제에 들어갔는데, 문제를 잘못 읽는 바람에 40분이나 날려먹었다! SQL문제는 풀었지만, 남은 10분동안 최적화 문제를 전부 풀지 못하고 일부분이라도 제출했다. 5문제에서 4문제 맞은 셈이다.

아쉬웠지만 그래도 통과했으니 다행이다.

면접

기술 면접이고 개발자 두 분과 진행했다. 처음에는 공백기간에 대한 질문을 받았다. 아무래도 내가 졸업 한지 거의 1년이 다되가니, 그동안 뭐했는지 궁금할 만도 하다. 나는 그 공백기간 동안 여러 가지 공부나 자격증(디자인 쪽) 같은 걸 땄다는 명분이 있기에 망설임 없이 얘기할 수 있었다.

하지만 그뿐이다. 본격적으로 기술면접에 들어가면서 탈탈 털렸다. 기본적인 질문 하나 제대로 대답한게 없었고 그 중요하다는 파이썬 pass by assignment를 call by reference따위로 대답했다. 파이썬을 4년 가까이 했으면서 저딴것도 모른다는게 내 자신이 쪽팔릴 정도였다. 내가 아무리 이게 처음으로 기술면접을 본다고 하지만 내가 봐도 이건 아니다.

DJango를 백엔드로 사용하는 기업이었기에 DJango와 관련된 질문이 오갔다. N+1 Problem이나 Lazy Loading 이런것들이 있었다. 그리고 다 틀렸다 ㅋㅋㅋㅋㅋㅋㅋ

라이브 코딩테스트는 의외로 다 풀었다. 저때 내가 문제 풀이 전략이 거듭제곱을 활용해서 해결하는 문제였고, 거듭제곱을 자주 사용하는 데다 상당히 큰 거듭제곱을 사용하는 것을 고려하여 분할 정복을 이용한 거듭제곱 함수를 직접 구현했다.(시간복잡도는 O(logN)) 그런데 면접관 분둘이 의아해 하시는 걸 보니까 의도에는 벗어난 것 같다. 라이브 코딩테스트가 끝나고, 평소에 수학을 잘하거나 좋아하냐는 질문을 받았다. 아마 저거 말고 다른걸 의도했던 것 같다. 물론 나는 개인적으로 수학을 좋아하는 편이다.

라이브 코딩테스트가 끝나고도 계속 진행이 되었었는데, 크롤링 해봤냐는 질문과 DB좀 제대로 다뤄봤냐는 질문이 들어왔다. 아마 많은 데이터를 관리하는게 주 목적이다 보니 그쪽 계열 관련된 질문이 왔던 것 같다.

어찌됐든 간에 2시간 내내 어버버만 거렸고 뭐 하나 대답 제대로 못했으니 이건 붙는게 더 이상할 거다.

결과는 당연히 탈락 이거 쓰는 도중에 탈락 소식을 받았다. 어차피 예상한 결과다.

C 기업

코테: O (알고리즘, API 구현)
면접: 4시간
1. 본사 면접(영어 면접): 1시간
2. 국내 면접: 3시간
결과: 불합격

내가 지원한 7개 기업 중에서 1순위이다. 다른곳은 몰라도 여기 붙으면 무조건 가려고 했다. 포지션은 소프트웨어 엔지니어 인턴 (인턴인데 면접을 4시간??) 그리고 위의 기업들 중에 면접 프로세스가 가장 빡셌던 기업이었다. 그리고 특이하게 본사가 따로 있는 기업이었다.(미국 실리콘벨리(?) 였나 머르겠다 ㅋ)

코딩테스트

플랫폼은 Codebyte 대부분 코딩테스트라고 하면 알고리즘/SQL 테스트 아니면 기업 과제를 내주는 데, 여기는 둘 다 줬다! 단, 기업 과제일 경우 백엔드 서버를 만드는 것이 아닌 그냥 파이썬 모듈을 개발하는 것이였다. 알고리즘 3문제는 그렇게 어려운 문제는 아니었는데, 마지막 문제가 난이도가 높았다. 트라이 자료구조를 활용한 문제였는데 그나마 트라이 개념을 알고있었으니 망정이지 몰랐으면 꽤 해맸을 거다.

파이썬 모듈을 개발하는 과제인 경우, 내가 할 수 있는 데 까지 다 때려박았다. DB를 사용하거나 로그인 기능을 요구하고 있었기 때문에 JWT를 도입했고, 테스트코드를 최대한 오류 하나하나 놓치지 않을 정도로 최대한 많이 써재꼈으며, 디자인 패턴, OOP 특성을 활용해 특정 RDB가 아닌 다른 형태의 RDB(MySQL, SQLite 등...)을 특정 코드 수정 없이 .env파일만으로 세팅할 수 있는 수준으로 코딩을 했다. 그리고 밑에 면접 란에 또 설명하겠지만 이 과제 코드들은 후에 면접관한테 좋은 평가를 받았다.

면접

B 기업 기술면접에서 가루가 될 때 까지 털린 이후로 진짜 각잡고 면접준비 했다. 운영체제, 데이터베이스, 네트워크 등 구글링해서 면접 리스트를 죄다 뽑아온 다음 3회독하고 면접을 봤다. 특히 데이터베이스쪽은 내가 가장 약한 분야라 5회독까지 돌렸다. 그리고 내 눈앞에 보인건 4시간 짜리 면접이었다. 

1교시 본사 면접(영어 면접 + 라이브 코테)

ㅁㅊㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

미국 본사에서의 화상 면접이었기에 미국 시간대에 맞춰야 했고, 결국 오전 7시 30분에 면접을 시작했다. 외국인 개발자 분께서 기업에서 하고있는 일들에 대해서 설명을 하셨다. 당연히 영어로 설명했는데, 영어 공부를 안한지 수십년이라 걱정했지만 다행이 일부는 들렸다 기계가 돌아가는 알고리즘이 어떻게 돌아가는 지에 대한 설명이 대부분이었던거 같다.

영어 면접이었다지만, 그렇다고 질문을 아예 안한게 아니다. 준비했던 질문들 영어로 직역해서 질문을 드렸고 친절하게 대답해주셨다.

그 다음에 본격적으로 라이브 코딩테스트에 들어갔다. 문제 해결이라고 하기 보다는 어느 자료구조를 특정 자료구조로 컨버팅 하는 문제였다. 겉으로는 쉬워 보이지만 문제는 자료구조 안에 또 다른 자료구조도 확인해야 했기에 recursive한 문재 해결 전략이 필요했고 나는 저기서 메인 함수 안에 재귀용 함수를 또 만들어서 재귀 형태로 문제를 풀었다. 그래서 어떻게는 풀었지만 그 역방향으 풀지 못했다. 그래도 재귀함수를 사용한 풀이는 잘했다고 칭찬해 주셨는데, 그게 진심인지 아니면 일종의 에티켓인지 나는 잘 모르겠다.

2교시 국내 면접 (이력서 관련 + 라이브 코테)

이번에는 국내에서의 화상 면접이다.  1대1 면접이었는데, 어느 직책의 개발자분인지 까먹었다. 스타일은 A 기업 + 라이브코테 정도 되겠다.

내 이력서에 2년전 ICT 학점연계 인턴십 관련 내용을 보고 우리 기업도 여기에 지원했었는데 기억나냐고 질문을 받았다. 글쎄, 2년전 당시 나는 망해가는 졸업작품을 보면서 멘탈이 박살났던 시절이라 아무것도 기억 안난다, 저때 내 스펙은 거의 밑바닥이라 자격요건이 만만한 곳만 골랐던 걸로 기억한다. 여튼 내 기억에는 없었음 ㅋㅋ

여튼 이력서 관련해서 여러가지 얘기를 나누고 간단한 DB관련 기술질문을 받은 다음 라이브 코테에 들어갔다. DB관련 질문은 DELETE, DROP의 차이점이었다. 다행이 전날에 공부한 덕에 100%까지는 아니어도 어느정도 대답할 수 있었다. 하지만 깊이있게는 대답 못했다.

라이브 코테는 개털렸다. 두 문제가 나갔었다. 첫번째 문재는 확률론과 관련된 테스트로 처음엔 삐끗했지만 무사히 풀었다 그러나 두번째가 문제였는데, 일단 O(N)정도로 알고리즘을 풀었는데 더 최적화 할 수 있는 방법을 찾아보라고 했다. 그러면 O(logN)아니면 O(1)로 분할정복, 해시맵 사용 둘중 하나다, 아무리 봐도 분할정복은 이 문제에 안맞는 것 같아서 해시맵을 사용하는 방향으로 전략을 잡다가 결국 못풀었는데, 사실 분할정복으로 해결할 수 있는 문제란다. 아니, 오또케 그게 가능하죠? 문제는 기억이 나기에 나중에 고민을 해봐야 할 거 같다.

3교시 국내 면접 (이전 코딩테스트 관련 + 라이브 코테)

2교시 면접과는 다르게 주니어 개발자 분이 면접을 맡으셨다.

코딩테스트때 파이썬 모듈로 구현하는 과제에 대해서 어떻게 코딩했는지 설명을 하는 거였는데, JWT활용과, 데코레이터 함수를 활용했다는 점, 그리고 테스트코드에 대해서 설명을 했고, 위에 서술했다시피 지적 하나 없이 상당히 좋은 평가를 받았다.

그리고 또 또 라이브 코테에서 또 털렸다. 괄호 관련 문제였는데 특정 단어가 추가된 문제였다. 처음에 고민 하다가 DFS로 푸는 전략을 세웠는데 문제는 뇌정지가 왔다. 진짜 아무것도 생각못하고 어버버 거리다 시간 다가고 끝났다.

4교시 국내 면접 (프로젝트 관련 + 협업 관련 + 기술 면접 + 라이브 코테)

마지막엔 리더급 개발자 분이 면접을 맡으셨다. 

1시간이라는 짧은 시간 동안 상당히 많은 얘기가 오갔는데, 일단 첫 번 째 내가 진행했던 프로젝트 관련해서 질문을 받았다. 프로젝트에 대한 설명과, 어떤 프레임워크로 구현했는지 또 어떻게 돌아가는지에 대해 질문을 받았는데, 당시 구현 뿐만 아니라 도커 이미지 배포, 위키까지 만들어놨기 때문에 전부 잘 대답할 수 있었다.

협업 관련해서는, 팀 간의 의견 불일치 에 대한 대처나, 모르는 것에는 어떻게 대처하는 지에 대한 질문이 들어갔다.

기술 면접은 2문제가 나갔었는데 첫번 째는 DB 인덱스 관련, B 기업 면접때 저걸로 한번 데였기 때문에 인덱스 분야는 빡세게 공부했었다. 그렇기에 인덱스 관련해서는 거침없이 대답할 수 있었다. 두번 째는 OS관련, 스레드와 프로세스 차이인데 이건 뭐 난 OS 분야는 어느정도 알고 있었기 때문에 어느정도 대답할 수 있었다.

그리고 또 또 또 라이브 코테에서 또 또 털렸다. 이제 뭘 했는지 기억도 안난다. 이것도 최적화 문제로 못풀었는데 그냥 시간 안에 코딩 못할 것 같아서 내가 어느 전략으로 문제를 푸려고 했는지 그거 설명만 하고 끝냈다. 내가 코테를 준비 안한것도 아니고 그동한 준비한게 몇겐대 라이브 코테 하나 통과를 못하니 통곡할 지경이다.

분석

이렇게 면접을 3군데 보면서 깨달은 점은 다음과 같다.

코딩테스트와 라이브 코딩테스트는 다르다

라이브 코딩테스트 난이도가 생각보다 높아서 놀랐다. 3 ~ 40분 안에 1~2문제를 풀어야 하는데 만만치가 않다. 일부로 고통주려고 그런건 아닌 것 같고, 내 생각에는 난이도 높은 문제를 주고 어느 방향으로 풀어나가는 지를 보는 목적으로 라이브 코딩테스트를 운영하는 것 같았다.

그렇기 때문에 코딩테스트와 라이브 코딩테스트는 목적이 다르다고 볼 수 있다. 기존의 온라인 코딩 테스트가 가 단순히 문재 해결력을 보는 것이었다면, 라이브 코딩테스트는 그 과정을 평가하니까.

이런 스타일의 문제들은 Leetcode에 많이 있는 걸로 기억한다. 나도 한동안 릿코드 하다가 중간에 멈췄는데 다시 문제 풀어봐야 겠다.

면접

기술 면접에서 데이터베이스, 운영체제, 네트워크 관련 질문이 들어오는 것은 당연한거고, 문제는 자신의 포트폴리오의 기술 스택과 자격 요건에 해당하는 심화 기술 면접이 들어갈 수 있다는 점이다. B 기업 면접에서는 내 프로젝트의 Docker관련 내용을 보고 데브옵스 좀 해봤냐면서 서비스 접근 권한(포트, 및 IP제한 걸기)에 대해 질문이 들어왔고, 심지어 퍼블릭/프라이빗 서브넷 마스크가 뭐냐는 질문까지 들어왔다. 서비스 권한인 경우 AWS의 Inbound Outbound관련 설명을 했지만 서브넷 마스크는 나도 모르는 내용이다. 그렇기 때문에 자격요건과 관련된 기술들을 세세하게 공부하거나, 자신이 만든 포트폴리오를 제대로 설명할 수 있어야 하고, 또 이 포트폴리오에 사용되는 기술 스택에 대해서 공부를 다시 해야 할 필요가 있다.

그리고 자격 요건에 들어가 있지 않아도 기업의 성향에 따라 특정 기술 면접이 들어갈 수 있는데 B 기업에서는 주로 특정 데이터들을 다루는 작업을 많이 하는 편이었다. 그렇기 때문에 DB관련 질문이 들어오는 것은 물론 크롤링 관련 질문까지 들어왔다. 솔직히 크롤링 질문 들어올 거라곤 생각도 못했다.

기술 면접 외의 다른 면접(또는 컬쳐핏)인 경우 대부분의 기업들이 협업 관련해서 질문을 한다. "서로간에 의견이 충돌할 때 어떻게 해결했냐"의 질문을 A B C 세군데에서 전부 받았다. 기업 프로젝트에 있어서 협업은 상당히 중요하기 때문에 컬쳐핏 면접을 본다고 하면 협업 관련 질문은 사실 상 100% 들어온다고 보면 된다.

이렇게 해서 이번달에 봐야 할 면접은 전부 다 봤다. 이제 나머지 한 군데 면접 결과만 기다리면 된다.

떨어져도 상관없다. 나는 지금까지 면접 경험이 없기에 면접 까지 보는 게 내 목표였는데, 생각보다 서류통과나 면접제안이 많이 들어와서 다양한 면접을 경험할 수 있었다. 그렇기에 다 떨어져도 난 개의치 않을 것이다.

다음 취업 준비는 8월 중순에 하려고 한다. 지금 진행하고 있는 개인 프로젝트가 있어서 그거 마치고 난 다음에 이력서를 업데이트 해서 기업에 지원할 예정이다.

추가: 2022-07-11

다 떨어졌다. 다음 취업 준비는 지금 진행하고 있는 프로젝트가 끝나는 8월 중순 즈음에 다시 진행할 예정이다.

반응형