개발자 채용

내가 개발자를 채용해야 할 때 중요하게 생각하는 원칙과 면접 방법들을 정리해본다.

우선 내가 생각하는 채용의 대원칙을 한 마디로 정리하면, 장점이 뚜렷한 사람이다. 현재의 팀에 부족한 장점을 갖고 있으면 더더욱 좋고, 장점이 많으면 더 좋다. 하지만 약한 장점이 여러 개인 사람보다는 하나의 장점이 확실한 사람을 더 선호한다. 단점은 전혀 고려하지 않는다. 정말로 단점은 고려하지 않는다. 아, 물론 흉악 범죄를 저지를 것 같은 사람이라거나 그러면 안되겠지만, 그런 사람은 한 번도 면접에서 본 적이 없기 때문에 별로 생각할 필요 없다.

단점을 고려하지 않는 이유는 고려할 필요가 없기 때문이다. 팀의 성과는 개개인의 장점이 모여서 나오는 것이다. 개개인의 단점은 팀이 보완하면 된다. 세 명 이상 모인 팀에서 개개인의 단점을 보완 못할 상황은 거의 발생하지 않는다. 만약 팀을 이끄는 팀장이 명확하게 있는 상황이라면 개개인의 단점을 보완하는 것은 팀장의 책임이다. 나는 내가 팀장이면 다른 사람의 단점이 뭐든 보완할 자신이 있기 때문에 자신 있게 장점이 뛰어난 사람을 뽑는다. 나는 운이 좋아서 늘 좋은 팀원만 만나왔다고 생각할 수도 있겠지만, 난 충분히 일반화해도 좋을 만큼 대부분의 단점이 별 것 아니라고 생각한다.

물론 나 역시 단점이 아주 뚜렷하고 단점의 종류도 여러 가지다. 하지만 나 자신에게도 같은 기준이 적용된다. 난 내 단점을 극복하기 위한 노력은 전혀 하지 않는다. 내 노력은 내 장점을 강화하는데 집중된다. 단점에 관해 내가 하는 노력은 단 두 가지. 늘 내 단점을 보완해줄 수 있는 사람이 있는 팀에서 일하려고 하는 것. 그리고 내 단점을 커버할 수 있는 시스템을 만드려고 노력하는 것. 나 뿐 아니라 난 내 팀원들이 다 장점을 강화하기 위한 노력을 더 많이 했으면 좋겠다.

 

장점이 뚜렷한 사람을 뽑는 것이 목표라면 채용 과정은 장점을 발견하는 과정이다. 장점의 발견은 서류 전형에서부터 시작되지만, 아직 서류에서 걸러야 할 정도로 지원자가 많은 상황은 별로 겪어본 적이 없어서 눈에 띄는 점 하나만 있으면 대부분 서류 전형은 합격이었다. 정말 중요한 건 면접에서 장점을 발견하는 방법이다.

원래 이 문서는 면접에서 물어보기 좋은 질문들을 정리하기 위한 용도로 시작했다. 하지만, 여러 번 채용 면접을 하다보니 사전에 정해진 질문은 의미가 없었다. 중요한 건 그 질문에 대한 답을 듣고 두번째, 세번째 깊이 파고드는 질문을 하는 것이다. 간혹 보면 유용한 면접 질문으로 널리 퍼져 있는 질문을 기계적으로 하는 경우를 본다. 이를테면 이런 것들이다.

질문 자체는 나쁘지 않다. 첫번째 질문도 "자기 계발을 열심히 하시나요?" 같은 질문에 비하면 좀더 구체적인 답을 이끌어내기 좋은 질문이다. 하지만, 이 질문의 한계는 닫힌 질문이라는 것이다. 닫힌 질문은 뭐고 그럼 열린 질문은 뭔가? 닫힌 질문은 알고 싶은 정보가 정해져 있는 상태에서 던지는 질문이다. 첫번째 질문은 이 개발자가 공부를 열심히 하는 사람인지 아닌지 알기 위해서 던진 질문이다. 하지만 이 질문으로 정말 이 개발자가 공부를 열심히 하는지 아닌지 알 수 있을까? 공부를 하는 방식은 여러 가지가 있다. 책은 이미 낡았다고 생각해서 전혀 안 읽지만 인터넷에서 문서를 열심히 찾아보면서 직접 실험해보는 개발자는 어떨까? 혹은 각종 논문을 열심히 탐독하는 개발자는? 코드가 최고라고 생각해서 오픈소스 코드를 깊이 파고드는 개발자는? 이처럼 다양한 공부 스타일이 있는데, 후보자가 공부를 열심히 하는지 아닌지 알기 위해서 이 모든 가능성에 대해 질문을 던질 것인가?

