올해 첫 기술 면접 회고!!!

재혁·2024년 6월 13일

면접 회고

목록 보기
1/7
post-thumbnail

6월 초에 한 가지 메일이 왔습니다. 한 회사에서 제 깃허브와 블로그를 보고 포지션 제안을 주셨습니다. 처음에는 무슨 일인가 싶기도 했고, 이렇게 연락이 올 수도 있구나 싶어서 매우 신기한 경험이었습니다. 현재 저는 창업에 관심이 많아 '멍매니저(반려견 유치원 일정관리 서비스)'와 '덕픽(팬덤 공유 서비스)'의 MVP 1차를 어느 정도 마무리한 뒤, 운영 단계에서 천천히 하나씩 기업에 문을 두드리려고 했습니다. 그런 와중에 이렇게 제안을 받게 되었습니다.

물론 너무 갑작스러운 제안이라 면접이나 기타 준비에 대해서는 전혀 준비를 하지 못했습니다. 일주일 정도 남은 시간 동안 다시 CS를 처음부터 준비하는 것은 어려웠고, 기존에 알고 있던 지식들을 정리하는 방식으로 준비했습니다. 오늘은 그 과정에서 느꼈던 생각과 앞으로의 부족한 점, 나아가야 할 방향 등을 정리해보려고 합니다.

일단 제안을 받았을 때 너무 놀랐던 점은 면접이 2시간 동안 진행된다는 것이었습니다. 제 깃허브와 블로그를 통해 역량을 검증해 주시고 좋게 봐주신 것에 대해 실무진들께 감사의 말씀을 전하고 싶습니다. 특히 실무진들이 3명으로 구성되어 있었고, 어느 정도 연차가 많으신 분들이 이렇게 리소스를 할애하여 부족한 저의 말을 경청해주신다는 것 또한 매우 감사하게 생각합니다.

금일 면접을 보았고, 기억나는 대로 질문들을 작성해보려고 합니다.

파이썬 질문

  • 파이썬 가비지 컬렉터, GIL, 순환참조, 참조 카운팅 개념
  • 파이썬 정렬함수는 어떤 알고리즘을 쓰는지?
  • 파이썬 pip/poetry와 같이 의존성 관리를 어떻게 하는지?
  • 대용량 데이터 처리를 어떻게 하면 좋을지?

자료구조/알고리즘

  • 정렬 알고리즘, 그래프 알고리즘, 트리 알고리즘 종류?
  • 재귀 함수라는 것은? 자료구조/알고리즘에서 재귀의 의미
  • 트리 알고리즘이 어떻게 동작하는지?

데이터베이스

  • 트랜잭션 낙관적 락과 비관적 락에 대한 차이
  • DB를 최적화하는 방법
  • Join과 Index 성능 문제 / 어떻게 하면 Join/Index에 대해 적절하게 사용할 수 있고 성능을 최적화할 수 있는지?
  • 트랜잭션 격리 수준이 뭔지? 격리 수준을 내리거나 높일 떄 얻을 수 있는 것과 잃을 수 있는 것
  • 인덱스를 언제 적용하면 되는지?
  • DB 데드락을 어떻게 해결하면 좋을지?
  • Row Query를 사용할 줄 아는지?

네트워크

  • OSI 7계층에 대해 설명 / TCP/IP 4계층 설명

운영체제

  • 프로세스, 스레드 차이
  • 멀티프로세스, 멀티 스레드를 어디에 적용하면 좋을지?
  • 멀티프로세스, 멀티 스레드의 차이
  • 동시성과 병렬성이 어떤 것인지?
  • 멀티 프로세싱과 멀티스레딩, 비동기 차이 / 어떻게 동작하는지?
  • 비동기에 대한 이해 -> 아는 것 전부 설명

아키텍처

  • MSA와 Monolithic Service에 대한 차이 설명

프로젝트 / 직장 업무

  • AWS 그라비톤이 무엇인지? (CPU) -> Docker Image설명 유도
  • 재귀쿼리 최적화 -> 어떻게 해결했는지?
  • Nginx와 Gunicorn을 왜 사용했는지?
  • Nginx대신 Gunicorn을 쓰면 되지않는지?
  • asgi와 wsgi의 차이
  • 캐싱전략 (구현 문제)
  • Docker 이미지를 언제 쓰는지? (상황을 설명)
  • Jenkins와 Github Actions의 차이
  • Redis에 대한 설명
  • FastAPI를 사용해봤는지?
  • 전 회사의 인프라를 어떻게 설계했는지? 어떻게 구성했는지? (예를 들어 VPC, Subnet 등)
  • Django에 왜 Layered 아키텍처를 적용했는지?
  • 무중단 배포를 해봤는지? 어떻게 구성을 했는지?
  • JWT와 세션/쿠키에 대한 설명 및 차이점 및 장단점

