2021년 상반기 주니어 Visual-SLAM 엔지니어 이직 후기

3줄 요약 - TL;DR

  1. SLAM을 뽑는 곳들이 많아졌다 + 다양해졌다
  2. 면접의 난이도가 어려워졌다. 코딩테스트나 구현과제는 거의 필수.
  3. 개인 성적 7전 3승 2패 2무 - 만족하는 회사 + 조건으로 이직 성공!

 

이직 성공 성성공!!! 짜릿해 최고야!!

 


배경

작년 9월부터 이직에 관심을 가지게 되었습니다. 이직을 결심하게 된 이유는 다음과 같습니다.

  1. 딥러닝을 사용하는 다른 필드를 경험해보고싶어서
  2. 회사에 대한 불만족
  3. 개인적인 사유 (본가에서 출퇴근을 해야함)

강남/판교 지역에서 올해 Visual-SLAM 기술 관련으로 채용이 다수 진행되고 있는데, 해당 지역권은 본가에서 출퇴근을 할 수 있기 때문에 ‘강남/판교권에 취직을 하자!’ 가 목표가 되었습니다.

올해 2월부터 전공공부와 CS관련 지식, 코딩테스트 준비를 시작했고 5월에 최종합격 소식을 받았습니다.

후기를 시작하기 전 간단히 제 이력에 대해 설명하겠습니다. 전공의 적합성과 경력을 고려하셔서 후기를 읽어주시면 좋을 것 같습니다.

  • 해외 산업/기계공학 학사
    • CS지식 X
  • 해외 의료 로보틱스 연구석사
  • 2년간 국내 증강현실 기업에서 object pose estimation, object tracking 기술개발
    • 제품 경험 O
    • 연구과제 경험 O
  • 기술 커뮤니티 + 블로그 운영
  • SLAM 기술 세미나 경험
  • 논문 실적 X

 


포지션 탐색

SLAM 포지션 찾는 방법

이직의 가장 첫 단계는 ‘열려있는 포지션 탐색’ 입니다.

포지션을 찾는 방법에는 ‘내가 직접 찾기’ vs ‘헤드헌터를 통해 찾기’ 가 있습니다. 개인적인 의견으로는, 신입/주니어 포지션은 본인이 직접 찾는게 더 좋다고 봅니다. 국내 SLAM 포지션은 많지 않아서 원XX, 잡XXX, 링XXX 등의 잡포스팅 서비스들을 이용하거나, 국내 SLAM 기업들 웹사이트를 찾으면 1시간 내에 거의 모든 오픈 포지션을 찾을 수 있습니다. 물론 헤드헌터를 통해서 오픈 포지션을 찾을 수도 있습니다. 하지만 제 경험 상 SLAM 직무와 필요역량에 대해 잘 이애하시는 좋은 헤드헌터 분을 찾기는 어렵습니다. 물론, 좋은 분을 찾으면 고속도로가 뚫린 것 같은 느낌을 받을 수 있을겁니다. 하지만 가장 좋은 방법은 잡포스팅 서비스에서 technical recruiter (또는 리쿠르팅 담당자)에게 직접 연락하는 것, 또는 회사 careers 페이지에 직접 찾아가 공고를 찾아 지원하는 것 이라고 생각합니다.

 

SLAM 포지션에 대한 기대치

작년까지의 신입/주니어 SLAM 포지션 공고들은 SLAM이라는 단어를 쓰지 않고 visual odometry라는 단어를 사용했습니다. 아무래도 SLAM 보다 visual odometry가 더 쉬워보여서였을까요? 그러다가 2021년에 들어서 SLAM이라는 단어가 공고에 자주 나타나기 시작합니다. 더불어 VO보다는 훨씬 어려운 Visual-inertial odometry 기술 경험을 찾는 포지션들도 많이 생겼습니다. 그만큼 visual odometry 정도의 기술로는 기업들이 앞서나가지 못한다고 판단을 하게 된 것이고, 더 실력있는 인재에 대한 수요가 생겼다는 것을 의미한다고 생각합니다.

하지만 여전히 ROS를 사용해서 오픈소스 SLAM을 돌려보기’만’한 사람들은 환영받지 않는 것 같습니다. 오히려 반대로, 기본적인 코어개발 실력이 받쳐주면서, 한발 더 나아가 하이레벨에서 SLAM을 다룰 수 있는 인재를 원하는 모습을 보였습니다.

SLAM 포지션을 뽑아본 기업들은 이러한 인재를 구하기가 쉽지 않다는 것을 알고 있습니다. 6개월~1년을 기다려서 뽑힐 때도 있기 때문에, 기업들은 지금까지 실력있는 인재를 데려오기 위해서는 어떤 대우를 해줘야할지 많은 고민을 했을 겁니다. 이런 과정을 거쳐 현재 기업들은 파격적인 대우를 해서라도 함께 롱런할 실력있는 사람이 나타나기만 한다면 무조건 데려오겠다라는 입장을 가진 경우가 많습니다.

그렇다면 당연히 제가 취해야할 스탠스는…!

 

SLAM이 적용되는 기술 도메인의 특성

2021년에는 로보틱스, VR/AR, 자율주행, 드론, 자율비행까지 포지션이 다양해졌습니다. 아래는 각 분야에 대해 제가 받은 느낌입니다.

 

  • Visual-inertial odometry (VIO) 에 대한 수요가 많아졌습니다.
  • 알고리즘 내부의 작동 방식을 이해하는 코어 개발의 중요성이 더 높아졌습니다.
  • SLAM 알고리즘 튜닝 경험, C++ 프로그래밍 실력, 협업 경험 은 예전이나 지금이나 중요합니다.
    • 기본적인 SLAM 실력에 더불어 SIMD, CUDA, DSP 가속 기술 과 같은 추가적인 경험이 있는 분들은 어디에서든 환영받습니다.
    • 센서 캘리브레이션 및 실사용 경험이 있으신 분들도 환영받습니다.
  • 논문 경험은 필수는 아니지만, 있으면 당연히 좋은 인상을 남깁니다.
  • 실내/실외 모바일 로봇에 대한 수요가 주를 이룹니다.
  • Visual-odometry 코어 개발 경험ROS 사용 경험이 주로 요구되었습니다.
  • 실외 localization을 수행하는 로봇 (e.g. 배달로봇)의 경우 VIO 기술 경험이 있다면 정말 큰 강점이 될 것 같습니다.
  • 실내 localization을 수행하는 로봇 (e.g. 물류로봇, AGV)에서는 RGB-D SLAM 사용 경험, 또는 visual localization 기술 경험에 대한 수요가 높았습니다.

