6월 초에는 눈여겨보고 있던 회사에 지원을 했다. 감사하게도, 서류가 통과가 돼서 그 경험만으로도 너무 좋았다. 역시 로또도 사봐야 당첨여부를 알 수 있는 것처럼 시도를 해보는 게 중요한 것 같다.
합격된 회사는 독특하게 코딩 테스트와 기술 면접 과정을 한 번에 진행했다. 코딩 테스트를 합격해야만 기술 면접으로 넘어갈 수 있는 케이스가 많아서, 이 부분이 굉장히 좋았다. 코딩 테스트는 프로그래머스로 진행했고, 120분이 2문제를 풀어야 하는 방식이었다. 신입에 비해서는 확실히 낮은 난이도의 문제를 주는 느낌을 받았다. 사실 난이도도 난이도지만 코딩 테스트는 여전히 나에게 어렵고 막막한 부분인데, 4월과 5월에 강의를 들으면서 공부를 하고 특히 테스트 직전에 기존에 풀었던 문제들을 훑으면서 복습을 했던 게 도움이 많이 되었다.
기술 면접은 5일 정도 준비할 수 있는 시간이 주어졌다. 다만, 코딩 테스트 마감 시간 다음날이 기술 면접이었던지라 이 2가지를 같이 준비해야 했던 점이 조금 어려웠는데 2일 정도는 코딩 테스트랑 기술 면접을 같이 준비하고 1일은 코딩 테스트 준비에 올인 후에 테스트를 마감 시간 하루 전에 테스트를 봤다. 그래서 나머지 시간엔 코딩 테스트에는 마음을 내려놓고 기술 면접에 투자하는 식으로 시간을 배분할 수 있었다.
기술 면접 준비는 몸 담았던 게임 프로젝트의 전체적인 구조를 정리하고 경력 기술서에 작성했던 내용들을 훑어보았다. 추가로 지금까지 공부했던 Java, Spring boot, JPA 같은 개념들을 복습하고 기본적인 CS 지식도 살펴봤다. 그런데!! 막상 기술 면접에 들어가니까 내가 준비했던 방식이 조금 잘못되었다는 걸 깨달았다(하지만 깨달았을 땐 이미 면접은 시작했다는 게 함정ㅋㅋㅋㅋ). 기술 면접은 화상 면접으로 1:1로 진행했고 크게 자기소개, 프로젝트 기반 경험 질문, 시스템 설계 문제, 마지막 궁금한 점 물어볼 수 있는 시간으로 구성되어 있었는데 약간 흐름이...
- "~~한 기술을 사용했다고 하셨는데, ~~한 상황에서는 ~~한 문제가 있을 것 같은데 다른 방식을 고려할 수 있을까요?"
- "음, 말씀해 주신 부분도 ~~한 문제가 발생할 수 있을 것 같은데 더 나은 방향이 있을까요?"
와 같이 대답을 하면 문제 사항을 던져주고 꼬리에 꼬리를 묻는 형식으로 진행된다는 점이었다(여기서 완전 말려들어갔다...).
특히, 나는 첫 회사에서 맡았던 첫 프로젝트가 당시 5년 차였고, 팀에 합류했을 당시에 이미 여러 가지 기술적인 상황이 고정되어 있는 부분들이 많았다. 그래서 아쉽게도 요즘에 개발 문화에서 중요 시 하는 부분들을 경험하지 못한 것들이 많은데, 10년 전만 해도 우리 팀의 방식이 나쁘지는 않았겠지만, "Git을 사용하면서 브랜치를 따고, 적절한 브랜치 전략을 사용하면서 PR 날리면서 코드 리뷰하고, 각 환경은 Docker를 이용하면서 쿠버네티스와 AWS로 우아하게 배포"하는 부분을 업무에서 직접적으로 해보지 못했다. 제한된 상황에서도 고정된 부분들을 변화시키기 위해서 이런저런 시도들을 해보긴 했으나...이런 부분을 잘 풀어내서 설명했어야 했는데 그걸 잘 하지 못한 것 같다.
아무튼 그래서
- 브랜치 전략
- 코드 리뷰 방식
이런 걸 물어봤을 때 잘 대답을 못했다.
(물론 우리 팀은 우리 팀 상황에 맞게 나름대로 규칙을 잘 짜서 이런 것들을 수행하기는 했었다. 다만 위에서 작성한 흔히 개발자 문화에서 얘기하는 이상적인 흐름은 아니었기 때문에, 이 부분을 면접관에게 논리적으로 설명하는 부분이 조금 어려웠다. 아마 면접관님도 이해가 잘 안 갔을 것이라는 생각이 든다.)
면접 준비하면서 유튜브에서 이런저런 관련 영상들을 많이 찾아봤었는데, 잠깐 보고 넘겼던 쇼츠 내용이 진짜 면접에 나와서 놀랐다ㅋㅋ
시스템 설계 문제는 솔직히 엄청 재밌게 풀었다(물론 면접관님은 그렇게 생각하지 않았을 것ㅋㅋ 나만 재밌는 상황이었겠죠...?). 그 서비스를 실제로 이용할 때 써봤던 부분이라 어떤 어떤 API를 만들면 될지 뭔가 딱 눈에 들어와서 그걸 언급하면서 "~~ 하면될 것 같습니다!!" 했는데, 면접관님이 그건 API를 나열해 주신 것 같은데, 아키텍처적으로 더 구성해 보라고 하셔서 아예 설계도를 다시 그렸다. 다만 아쉬운 건 면접관님이랑 소통하면서 설계를 했으면 훨씬 더 좋았을 것 같은데, 뭔가 혼자 흥분해서 막 말하면서 설계를 했다는 게 아쉽고(그 과정에서 했던 말을 또 하고 또 하고를 반복했다. 아이고 이 바보야...), 잘못된 부분이 있어서 그 부분에 대해 면접관님이랑 대화하는 과정에서 내가 핵심을 잘 짚어내지 못했다는 점도 안타까운 부분 중 하나다.
결과적으로는, 내가 아쉬운 면접이었다. 방향성에 맞게 더 잘 준비했으면 대답을 잘할 수 있었을 텐데 이직 사유를 조금 부정적으로 말했던 것도 마음에 남고, 기술적인 부분에서 더 나은 해결책을 제시하지 못한 점도 아쉬웠다. 하지만!! 좋은 경험이었다. 경력 이직에서 어떤 식으로 면접관들이 질문을 던지는지 배울 수 있는 시간이었다. 확실히 신입 때와는 다르게, 특정 개념을 묻고 단답식으로 대답할 수 있는 케이스는 거의 없다고 보면 되고 내가 업무 하면서 배우거나 고민하고 적용했던 부분들 위주로 물어본다는 것을 알게 되었다. 그리고 마지막 질문 시간에 뭘 질문할까 미리 고민을 해갔던 것도 도움이 되었다. 덕분에 팀의 현재 상황에 대해서 알 수 있었고, 시간이 조금 남아서 그 시간에는 편안하게 내가 면접 때 잘 대답 못한 부분에 대해서 어떤 걸 공부하면 될지 키워드도 받았다ㅋㅋ알아볼 수 있는 꿀 기회!!! 다음에 또 면접 기회가 오면 그때는 대답 잘해야지...
그리고 개인적으로, 경력 이직을 조금 더 일찍 준비하지 못했던 점이 마음에 남는다. 만약, 이직을 준비하는 주변 사람들이 있다면 꼭 2-3년 차에 준비를 하라고 말하고 싶다. 그리고 신입 개발자라면 꼭!! 개발 문화가 잘 정립된 곳으로 갔으면 좋겠다(물론 이게 쉽지가 않다. 나는 취업 했다는 사실이 일단 너무 좋았고, 적응하기 바빴던 대다가 당시 맡았던 콘텐츠들 개발하는 일이 재밌었기 때문에 그냥 그렇게 다녔던 것 같다. 현실 자각이 든 건 4년 차 접어들 때였고...생각보다 회사 생활을 하면 시간이 너~~~무 빨리 간다ㅜㅜ)
그러면 다시 힘내서 공부해 봅시다!!! 주눅 들어있을 틈이 없다!! 개인 프로젝트 계속하면서, 다시 도전해보자!!