집에서 취미로 개발을 하냐고? 나도 이 질문 몇 번 받았다. 그 때는 마침 집에서 불꽃 코딩 할 때라서 당연히 yes라고 대답했지만 이콜레모를 주로 하던 동안에는 집에서 일과 분리된 개발을 따로 한 적이 없다. 당연히 회사 일이 가장 재미있었기 때문이다. 그런데 이런 질문을 던져서 과연 이 사람이 geek인지 아닌지 알 수 있을까? 이것이 닫힌 질문의 함정이다.

물론 닫힌 질문도 좀더 잘할 수는 있다. 이를테면 이렇게 해볼 수 있다.

이런 식이면 공부하는 스타일인지 아닌지 좀더 파고들어볼 수는 있다. 그런데, 만약 공부는 별로 열심히 하지 않지만, 데이터베이스 성능 튜닝을 기가 막히게 해내는 사람이라면 어떨까? 장점은 수십 수백가지가 있다. 닫힌 질문은 말하자면 수십 수백 가지의 장점의 리스트를 뽑아놓고 하나씩 물어보면서 체크 표시를 하는, 그런 방식이다. 물론 이렇게 세상에 존재하는 개발자의 모든 장점을 체크해볼 수 있으면 더할 나위 없이 좋겠지만, 우리의 면접 시간은 제한되어 있다. 그래서 나는 확인할 장점의 리스트를 미리 가지고 가지 않는다.

그보다 더 좋은 방법은 열린 질문을 하는 것이다. 열린 질문이라고 해서 엄청 고급스러운 질문이 아니라, 그냥 특정한 답을 기대하지 않고 그 사람의 경험을 더 깊이 끄집어낼 수 있는 질문이다.

예를 들면 다음과 같은 식이다.

이 정도면 이 사람은 어려운 문제를 만났을 때 그럭저럭 헤처 나가기는 하지만 완전한 개념 이해를 하려고 하는 타입은 아니다. 이쯤에서 면접관도 iOS 개발을 잘 알아서, autorelease와 release의 차이를 이해하는지에 대해 물어볼 수 있으면 더 확실하게 확인할 수 있다. 만약 이런 차이를 정확하게 이해하고 설명할 수 있다면 이 사람은 어려운 문제를 만났을 때 개념을 깊이 이해하고 해결하는 장점을 가졌다는 것을 발견한 것이다.

예를 몇 개 더 들어보자.

이쯤 되면 이 사람은 커뮤니티의 흐름도 보고 있으면서 당장의 문제 해결 뿐 아니라 코드 품질에 대한 고민도 하는 사람이고(CPS는 코드 품질 문제), 문제를 해결하기 위해 끝까지 추적하는 끈기도 가진 사람이다. 단 하나의 경험을 집중적으로 파고 들어도 여러 가지 장점이 나오는 것이다. 경력이 많다고 해서 그 사람의 여러 가지 경력에 대해 다 붙잡고 물어볼 필요가 없다. 하나만 끈질기게 물고 늘어지면 여러 가지 장점이 발굴되는 것이다.

이건 면접관도 node.js 경험이 있어서 저렇게 질문을 던질 수 있다고 볼 수도 있지만, 또 질문을 자세히 뜯어보면 대부분 node.js를 몰라도 파고들 수 있는 질문이다.

물론, 후보자가 경험한 기술에 대해 면접관이 잘 알고 있다면 좀더 쉽고 편한 방법들이 많다. 이를테면, 데이터베이스 성능 문제를 많이 다룬 후보자를 만났다고 해보자. 그럼 이런 질문을 던져볼 수 있다.

꼭 인덱스가 정답인 건 아니지만, 이런 문제에 대해 주관이 정리되어 있다면 깊이 있게 고민해왔을 가능성이 높다. 물론 인덱스라고 답했으니 인덱스에 대해서 좀더 깊이 물어봐야 한다. 이를테면 인덱스를 타지 않는 게 더 좋은 건 어떤 경우인가, MySQL에서 결합 인덱스는 어떤가, 힌트는 어떨 때 사용하는가 등등. 이것도 정답을 확인하기 위한 것이 아니다. 예를 들어 MySQL 결합 인덱스는 개판이죠하고 답했다면 왜 개판인지 또 한 번 더 물어봐야 한다.