(제가 찾은 것으로는) 아쉽게도 강남/판교 부근에서 모바일 로봇을 하는 기업은 많지 않았습니다. 의외로 마곡, 가산디지털단지, 용인 등에 위치한 회사들이 많았습니다.

  • 주로 공간맵핑에 대한 수요가 늘었으며, VIO 기술에 대한 수요가 높았습니다.
    • 하지만 VIO 경험자가 아니더라도 영상처리 경험자는 환영하는 듯 보입니다.
    • 안드로이드/iOS 개발 경험 도 선호합니다.
  • VR쪽 회사들 중에서는 LiDAR 기술 경험도 종종 찾는 것을 보았습니다.
  • 모바일 개발 경험이 없더라도, ARCore/ARKit 경험,Unity C#, 모바일 딥러닝, OpenGL/GLES/Vulkan/Metal 그래픽스, SIMD가속 경험이 있다면 큰 강점이 될 것 같습니다.
  • 한가지 특이한 점은, 해외쪽에서는 클라우드 컴퓨팅 사용 경험을 종종 찾기도 하는데 국내 기업들에서는 아직 보이지 않는 모습입니다.

(제가 찾은 것으로는) 강남/판교 부근에서 VR/AR을 하는 기업들은 소수 있었습니다. SLAM 관련 채용도 진행하고 있었고, 기술적으로 상당히 앞선 부분이 있었습니다. 의외로 VR/AR을 하는 회사들 중에서는 SLAM을 하지 않는 회사들이 많습니다. 이러한 회사들은 대부분 딥러닝 기반 얼굴인식이나 자세인식 관련 연구를 하기 때문에 이번 글의 주제에는 해당되지 않습니다.

  • 임베디드 환경에서의 가벼운 SLAM 알고리즘에 대한 수요가 높았습니다.
    • 이러한 환경 제약으로 인해 많은 경우 최신 딥러닝 기반 SLAM이나 graph-based SLAM에 대한 깊은 이해는 필요하지 않았습니다.
    • 대신 ROS 사용유무를 떠나 하이레벨 SLAM 경험 (e.g. 설계)성능 튜닝 경험이 요구되었습니다.
  • 많은 기업들이 NVIDIA jetson 플랫폼을 사용하기 때문에 CUDA 가속 기술ARM기반 NEON SIMD 가속 기술을 보유하셨다면 큰 강점이 될 것 같습니다.
  • 영상처리 뿐만이 아니라 항공역학, 제어, path planning 지식, 또는 초경량 딥러닝 기술을 이해하시는 분을 좀 더 좋아합니다.

(제가 찾은 것으로는) 강남/판교 부근에서 드론 기업을 5곳정도 찾을 수 있었습니다. 각각의 기업들이 가지고 있는 BM이 확연하게 차이가 나서 흥미로웠습니다.

  • Sensor fusion에 대한 수요가 높았습니다.
  • 많은 기업들이 HD-Map 제작 및 사용을 하기 위해 ‘Map & localization 엔지니어’라는 포괄적인 의미로 SLAM 엔지니어를 채용하였습니다.
  • 이종 센서간의 최적화 프로그래밍 경험이 가장 선호되었습니다.
    • 여기에 필요한 실차 센서 사용 및 통신 경험, 데이터 association & 퓨전 경험, 자율주행 도메인에 대한 경험/이해가 요구되었습니다.
    • 추가적으로 지리데이터 (e.g. GIS) 사용 경험, 서버 분산처리 및 배치 프로그래밍, CUDA/OpenCL 가속, 딥러닝 기술과 같은 기술을 보유하셨다면 큰 강점이 될 것 같습니다.
  • 최신 자율주행 논문/기업/기술 트렌드를 파악하시는 것이 중요합니다.

자율주행 기업들은 강남/판교 부근에서 상당히 많이 찾으실 수 있습니다. 지금까지 거론한 필드들 중에 가장 투자가 많이 들어간 필드라고 생각하고, 그만큼 회사들의 규모와 회사의 목표들도 굉장히 큰 편입니다.

  • 자율선박운행, 자율비행 등 새로운 분야가 있었습니다.
    • 이처럼 초창기 사업 + 실험적인 기술에는 하나의 기술 분야에 충분한 경험 + 다양한 기술 분야에 대한 이해를 요구하였습니다.
    • 물론 팀바이팀이겠지만, 솔직히 이런 포지션에는 시니어 급 포지션을 영입하는 것이 맞는 것 같고, 신입/주니어가 갈만한 포지션은 아니라고 생각됩니다.

 

소감

아니 근데 반년전에는 visual-odometry 경험만 요구하다가 2021년 되었다고 갑자기 이렇게 많이 요구하는거면 대체?! 🤣

 

그래서 어떤 필드?

저는 자율주행=로보틱스>드론 순서대로 선호도를 잡고 job search를 시작했습니다.

아무래도 이전 회사에서 모바일 기기로 컴퓨터 비전 계산을 하다보니 이번에는 그나마 조금 더 풍족한 컴퓨팅 자원에서 더 격한 (?) 알고리즘을 만들어보고 싶었습니다. 드론 분야는 이러한 이유로 자율주행과 로보틱스에 비해 선호도가 조금 밀리게 되었습니다. 온디바이스 기기는 자율주행이 아무래도 로보틱스 분야보다 더 좋은 사양을 가질 수 있지만, 두 분야 모두 클라우드 컴퓨팅을 사용할 가능성도 있었기 때문에 해당 경우에 대해서는 동일한 선호도를 두었습니다. VR/AR 분야에 올라온 공고들은 대부분 이전 기업의 경쟁사였기 때문에 지원을 고려하지 않았습니다.

 


이력서 (CV/Resume)

필드가 정해지고나서는 가장 먼저 이력서를 만들었습니다.

이직/면접 과정을 소개팅에 비교한다면 이력서는 ‘첫 인상‘에 해당한다고 생각합니다. 이력서는 그만큼 깔끔하게 다듬어야하고, 또 매력적이게 + 한번 만나보고싶게 만들어야합니다.

