07월 18일 어제, 면접을 다녀왔다.
어제 바로 글을 쓰면 좋았겠지만.. 싱싱미역 상태라서 글을 쓸 수가 없었다.
그래서 오늘이라도 글을 남겨보려고 한다.
채용 절차
사전 과제 -> 면접 진행
3년차의 공고였고, 나는 신입이지만 자격요건에 어느 정도 부합해서 지원하게 되었다.
그리고 감사하게도 사전 과제의 기회를 주셔 열심히 진행하게 되었다.
사전 과제
사전 과제는 그리 어렵지 않은, iOS 개발자라면 가장 일반적으로 구현하게 되는 미션이었다.
짧은 기간이지만, 나의 모든 역량을 보여주기 위해 노력했다.
아키텍처로는 MVVM-C와 Clean Architecture를 사용했다. 이외에도 코드는 일관성있게, 깔끔하게 정리했고, 이해하기 쉽게 주석을 열심히 달아주었다.
모든 구현을 마치고 리드미에 사용한 기술과 각 객체의 책임과 역할, 겪었던 트러블 슈팅, 아쉬웠던 점 등을 정리하여 마무리 했다.
4일동안 영혼을 갈아넣었고, 이런 부분을 좋게 봐주셨는지.. 면접의 기회가 주어졌다.
면접 준비
면접까지 1주일의 시간이 있었고, 모든 것을 면접 준비에 바쳤다.
회사 정보 파악하기
먼저 회사의 정보에 대해서 정확하게 파악하기 위해 회사의 홈페이지 내용에서 필요한 내용들을 글로 옮겨 적었다.
이유는 회사가 어떤 인재상을 갖고 있는 것인지 파악하고, 이에 맞는 사람이 되기 위해 준비하는 것이었다.
짜친다고 해도 어쩔 수 없다. 나의 성격과 정확하게 일치하는 회사를 찾는 사람은 매우 드물것이다. 내가 회사에 맞춰줄 수 있는 사람이라는 것을 보여줘야 한다.
면접에서 나오는 전형적인 인성 질문, 컬쳐핏을 위한 질문들에 대해 예상 답변을 준비했다.
모든 답변은 회사의 인재상에 부합하며, 일관적으로 준비했다.
여기서 일관적이라는 것은 질문 1에서 "나는 이런 사람이야" 라는 것을 보여줬다가, 질문 2에서 "나는 저런 사람이야" 라는 것을 하지 말아야 한다는 것이다. 면접관은 내가 생각했던 것보다 더욱 예리하기 때문에 철저하게 답변을 준비해야 한다.
면접 후기 찾아보기
잡플래닛을 이용하여 회사의 면접 후기에 대해서 찾아보았다. 근데 이건 너무 맹신하는 것은 좋지 않은 듯..?
후기를 찾아봤을 때, 대부분 기초적인 지식을 물어보는 질문을 한다고 작성되어 있었다.
그래서 Swift, CS 기본적인 질문들에 대해 열심히 준비했다.
(막상 면접에서는 내가 예상했던 질문들은 2개 나왔나..?)
여기서 느낀 점은 기술 면접에서 나오는 질문들은 굉장히 광범위하기 때문에 모든 질문들에 대해 내가 받고 싶은 질문을 받을 수 있도록 여지를 남겨야 한다는 것이다. 나는 예상 질문 리스트를 만들었고, 그에 대한 답변은 꼬리 질문으로 내가 받고 싶은 질문을 받을 수 있게 준비했다.
예를 들어, "해시에 대해서 설명해주세요" 라는 질문이라면?
해시에 대해서 간단하게 설명하고, 마지막에 "해시의 충돌 회피 방법으로는 체이닝과 오픈 어드레싱 방법이 있습니다." 정도로 끝내면 "회피 충돌 방법에 대해 자세하게 말씀해주세요" 라는 질문이 나올 수 있겠져?
또 충돌 회피 방법에 대해서 설명하고, 마지막에 "Swift에서 관련된 개념으로는 Hashable, Set, Dictionary가 있습니다" 로
또 다른 꼬리 질문을 받을 수 있도록 하는 것입니다.
이렇게 질문을 유도하면서 + "CS부터 현재 내가 사용하고 있는 스택에서 어떻게 활용되고 있는지" + "왜 그렇게 사용하고 있는지" 까지 답변할 수 있다면, 깊이 있는 녀석처럼 보일 수 있겠다고 생각했다.
하지만 생각처럼 면접은 흘러가지 않습니다. ㅋㅋㅋㅋ
(저는 사전 과제 제출할 때, 깃허브 리드미에 내가 유도할 수 있도록 글 열심히 작성해놨는데 안보신듯..)
근데 지금까지 들어왔던 선배들의 말이 다 맞다는 것을 느낀게, 이력서에 자기가 깊이 있게 얘기할 수 있는 내용들이나 받고 싶은 질문들을 작성해야 한다는 것이다.. 이미 이력서 수정이 어렵다면, 현재 이력서에 나와있는 기술 스택은 깊이 있게 공부해봅시다.
약간 중구난방이 되었지만 정리해보면,
1. 면접 질문의 범위는 넓음 따라서 내가 받고 싶은 질문들로 유도하셈
2. 근데 이것도 예상처럼 흘러가지 않으니까, 이력서를 통해 유도하면 더 좋음 or 이력서에 나와있는 기술 스택에 대해 깊이 있게 공부하셈.
면접 실전
면접에 들어가기 전, 회사 건물 내에서 속으로 계속 다짐했다.
"나는 할 수 있다.", "별거 아니자나", "다 똑같은 사람들이야", "내가 다 이김", "긴장하지마"
여러 가지 말로 나를 진정시켰지만, 면접장 들어가서 물 마시려는데 손이 벌벌 떨렸다.
이건 나도 못하기 때문에 팁이 따로 없긴한데, 하루종일 말하는 연습하고 가니까 준비했던 답변은 잘하게 됩니다.
다만, 예상치 못한 질문 나오면 어버버 거렸지만여.
실전에서는 여러 가지 질문이 나왔다.
1. 이력서 중심의 내용
2. 자기소개서에서의 내용
3. 사전 과제에서 사용한 기술 스택에 대한 지식들 (거의 기술 면접의 주를 이룸)
4. 내가 쓴 기술 블로그의 내용
5. 회사와 맞는 인간인지 Fit 관련 질문
인성 면접이야.. 정답이 없기도 하고, 위에서 얘기했듯이 회사의 인재상에 최대한 부합하도록 얘기를 하면 좋을 것 같다.
기술 면접은 주로 "왜?" 에 대한 질문이 많았다.
예를 들어, 사전 과제에서 클린 아키텍처의 리포지토리에서 데이터의 가공 역할을 담당하도록 구현했는데, 이 이유가 무엇인지? 라는 질문을 받았었다.
이렇게 왜? 에 대한 질문은 개발자가 어떤 생각을 가지고 있는지 알 수 있는 것에 더해서, 깊이 있는 지식을 갖고 있는지 판단할 수 있는 것 같다.
예를 들어 클린 아키텍처를 사용할 때, 항상 유스케이스는 리포지토리의 메서드를 호출하는 역할만 수행했었다. 유스케이스가 사용자의 시나리오, 비즈니스 로직의 담당이라는 것은 알겠는데, 그럼 비즈니스 로직이라는게 정확히 뭘 수행해야 되는건데? 부터 유스케이스의 필요성에 대해 의문이 참 많았다. 궁극적으로 유스케이스의 역할도 없으니 그냥 없애면 안될까? 개발 생산성에 비효율적인 부분만 가져오는데? 라는 생각을 가지고 있었다.
이는 클린 아키텍처에 대해서 잘몰랐기 때문에 들었던 생각이었다.
클린 아키텍처를 깊이 있게 알며, 필요에 의해 사용한 사람이라면 이에 대한 자신의 생각을 잘 전달할 수 있을 것이다.
개인적인 생각으로, 많은 iOS 취준생은 클린 아키텍처가 무엇인지 잘 모를것 같다.
그냥 기업에서 자주 사용하는 기술이니까.. 자격 요건 맞추기 위해 클린 아키텍처를 사용해야 겠다 하고 쓰는 사람이 많을 것이라 추정한다. 이것이 잘못되었다고 생각하진 않는다. 당연히 취업을 위해서는 뭐든 해야 하기 때문이다. 하지만 실제 기업에서는 휘황찬란한 기술 스택보다는 깊이있는 지식을 더 원하는 것 같고, 면접에서 유리하게 작용하기 위해서는 잘 알고 사용해야 한다.
클린 아키텍처는 꽤나 큰 규모의 프로젝트에서 사용해야 그 효과가 빛나는 아키텍처인 것 같은데, 취준생은 대부분 소규모의 프로젝트에서 클린 아키텍처를 활용한다.
물론 계층별로 나눔으로써 단일 책임을 통해 유지보수성이 향상되는 이점은 확실히 있다. 하지만 소규모의 프로젝트에서 API를 통해 간단하게 던지고 받는 비교적 간단한 작업을 수행하는데, 왜 리포지토리가 필요하고, 유스케이스가 필요하겠는가? 각 객체의 명확한 책임 기준을 내세우는 것이 어려울만 하다. (꼭 클린 아키텍처가 아니더라도 달성할 수 있음)
암튼 하고 싶은 얘기는 리포지토리가 어떤 책임을 가져야 하는지?, 유스케이스는 어떤 책임을 가져야 하는지? 또 그 이유는 무엇인지? 등 왜? 에 대해서 좀 명확한 자신의 의사를 밝힐 수 있도록 생각하며 개발하면 좋을 것 같다.
그리고 이를 달성하기 위해서는 해당 기술에 대한 꽤나 깊이 있는 지식이 필요하다. 브루트포스처럼 사용하지 말자...
앵무새 같지만, 좋은 개발자가 되기 위해서라도 코드를 작성할 때, 항상 왜? 에 대해 생각해보는 것이 중요하다. 기계적으로 코드 작성할거면, 지피티를 쓰지 누가 개발자 고용을 하겠는가? 앞으로의 AI 시대에서 경쟁력을 갖추기 위해서라도, 고민해보자.
조언
1. 다양한 기술 스택도 좋지만, 사용하는 이유와 깊이 있는 지식이 더 중요하다.
2. 자신이 이력서에 작성해둔 기술 스택에 대해 모두 잘 설명할 수 있는지? 돌아보셈
3. 코드에 옳고 그름의 영역이 두루뭉실하다. 그니까 자기 생각을 무조건 당당하게 말하셈 (굉장히 중요)
면접은 자신이 어느 부분이 부족한지를 깨닫게 해주는 좋은 경험이라고 생각한다.
나는 면접을 하고 나서, 어떤 부분이 부족한지 알게 되었고, 앞으로의 목표까지 수립할 수 있게 되었다.
면접 기회가 온다면 무조건 가자. 그리고 면접 준비를 열심히 하자.
마치며
실제로 면접관님들은 모르거나, 틀린 답변에 대해서 무엇에 대한 이야기인지, 어떤 부분에 대해서 학습하면 좋을지까지 알려주셨다. 너무 좋은 분들이라고 생각했고, 그 회사를 못간게 아쉬웠다.
하지만 후회는 없다. 겁나 열심히 준비했고, 면접을 통해 많이 배울 수 있었다.
이 글을 읽는 그대들은 조금이라도 도움이 되면 좋을 것 같다.
'개린이 이야기' 카테고리의 다른 글
Concurrency에 관하여 (0) | 2024.07.28 |
---|---|
캐시정책에 관하여 (0) | 2024.01.24 |
Downsampling(다운샘플링)에 관하여 (0) | 2024.01.20 |
이미지 캐싱에 관하여 (0) | 2024.01.18 |
MVVM(Model-View-ViewModel)에 관하여 (0) | 2023.07.12 |