인성질문

  • 왜 백엔드를 선택했는지?
  • 왜 소통을 중시하는 개발자인지?
  • 개발자를 선택한 이유?
  • 장애 대응 경험이 있는지?
  • 회사 다닐동안 어떻게 공부했는지?
  • 학습방식이 어떻게 되는지?

피드백

파트장님: "전반적으로 알고리즘/자료구조, CS에 대한 답변이 많이 아쉽다. "
팀원1님: "파트장님과 동일한 생각 / 사람을 뽑을 때 90%에 대한 구현 문제는 어느정도 해결이 되지만 나머지 10%가 사람을 뽑을지 말지를 결정한다. 그것이 바로 CS/알고리즘이 될 것이다."
팀원2님: "파트장님과 동일한 생각, 회사를 나오고 공백에 대한 이유를 자세하게 설명해주면 좋을 것 같다."

결론

이렇게 정리할 수 있습니다. 평소에 프로젝트에만 집중을 많이 했고, CS나 알고리즘/자료구조는 프로젝트 필요할 때만 찾아보고 적용했는데, 그 점이 화근이 되지 않았나 싶습니다. 조금 더 기초를 잘 준비했어야 했는데, 많이 아쉬웠습니다. 결과는 피드백에서 아쉽다는 말이 많아서 불합격이지 않을까 생각이 듭니다.

그래도 이번에 작년 첫 개발자로 지원했을 때보다 많이 성장했다고 느꼈습니다. 그때는 많이 떨고 대답도 잘못하고 아이컨택도 못했지만, 이번에는 말할 때의 톤이나 아이컨택 등에서 나아진 점이 있었습니다. 질문에 대해 이해를 잘 못했긴 하지만, 경청하려고 최대한 노력했습니다. 나도 이렇게 성장을 해나가는구나라고 느꼈습니다.

이번 면접은 지금까지 봤던 면접 중에서 가장 많이 얻어가는 면접이었던 것 같습니다. 특히 좋았던 점은 면접할 때 분위기를 풀어주시는 면접관님들 덕분에 편안함을 많이 느꼈다는 것입니다. 가장 인상적이었던 것은, 보통 면접에서는 질문에 대한 답변이 맞는지 틀린지를 모를 때가 많은데, 면접관님들이 바로 캐치하고 교정을 해주셨습니다. 이런 분들과 함께 일하면 정말 행복하고 즐겁게 일할 수 있을 것 같았습니다. 교정을 해주실 때도 어렵지 않게 설명해주셔서 바로 이해할 수 있었고, 이번에 멍매니저와 덕픽 프로젝트에서도 배운 것과 관련된 문제가 있을 때 주셨던 답안으로 해결할 수 있을 것 같다는 생각도 들었습니다.

또한, 공부 방식에 대해서도 크게 느낀 바가 있었습니다. 지금까지 제 공부법은 탑다운 방식이었습니다. 새로운 기술이 있을 때 일단 구현을 먼저 해보고 깊게 파고드는 식의 공부법이었습니다. 물론 공부법에는 정답이 없고 개인마다 다르겠지만 면접관 한 분께서 다운탑 방식을 선호하셨고, 그 이유를 설명해주셨습니다. 그 방식으로 공부하지 않으면 자신이 하고 있는 것이 정석인지 모를 때가 많고, 돌아갈 수 있다는 말이 인상적이었습니다. 또한 개발자는 사수 없이도 스스로 올바른 방향으로 가고 있는지 인지하고 있어야 한다는 조언도 받았습니다. 이런 조언을 받은 것만으로도 정말 값진 하루였다고 생각합니다.

이제 면접 관련 질문들은 하나씩 구체적으로 블로그에 작성하면서 깊게 파고들어보려고 합니다. 조금이라도 더 배우고 싶다는 생각이 들 때, 더 추진력을 얻고 달려야겠다는 생각이 듭니다.

그리고 이번 제안을 받을 수 있었던 것은 제가 깃허브 활동을 정말 활발하게 했기 때문이라고 생각합니다. 지금은 잠시 면접 준비로 인하여 기여를 잠깐 뒤로 미뤄두었지만, 앞으로도 Django와 그와 관련된 오픈소스에 지속적으로 기여해야겠다는 생각이 들었습니다. 더 좋은 개발자, 가치 있는 개발자가 되기 위해 나 자신에게 파이팅을 보냅니다.

profile
저는 기술적 호기심은 좋지만 좋은 제품을 만드는 것을 우선시하는 개발자입니다.

0개의 댓글