이력서를 적을때는 2가지가 준비되어야합니다.

  • 지원하는 직무에 큐레이션된 이력
  • 명쾌하게 내 의도를 전달하는 디자인 (i.e. 내가 제일 찰떡이요, 날 뽑으시오!!)

 

큐레이션된 이력

전반적인 이력 큐레이션에 관련해서는 이 글 을 참조하시길 바랍니다.

위 글에서 시사하는 바와 같이 저는 지원하는 직무마다 하나씩 큐레이션해서 CV를 만들었습니다.

저는 다양한 필드에 지원하고 싶었는데, 필드마다 사용되는 SLAM 기술의 특성이 많이 다르기 때문에 ‘SLAM 기술 경력’ 하나만으로 모든 필드에 다 지원할 수는 없기 때문입니다. 예를 들어, 드론 분야에서는 경량화된 빠른 VIO를 원하는데, GPU 서버를 써야하는 딥러닝 기반 semantic visual-lidar fusion SLAM 경력으로 지원하면 좋은 핏이 아니라고 볼 수 있습니다. 이러한 이유 때문에 저는 자XX닷컴, 원XX 등등과 같이 하나의 이력서를 만들고 지원포탈을 통해서 여러 회사에 뿌리는 서비스를 추천하지 않습니다.

이력서를 적기 전에 제 이력에 대해 평가를 해보았을 때, SLAM 개발 경험, SLAM 기술에 대한 이해도/관심도 표출, 논문 실적이 부족해 보였습니다. 이걸 어떻게든 채워야 이직을 할 수 있다고 생각했습니다.

부족한 SLAM 개발 경험을 채우기 위해 다음과 같은 액션을 취했습니다.

  1. SLAM 구현 스터디를 기획해서 진행해봤지만 큰 성과는 없었습니다.
  2. 회사에서 SLAM 업무를 하려고 했습니다.
    • …만 SLAM이 아닌 다른 업무가 배정되었습니다 😢
  3. 2개의 사이드 프로젝트를 진행했습니다.
    • CubeSLAM에서 영감을 받아 딥러닝 + SLAM 개발
    • Visual-SLAM을 위한 보일러 플레이트 프로젝트 (cpp-cv-project-template)

부족한 SLAM 기술에 대한 이해도/관심도 표출을 위해 다음과 같은 액션을 취했습니다.

  1. 기술 블로그를 더욱 채워가고 내용을 페이스북에 공유하였습니다.
    • Deep SLAM 글
    • Robust estimation 글
    • … 등등
  2. SlideShare에 이전 SLAM 세미나 자료를 보강해서 공유하기도 하였습니다
    • ‘하루만에 Visual-SLAM 고수되기’ 자료.
  3. 서베이 논문과 SLAM 논문을 읽고 정리했습니다.
    • Visual-SLAM 로드맵.

부족한 논문 실적을 위해 아이디어를 내보고 여러 연구자분들에게 컨택을 해보았지만…

논문을 적을 실력도 여유도 부족했을 뿐 더러, 논문을 적어도 회사측에서 소속을 걸지 못하게 할 것 같은 느낌이 들었습니다.

실제로 survey paper라도 내보자, 그거도 안되면 white paper라도 내보자 했지만 전부 거절… 😢

현실적으로 불가능 할 것 같아 유일하게 논문 실적만큼은 포기하였습니다.

 

부족한 부분을 어느정도 채운 후, Long CV를 작성했습니다.

그 후, 지원하려는 직무들마다 내용을 맞춰 Short CV에 적을 내용들을 정제했습니다. 내용을 정할 때 기업조사를 동시에 진행했는데, JD에서 언급한 키워드, 기업의 인재상, 기업/팀이 중요히 여기는 가치에 초점을 두며 내용을 정리하였습니다.

 

디자인

Short CV는 2장으로 작성했습니다. 이는 제가 리서치+개발 포지션에 가기 위해 내용을 넣다보니 1장에 다 담기가 어려웠기 때문입니다. 또, 리서치 인력끼리 알아보는 시그니처(?)를 남기기 위해 CV를 일부러 LaTeX로 작성 (ㅋㅋ) 하였습니다.

내용상 중요한 순서대로 Summary->Employment->Projects->Skills->Education->Research Experiences를 적고나니 1장 반 정도가 되었는데, 나머지 부분은 블로그와 웨비나 경험과 같은 커뮤니티 경력으로 채웠습니다 (논문경력으로 채웠으면 좋았겠지만요 😢)

LaTeX와 같은 경우는 템플릿을 만들기 굉장히 수월합니다. 아래와 같은 템플릿을 만들어서 동일한 구조의 새로운 CV를 빠르게 만들었습니다. 처음에는 5곳의 기업에 관심이 있어서 기업조사를 하며 5개의 short CV를 대충 빠르게 작성했고, 지원서를 제출하기 직전에 내용과 디자인을 다듬어서 제출하였습니다. 이후 6곳의 기업에 추가로 관심이 생기면서 동일한 프로세스를 반복하였고, 총 6곳에 지원서를 제출하였습니다.

해당 템플릿을 사용하시고 싶다면 링크를 따라 들어가시면 됩니다 (도움되셨다면 스타를 꾸욱!). 경력기술서 템플릿도 포함되어있습니다!

 


경력기술서

경력기술서는 대기업을 제외하고는 직접적으로 요구한 곳은 없었습니다. 그럼에도 지원서에 경력기술서를 첨부하였습니다. 이렇게 할 경우 면접관분들께서 사전에 질문 리스트를 좀 더 디테일하게 준비하실 수 있기 때문에 면접에서 더욱 심도깊은 이야기를 할 수 있습니다. 하지만 경력기술서에 모든걸 다 적어내버리면 반대로 면접에서 질문할 내용이 없어져버리기 때문에… 유리한 질문을 끌어낼 수 있을만큼 적당하게 적는 것이 기술이라고 생각합니다.

경력기술서 역시 아래에 보이는 LaTeX 템플릿를 사용해서 작성했습니다.

 


포트폴리오

포트폴리오는 따로 제출하지 않았습니다. 개인적인 생각이지만, 포트폴리오는 서류 단계에서 내는 것이 아니라고 생각합니다. 포트폴리오는 발표를 위한 것이라고 생각합니다.