기술을 잘 알고 있을 때는 짤막한 닫힌 질문을 여러 개 해보는 것도 도움이 될 때가 있다. 이를테면, HTML/CSS 개발자에게 블록 엘리먼트와 인라인 엘리먼트의 차이점을 설명하라고 했는데 잘 못한다면 실격 사유가 될 수 있다. 대답하면 높은 점수를 줄 수 있지만 대답 못해도 감점요인이 아닌 질문들도 있다. 이를테면 해당 기술을 깊이 있게 공부했으면 알 법한 것들을 물어보는 것이다. 내가 기술면접이라는 걸 처음 면접자로 경험한 게 NHN 입사할 때였는데, 그 때 Java의 int와 C의 int가 어떻게 다르냐는 질문을 받았다. 몰라도 별 지장 없는 것이지만 알고 있으면 아 이 사람이 제법 디테일하게 공부하는 사람이구나 하는 걸 알 수 있다.(물론 난 정확하게 대답했지 하하)

만약 어려운 문제를 해결해간 경험이 있다면 더없이 파고들기 좋은 소재다.

이 대화에서는 이 사람이 상황에 맞는 커뮤니케이션 수단을 선택할 수 있다는 것, 거듭된 수정 요구에 화를 내지 않고 애자일하게 접근해갈 수 있다는 것, 테스트 자동화에 대한 고민이 깊다는 것을 확인할 수 있다.

 

장점을 많이 발견하려면 결국 후보자가 자신의 경험에 대해 깊이 있게 말할 수 있도록 해야 한다. 단편적인 질문에 그치면 후보자의 답변도 단편적으로 흐르고 만다. 간혹 말하는 걸 좋아해서 장광설을 늘어놓는 후보자도 있지만, 대개 그런 장광설은 깊게 들어가기보다는 넓게 퍼지는 경향이 있기 때문에 적절한 질문으로 깊게 들어가도록 유도해야 한다. 파고들되 닫힌 질문이 아니라 열린 질문을 해야 후보자 스스로 깊게 들어갈 수 있는 것이다.

약간 사족을 넣자면, 내가 기술을 선택하는 기준은 이와 정반대다. 기술을 선택할 때는 장점이 뚜렷한 기술보다 단점이 적은 기술을 선호한다. 이것이 내가 파이썬과 장고를 선택한 이유이기도 하다. 사람과 기술은 다르다. 보완할 수 없는 치명적인 단점을 가진 사람은 생각보다 아주 드물다. 적어도 내 경력 13년 간 저 사람은 구제불능의 단점을 가졌다고 생각한 사람이 아무도 없었다. 물론 다시 상종하기 싫은 사람은 여럿 있었지만;;

팀웍을 해치는 사람 이런 것도 난 안 믿는다. 내 지론은 이거다. 팀웍이 나쁜 팀원은 없다. 팀웍이 나쁜 팀이 있을 뿐이다. 팀웍의 실패는 팀장의 책임이지 개별 팀원에 돌릴 일이 아니다. 물론 나 역시 팀장으로서 팀웍에 실패한 경험이 있지만, 적어도 난 그게 내 책임이라는 정도는 안다. 게다가 면접 자리에서 팀웍을 검증하는 건 불가능한 일이다.

커뮤니케이션 스킬도 그다지 중요하게 생각하지 않는다. 내가 오픈마루에 있을 때 어떤 팀장은 커뮤니케이션 스킬도 능력의 일부이기 때문에 기술려과 커뮤니케이션을 따로 떼서 생각할 수 없다고 주장하는 사람도 있었는데, 내 생각은 전혀 다르다. 커뮤니케이션도 팀의 역할이다. 내가 경험한 개발자 중에는 개발은 잘하는데 표현은 잘 못하는 사람도 많았다. 그런 사람이 팀에 기여하게 만들 방법은 얼마든지 있다.

목적이 장점을 발견하는 것이니만큼, 압박 면접 같은 건 안한다. 물론 내가 티몬에서 채용 면접을 했을 때 그걸 압박 면접이라고 느낀 사람도 있었는데, 솔직히 그 때는 후보자의 입장을 충분히 배려하지 못했다. 깊이 파고드는 질문을 많이 해야 하는 만큼, 그 집요함에 불쾌감을 느낄 가능성도 꽤 있다. 그래서 처음부터 긴장을 잘 풀어주고, 부드러운 톤으로 대화를 이어가야 한다. 그래도 그 때 두어 번 실수한 이후로는 잘 해온 것 같다.

 

한줄 요약. 채용 면접은 장점을 발견하는 과정이고, 장점을 끄집어내기 위해서는 단편적인 질문이나 닫힌 질문이 아니라, 열린 질문으로 깊이 파고들어야 한다.


 

블로그 소프트웨어 개발