서류전형에서 합격하면 보통 면접에서 자기소개 시간에 발표를 부탁하는데, 이 때 발표 시간에 (보통 15/30분) 맞춰 포트폴리오 자료와 스크립트를 준비하고 리허설을 진행했습니다. 포트폴리오 디자인은 제가 평소에 사용하는 디자인을 사용했는데, 회색 배경에 은색 빛을 띄는 배달의민족 한나체Pro 폰트를 사용합니다.

제 포트폴리오는 크게 1. 자기소개, 2. 이력소개 로 나눠져있습니다.

자기소개에서는 제가 관심가지는 기술 분야, 저의 업무 스타일, 지원 동기 에 대해서 소개했습니다. 종종 연말평가에서 받은 피드백을 인용하여 팀원으로써의 저를 소개하기도 했고, 지원하는 직무가 롱텀 목표가 있다면 제가 추구하는 커리어 방향도 함께 소개하였습니다.

이력소개에서는 이력서에 적힌 프로젝트들을 소개하며, 제가 진행한 파트에만 집중하였습니다. 아래 예시에서 보이는 것 처럼 각 프로젝트들은 3페이지씩 소개 되었으며, 각 페이지마다 다음과 같으 내용을 담고 있습니다.

  • 프로젝트 목적과 사용된 기술의 이름을 명시
  • Flow chart를 통해 알고리즘 워크플로우를 소개
  • 사진과 gif 이미지를 통해 실제 작동 장면 공유

 


지원서 / Cover letter

스타트업, 중견기업/계열사, 대기업 별로 각각의 지원 과정 방법이 다릅니다.

가장 간단한 과정을 가지고 있습니다.

많은 경우 CV를 이메일로 보내는게 다이고, 종종 석사논문을 요구하기도 합니다.

물론 이메일로 그냥 ‘지원합니다 + 첨부파일확인해주세요’라고 보내면 안됩니다. Cover letter 정도는 적어주는게 좋습니다.

지원하는 직무에 석사논문 주제가 연관된것이 아니라면 석사논문은 크게 중요하지 않은 것 같습니다 (면접관님들께서도 길어서 잘 안읽으시더라구요 🤣) 직무와 연관된 주제의 석사논문이라면 논문 전체를 첨부하고, 그게 아니라면 abstract와 목차만 첨부하는 것도 괜찮을 것 같습니다.

자율형식의 CV를 제출하고, 추가적으로 정해진 질문들에 대한 답해야하는 유형입니다.

‘왜 우리 회사에 지원하는가?’, ‘본인의 장단점이 무엇인가?’ 같은 질문들이 나옵니다.

종종 기출변형으로 ‘자신있는 기술들 + 숙련도를 적으시오’라던지, ‘본인을 시, 노랫말, 가사로 표현해보세요;;’ 같은 질문도 있습니다.

충분한 시간을 가지시고 지원하시는게 좋습니다.

하지만 최근 중견기업/계열사 포지션은 경쟁이 치열하기때문에 빨리 행동하지 않으면 포지션이 사라질 수 있습니다.

제일 귀찮은 작업이 많고 복잡한 유형입니다.

정해진 규격에 맞춰서 모든걸 적어야 합니다. CV를 적은 이유가 없어지지만… CV도 첨부해야합니다 🤣

부서마다 추가로 더 적어야하는 서류가 따로 있는 경우도 있습니다.

서류단계를 통과해도 1차면접 2차면접 전에 추가 서류를 요구하기도 합니다.

시스템도 조금 과하게 까탈스럽습니다. 저는 지원서 제출까지 2분 남았는데 석사논문과 CV를 업로드했더니 총 3mb가 넘는다는 이유로 첨부가 안되서… 빛보다 빠른 손으로 파일 압축해서 겨우 넣은 기억이 납니다 ㅋㅋ

꼭꼭꼭!! 충분한 시간과 사전조사를 통해서 탄탄하게 준비하셔야합니다.

 

스타트업이나 중견기업/계열사에 이메일을 통해 지원하실 경우 cover letter가 굉장히 중요하다고 봅니다. Cover letter는 본인의 배경, 지원 동기, 직무에 대한 적합성, 열정, 커뮤니케이션 능력도 보일 수 있는 귀중한 기회입니다. 저의 경우 아래와 같은 형식의 cover letter를 이용하였습니다.

1
2
3
4
5
6
7
8
9
10
안녕하세요,

XXX 포지션에 지원하게 된 (이름))라고 합니다. YYY 기업이 해결하려고 하는 숙제와 해당 포지션이 담당하게 되는 업무의 내용이 굉장히 흥미롭게 다가왔고, Visual-SLAM 기술에 큰 관심을 가지고 있는 엔지니어로써 함께 문제를 해결해나가고 싶어서 지원하게 되었습니다.

제 소개를 잠시 드리자면, 저는 (최근 경력 내용)을 하였습니다. 이 과정에서 (최근 경력에서 얻은 기술력/강점)하며 다양한 경험을 쌓았습니다. (직무의 적합성)라고 생각하여 이번 채용 공고를 통해 지원하게 되었습니다. 저는 (기타 장점)기술에 익숙하며, 이 경험을 토대로 YYY에서도 (목표, 열정)하고 싶습니다.

지원 관련 서류는 첨부파일을 참조 부탁드립니다.

지원을 검토해주셔서 감사합니다,
(이름) 드림.

 


기술면접 / 코딩테스트

Visual-SLAM 종사자시라면 아마 이번 글에서 가장 눈여겨보실 부분이 아닐까 생각합니다 ㅎㅎ

면접 프로세스는 대부분 2번을 보며 1차면접에서는 코딩테스트/기술면접, 2차면접에서는 컬쳐핏 면접을 진행합니다. 또, 종종 전화면접 또는 구현과제를 진행하기도 합니다.

스타트업, 중견기업/계열사, 대기업 으로 나눠서 각각의 경험을 공유하겠습니다.

스타트업에서는 다양한 종류의 1차 면접 방식이 있었습니다. 어떻게 진행될지는 정말 회사-바이-회사라고 생각합니다.

저는 다음과 같은 방식들의 면접을 겪었습니다.

  • 필기시험
  • 실시간 질문/답변
  • 인터넷과 Intellisense 끄고 코딩 후 제출
  • Google docs에서 실시간 코딩 (개인적으로 제일 떨렸습니다 ㅋㅋ)

대체적으로 질문들은 영상처리, SLAM, C++에 대한 기본적인 지식/실력을 가지고 있는지 확인합니다. 다음과 같은 레벨의 질문들을 10~15개 정도 물어보시는 것 같습니다.

  • Camera projection을 설명하세요 + 카메라 캘리브레이션은 어떻게 합니까?
  • 자율주행/드론/AR/로보틱스 도메인의 특징에는 어떤게 있을까요? 본인이 하시던 분야와는 어떤 점이 다를까요?
  • 자주 쓰시는 STL 컨테이너 중 하나를 설명해주세요. std::mapstd::unordered_map은 어떻게 다를까요?
  • 피쳐 트랙킹에는 어떤 방법들이 있나요?
  • Feature-based SLAM과 Direct SLAM은 어떤 점이 다르나요?

이후, 이력서에 언급된 프로젝트들에 대해서 질문/답변을 진행합니다. 답변이 꼬리에 꼬리를 물고가기 때문에, 점점 더 내용이 깊게 들어갑니다. 충분히 답변이 되거나 답변을 하지 못할 때 까지 파고 들어가는 편 입니다. 예시를 들면

  • 나: 사전에 SLAM으로 만든 맵을 사용해서 실시간 visual localization을 수행하는 알고리즘을 만들었습니다.
  • 면접관님: 피쳐는 어떤걸 사용했나요? 어떻게 매칭했나요?
  • 나: 피쳐는 ORB를 사용했습니다. 매칭은 디스크립터 기반 매칭을 수행했습니다.
  • 면접관님: 피쳐매칭이 잘못될 수도 있을텐데요,
  • 나: 우선 Lowe ratio test로 비슷한 피쳐끼리의 매칭은 이미 걸러낸 상태였습니다. 이후 P3P+RANSAC을 이용해서 아웃라이어를 걸러냈습니다. RANSAC은 PROSAC 샘플링 기법에 inner-ransac을 만들어서 L-M 기법을 이용했구요. Tukey estimator까지 적용하고나니까 좋은 매칭 결과를 보였습니다.
  • 면접관님: 그래도 잘 안되는 부분이 있었을텐데요,
  • 나: FOV에 반복되는 피쳐만 가득한 경우에는 잘 안되었습니다 ㅠㅠ Global descriptor로도 풀어보려고 했는데 잘 안되었고, 다른 방법으로 풀어보려고 했지만 시간이 부족해서 해결하지 못했습니다.

중견기업/계열사 중 SLAM을 하는 곳은 사실 N사 계열사와 K사 계열사밖에 없다고 생각합니다 ㅋㅋ K사 계열사는 전문연구요원을 받지 않아서, N사 계열사는 스케줄 상 지원하기 어려워서 제가 직접 경험한 곳은 없었습니다. 하지만 굉장히 비슷한 컬쳐를 가진 기업과 면접을 보았기에 경험을 공유할 수 있다고 생각합니다.

중견기업/계열사는 스타트업에 비해 인재상이 더 뚜렷하게 잡혀있고, 어떤 도메인의 제너럴리스트보다는 실제 경험이 풍부한 스페셜리스트를 뽑으려는 성향을 보였습니다. 그렇기 때문에 석사때 연구하신 분야가 회사에서 요구하는 기술과 일치하거나, 관련된 분야로 논문을 적은 경험이 있으시다면 굉장히 좋은 기회를 가졌다고 볼 수 있습니다. 다른 필드에서 분야를 전환해서 오시려는 분께는 특별한 킥이 있지않는 이상 난이도가 높다고 생각합니다.

기본기를 중요하게 본다고 알려져있지만, 제가 느끼기로는 기술에 대해 깊게 + 로우레벨까지 고민해본적이 있는가를 보는 것 같습니다. 이러한 면에서 지원자의 진정성과 몰입도도 볼 수 있는 것 같구요. 제가 봤던 면접은 1시간 자기소개+질문답변 후 3시간 동안의 기술면접이였으며, 다음과 같은 분야의 질문들을 받았습니다.

  • 기초적인 수학 (선형대수, 확률과통계)
  • 코딩테스트 (대부분 구현/시뮬레이션 문제)
  • 컴퓨터 비전 기술 이해도 (경험, 이론)

질문들의 수준은 스타트업에 비해 훨씬 깊은 지식을 요구하는 편이며, 해당 지식에 대해 모를 경우 생각의 흐름을 보려고 하는 문제가 많습니다. 기억나는 질문으로는 다음과 같은 것들이 있습니다.

  • Fundamental matrix의 Dof는 몇개인가? 왜?
  • Maximum-likelihood estimation (MLE)와 Maximum-a-posteriori estimation (MAP estimation)의 차이점이 무엇인가?
  • Gauss-Newton과 Levenberg-Marquardt 방식이 다른 점은 무엇인가? 왜 gradient descent는 안쓰는가?
  • w,h 크기의 이미지가 있고, x,y 크기의 conv 마스크가 있고, 이 conv 마스크가 s stride 값으로 c 채널수 만큼 conv 연산을 한다면 총 연산 횟수는?
  • 하얀 벽에 88이라는 숫자가 써있고, 다른 뷰에서 숫자를 바라본 이미지가 2개 있다. 이 두 이미지의 relative pose를 어떻게 구할 것인가?

종종 전혀 모르는 분야에 대한 질문이 나올 때도 있습니다. 절대 패닉하지 마시고 멘탈을 끝까지 잘 유지하셔야합니다.

대기업의 경우는 L사에 지원하였습니다. S사도 경력직 지원했는데 알고보니 조건이 석+5년 / 박+2년이였어서 서탈했습니다 😢

대기업은 기본적으로 가장 먼저 서류심사인성검사를 진행하였습니다.

인성검사는 따로 준비할 내용은 없었고 빠르게 본인의 업무 스타일과 성격에 맞춰서 답을 하면 됩니다.

이후 코딩테스트 대행 업체를 통해서 코딩테스트를 진행했습니다. L사의 경우는 프로그래머스를 이용하였습니다.

코딩테스트는 2시간에 3문제를 푸는 것이였고 굉장히 쉬웠습니다. 특이한 점으로는, 화면 공유 + 웹캠 모니터링 + 스마트폰을 이용해서 손과 무릎과 테이블 전체가 보이게해서 부정검사를 막습니다 (ㄷㄷ합니다). CS를 제대로 공부해본적 없는 제 인생에서 첫번째 제대로 된 코딩테스트였고, 이전부터 자료구조 책은 조금씩 읽긴 했지만 딱 이틀동안만 준비했는데 통과한걸 보면 확실히 쉬운 난이도라고 생각합니다 ㅎㅎ.

코딩테스트 준비는 동빈나의 ‘이것이 취업을 위한 코딩테스트다 with 파이썬’ 재생목록의 반정도를 보았고, 그리디/구현, DFS/BFS 위주로 보았습니다 (정말 명강의라고 생각합니다 ㅎㅎ). 물론 제가 본 코테가 유독 쉬웠을 수도 있고, 좀 더 난이도가 높은게 나올 수 있으니 대기업을 준비하시는 분들은 꼭 잘 준비하시길 바랍니다.

이후 온라인 대면 면접을 진행했습니다. 15분 자기소개 후 약 30분간 질문을 하셨고, 질문들은 대부분 자기소개 내용에 기반하였습니다 (지식에 대한 질문이 많이 없었기 때문에 스타트업,중견기업/계열사 보다 훨씬 쉬웠습니다). ‘XXX 프로젝트를 개발하실 때 왜 YYY한 결정을 내리셨나요?’, ‘해당 기능은 직접 만들었나요? 아니면 라이브러리를 썼나요? 왜 라이브러리 안쓰고 굳이 직접 만드셨나요?’ 등이 있었습니다.

가장 기억에 남는 질문은 ‘본인을 로보티스트라고 생각하시나요? 아니면 비전러라고 생각하시나요?’ 였습니다. 솔직하게 ‘로보티스트라고 하기에는 kinematics, dynamics, 플래닝 등의 SLAM 외적인 분야를 잘 모릅니다. SLAM을 잘 하게 되어도 아마 다른 비젼쪽을 볼 것 같아서 비전러에 가까울 것 같다고 표현하겠습니다’ 라고 말씀드렸습니다. 당시에는 ‘아 맞다 나 로봇포지션 지원이였지,, ㅜㅜ’ 하며 떨어졌을거라고 생각했는데, 나중에 보니 통과했더라구요 ㅋㅋ 큰 의미를 두지는 않는 것 같습니다.

 


구현과제

스타트업, 중견기업/계열사 쪽에서는 구현과제를 요구하기도 하였습니다.

저는 구현과제를 2번 진행했는데, 첫번째 구현과제는 3일의 시간, 두번째 구현과제는 1주일의 시간이 주어졌습니다. 현재 직장에 다니신다면 일정을 어느정도 조정할 수 있고, 예기치 못한 일로 늦게 제출해야할 때는 연장도 가능했습니다 (하필 마감이랑 껴서 이틀 연장했던게 기억납니다 ㅠㅠ).

3일짜리 구현과제는 중견기업/계열사에서 받은 과제이며 2개의 문제가 있었습니다.

첫번째 문제는 multiple view geometry 기술로 문제를 해결해야하는 상황이 주어지는데, 일부러 필요한 정보와 불필요한 정보를 많이 섞어 문제를 꼬은듯 한 느낌을 받았습니다. 문제의 요점은 많은 정보로부터 중요한 정보를 직접 뽑아내고, MVG 이론을 적용하여 문제를 풀고 이를 코드로 구현하면 됩니다.

두번째 문제는 영상처리 시나리오였지만, 문제의 요점은 C++ 알고리즘과 자료구조를 사용하여 효율적인 코딩을 하는 구현문제였습니다. 저는 여기서 적절한 자료구조를 사용하지 않아서 비효율적인 코드를 작성했기 때문에 과제탈했습니다 😢.

소스코드와 구현 리포트를 함께 제출하면 되는 방식이였습니다.

1주일짜리 구현과제는 스타트업에서 받은 과제이며, 4개의 문제가 있었습니다.

기간이 많이 주어진 만큼 과제의 양도 많았는데, 논문 구현, 앱 구현, 최적화 코드 작성, 모듈 구현 이 있었습니다.

난이도는 중견기업/계열사보다는 쉬운 편이라고 생각되지만, 분야가 훨씬 넓고 양이 많다보니 체력과 꾸준함이 요구되었습니다.

4문제 모두 노력할수록 더 잘 풀 수 있는 문제였기 때문에 노력~시간 비율을 맞추기가 쉽지 않았습니다.

구현과제는 절대 쉽지 않은 과정이였지만, 지원자의 입장에서는 입사 욕심이 나게 만들고 도전욕구를 끌어올리는 좋은 과정이라고 봅니다. 구현과제 문제를 이메일로 받아보았을 때 ‘아 여기 들어가려면 이정도 실력은 있어야하는구나! 여기 계시는 분들은 잘 하시는 분들이 분명하다! 제대로 회사를 찾아왔구나!’ 라는 생각이 들었고, 구현과제를 진행하지 않고 단골 면접질문들만 물어보는 곳들에 비해 훨씬 좋은 인상을 받게 되었습니다. 물론 이런 생각이 들기위한 전제 조건은 ‘적절한 양의 과제 + 적절한 난이도의 과제’인 것이 좋다고 생각하며, 너무 양이 많거나 어려운 경우에는 지원자가 빠르게 포기해버릴 수도 있다고 생각합니다.

 


컬쳐핏 면접 + 지원자의 질문

컬쳐핏 면접

2차면접에서는 대부분 컬쳐핏 면접을 진행합니다.

개인적으로 컬쳐핏 면접은 ‘잘봤다/못봤다’의 개념이 없다고 생각합니다. 서류전형이 소개팅, 1차면접이 애프터라면, 컬쳐핏 면접은 사귈까 말까를 결정하는 과정이라고 생각합니다. 회사측에서만 ‘우리 인재상이랑 잘 맞네요 오십시오!’가 아니라, 지원자 측에서도 ‘제가 딱 원했던 회사네요, 받아주십시오!’도 함께 오가야한다고 생각합니다.

그런면에서 저는 컬쳐핏 면접에서는 제가 물어볼 질문들을 미리 준비해가고, 면접자분들이 질문하시는 만큼 역으로 면접자분들께 질문을 하는 편입니다. 이와 관련된 좋은 아티클이 있습니다. 지원자와 면접관이 서로에게 질문을 하고 핏이 잘 맞을 것 같다고 좋은 느낌이 오면 면접 분위기도 되게 화기애애해집니다.

제가 합격했던 면접의 분위기는 굉장히 화기애애했고, 이런 느낌으로 흘러갔습니다. (끄덕 -> 끄덕)

 

여러 컬쳐핏 면접을 거치면서 좋았던 점과 실망스러웠던 점들을 정리했습니다.

그 다음은 좋았던 컬쳐핏 면접 입니다.

좋았던 컬쳐핏 면접에서는 다음과 같은 여러가지 특징이 있습니다.

첫번째로는 지원자의 성격과 습관등을 파악하려는 질문을 여러번 하는 것 입니다.

  • ‘지원자분은 팀에서 어떤 역할을 하고 있나요?’
  • ‘지원자분은 어떤 타입의 사람과 잘 맞나요?’
  • ‘어떤 작업을 했을 때 가장 뿌듯한가요?’
  • ‘가장 피하고 싶은 작업이 있나요?’

위와 같은 질문들은 지원자로써도 ‘회사 측에서 뽑고싶어하는 인재상이 정확히 있구나’ 라는 인상을 주게 되며, 그만큼 합격했을 경우 잘 맞는 팀이 될거라는 기대감이 생깁니다.

두번째로는 지원자가 회사에 바라는 점을 물어보는 것 입니다.

  • ‘지원자분은 어떤 회사가 좋은 회사라고 생각하시나요?’
  • ‘커리어 목표가 어떻게 되시나요?’
  • ‘우리에게 기대하는 점은 어떤 것이 있나요?’

위와 같은 질문들은 지원자 입장에서는 회사가 직원들이 업무에 집중하는데에 서포트를 잘 해주고 함께 롱런할 수 있을 것이라는 느낌을 받습니다.

가장 실망스러웠던 것은 이미 1차면접에서 물어본 질문을 또 물어보시는 경우였습니다.

  • ‘왜 저희회사에 지원하셨나요?’ (1차 면접에서 물어봄)
  • ‘본인의 장점/단점이 뭐라고 생각하세요?’ (1차 면접에서 물어봄)
  • ‘프로젝트 설명 좀 부탁드릴게요’ (1차 면접에서 물어봄)

위와 같은 질문을 또 다시 받았을 때, 지원자는 회사 내부에서 1차면접에 대한 협의가 전혀 없었던걸까, 하고 생각하게 합니다. 똑같은 질문을 물어볼꺼면 왜 또 부른건지 시간이 아깝다고 느껴지게 됩니다. 당연히 회사에 대한 평가는 좋지 않습니다.

형식적인 질문만 2~3개 물어보고 ‘저희 회사에 궁금한거 없으신가요?’와 같이 빠르게 면접을 끝낼 때도 실망스러운 인상이 남습니다. 이미 내부적으로 결정이 난 것 같은데 본인을 왜 또 부른 것일까, 하는 생각이 들게 됩니다.

 

지원자의 질문

컬쳐핏 면접에서는 회사->지원자 방향의 질문도 있고, 지원자->회사의 방향으로도 질문을 하게 됩니다.

회사 측에서 지원자로부터 질문을 받았을 때 자신있는 답변을 하실 때 지원자도 회사에 대해 신뢰를 가지게 됩니다.

면접이 끝날 때 쯤 보통 ‘질문있으신가요?‘라고 물어보시는데, 저는 스타트업이나 중견기업/계열사 면접에는 꼭 미리 준비해간 질문 리스트를 보여드렸습니다. 질문 리스트를 보여드릴 때 리액션이 많이 다양했습니다 - 놀라시거나, 대놓고 싫어하시거나, 흥미롭게 보시는 면접관님들이 계셨습니다. 제 질문 리스트에는 다음과 같은 질문들이 항상 있었습니다.

  • 제가 들어가면 어떤 직무를 맡게 될까요? 가장 빠른 마일스톤이 언제일까요? 제게는 어떤 기대를 하시나요?
  • 팀 내 업무 스타일은 어떻게 되나요? 방향을 제시해주시는 시니어가 계시나요? 아니면 모두가 직접 책임을 가지고 작업을 진행하나요?
  • 팀에서 형상관리는 어떻게 하시나요? CI/CD가 있나요? 코드리뷰는 어떻게 하시나요?
  • 회사에서 시리즈 A/B/C/IPO 투자/상장 계획은 어떻게 되시나요?

이러한 질문을 함으로써 지원자는 본인이 생각했던 회사의 이미지와 실제 회사의 모습이 일치한지 평가하게 됩니다. 생각했던 모습과 일치할수도 있고, 다를 수도 있습니다. 하지만 다르다는건 항상 나쁜게 아닙니다. 물론 지원자 입장에서는 회사측에서 자신감있게 다 갖춰져있다고 말씀해주시는게 제일 좋겠지만, 몇개씩은 없어도 사실 이해해줄 수 있습니다. 작은 사업체에서 CI/CD 인프라가 부족하다던지, 신생 팀이라서 업무 스타일이 확립이 안됬다던지, 시니어가 아직 없다던지의 상황은 충분히 상정 가능한 부분입니다.

이 과정에서 제일 중요한 부분은 지원자가 ‘내가 여기에 입사해도 잘 적응할 수 있을까?’ 를 판단하는 것이며, 이는 회사의 입장에서도 사실 매우 중요한 요소일 겁니다 (적응하지 못하면 몇달만에 나가버리니까요).

 

위와 같은 질문들에 회사는 여러가지 방법으로 대답을 할 수 있습니다.

  • 솔직하게 좋은 점 + 부족한 점 다 이야기하기
  • 좋은 점만 보여주기
  • 좋은 점을 부풀려서 보여주기
  • 기밀이라고 이야기하기
  • 질문에 대해 거부감을 표시하기

우선 제일 나쁜 신호는 ‘질문에 대해 거부감을 표시하는 것‘ 입니다. 지원자에게 이러한 모습은 ‘너는 질문하지 말고 일만 하면 돼’ 라는 느낌을 주며, 실제로 이런 태도를 보이는 곳들도 있습니다.

그 다음으로 나쁜 신호는 ‘좋은 점을 부풀려서 보여주기‘ 입니다. 면접관들도 지원자들이 어떠한 내용을 제대로 이해하지 못하는데 아는척 대답하는것을 싫어하듯이, 지원자들도 회사측에서 없는데 있는척 하는 것을 보는 것을 굉장히 싫어합니다.

제 경험 중, 들어가면 할 업무도 기밀이라 말 못해주고, 마일스톤도 기밀, 형상관리와 코드리뷰는 ‘잘 하고 있다’라고 답변해주신 기업은 좋은 인상을 남기지 못했습니다. 회사 전략 상 기밀이 있을 수 있다는 점은 이해하지만, 지원자의 입장에서 지원하려는 직무가 어떤 직무인지 알 수 없다면 아무도 지원하려고 하지 않을 것 입니다 😅

 

제가 받았던 답변 중 가장 좋은 인상을 남긴 답변은 다음과 같습니다. 솔직하게 좋은점과 부족한 점을 이야기하면서, 부족한 점을 어떻게 보완해나가겠다, 라는 점을 이야기하였습니다.

  • 입사하면 팀의 X번째 멤버일 것이다. 솔직히 말하면 팀이 생긴지 얼마 안되서 인프라도 아직 없고 시니어도 현재 채용중이다. 초반에는 어쩔수없이 업무가 다양할 수 있지만 최대한 빠르게 코어개발로 이끌어주겠다.
  • 업무 스타일은 ‘기한과 퀄리티를 중요시 여긴다. 그것만 지킨다면 그 외로는 걱정할 것 없게 지원해주는 편’
  • 형상관리/코드리뷰 방식은 팀바이팀이지만, 대부분 Git과 Github로 진행함. 기본적인 CI/CD 인프라는 있으며 필요에따라 확장 가능.
  • XXX년까지 AAA,BBB,CCC 제품을 만들 예정이며 그 후의 계획도 세워져있음. 회사는 계속 성장중이고, XXX년에 YYY한 투자/상장을 할 수 있을 것이라고 예상

이런 답변은 듣는 동시에 ‘잘부탁드립니다!’ 시전 + ‘입사일은 언제가 좋지’를 고민하게 됩니다

 


합격 목걸이 + 최종결정

총 11곳의 리스트를 만들었지만, 7곳의 결과를 보았을 때 결정을 내리게 되었습니다.

결정을 내렸을 때의 상황은 다음과 같습니다.

  • 스타트업 3곳에서 오퍼 제안
  • 대기업 S사 서류탈락, (중견기업/계열사의 문화를 가진) 스타트업 1곳에서 구현과제 후 탈락
  • 대기업 L사 서류+인성검사+코딩테스트+1차면접 합격 (최종 면접 진행 중 이직 결정으로 인해 추가진행 없음), 스타트업 1곳에서 오퍼레터 수령 후 조정 불발

감사하게도 저를 쓸모있게 봐주신 3곳의 회사로부터 오퍼를 받았으며, 총 7전 3승 2패 2무의 결과가 나왔습니다.

SLAM 톡방에서 저를 봐오신 분들이라면 ‘맨날 입에 달고 살던 N사의 연구실은?’이라고 하실 수도 있겠지만 그곳은 계속 꿈만 꾸다가 스케줄이 맞지않아 지원하지도 못했습니다 😅ㅋㅋ

 

최종 결정은 생각보다 쉽게 진행되었습니다.

이 3곳의 회사들은 각각 다른 필드와 규모를 가졌고 장/단점이 극명하게 갈렸습니다.

하지만 장점만 보았을 때는 한곳이 특출나게 눈에 띄는 곳이 있었습니다. 장점들은 다음과 같습니다.

  • 독보적인 기술력
    • ‘오 잘하네’가 아니라 ‘이게 된다고?’를 말하게 하는 기술력
  • 흥미로운 제품 아이템
    • 국내 유일? 글로벌 경쟁사는 엄청난 곳이지만… 그래도 기술력 덕분에 비벼볼만하다는 생각이 들음
    • 커리어 방향과 궁합이 잘 맞음
  • 훌륭한 리더쉽 평가
    • 충성충성!

장점은 모두가 만드는 것이기 때문에 쉽게 만들기 어려운 것이고, 단점이 있다면 내가 고치면 된다고 생각합니다 (근데 면접 과정 중에 딱히 단점이랄것도 없었습니다!).

커리어 방향과도 잘 맞고, 제품 아이템도 멋지게 성공할 것 같은 가능성이 보이기 때문에 쉽게 결정할 수 있었습니다.

필드는 위에서 목표했던 자율주행 필드입니다.

최종 결정한 회사에서는 오퍼레터를 보내주시기보다는 희망처우를 먼저 물어보셨는데… 저는 연봉협상 이런거 잘 할줄 몰라서 다른 오퍼레터들에서 제안하신거보다 티끌만큼만 얹어서 말씀드렸습니다.

그랬더니 거의 딱 그 내용으로 오퍼레터가 와서 받자마자 5분만에 ‘저 갈게요!!!!’를 외쳤습니다 ㅋㅋㅋ

 


마치며

이렇게 지난 몇달간의 이직을 위한 몸부림에 대해 말씀드렸습니다. 다른 분들에 비해 적은 수의 경험만 가지고 말한 감이 있어서 조금 조심스럽기도 합니다. 아무쪼록 긴 글인데 읽어주셔서 감사합니다! 😸

이번 해 1~3월에 이직하는 것을 꿈꿨는데, 생각보다 준비할 것도 많았고 난이도도 높다는 것을 느꼈습니다. 하지만 이 과정 속에서도 많이 성장했다고 생각합니다.

SLAM 업계가 생각보다 엄청나게 빠른 속도로 성장하고 있다는 것도 느꼈고, 여기에 맞춰서 나 역시 뒤쳐지지 말고 빠르게 성장해나가야겠다는 생각도 듭니다.

2021년 이직을 준비하시는 분들께서도 좋은 운이 깃드시길 바라고, 또 독보적이고, 미래적이고, 멋진 SLAM을 하고 싶으신 분들은 제게 연락부탁주셔요! 함께해요!!