[자율주행] 프로그래머스 자율주행 데브코스 3기: 지원 및 합격 수기

한은기·2022년 1월 28일
3

Autonomous Vehicle

목록 보기
2/3

프로그래머스의 다른 수기는 많은데 유독 자율주행 데브코스 수기는 없어 적어본다.

😀 지원 동기

필자가 적을 두고 있는 '조선해양공학과'에서 Autonomous Vehicle 기술은 '자율운항'이다. 즉, 배를 움직이는 기술이다. 그러나 배든 자동차든 혹은 비행기나 드론이든, 인지-판단-제어라는 틀과 그 안에 들어가는 기술들은 거의 흡사하다. 특히 인지 부분은 똑같다고 볼 수 있다. 그래서 자율운항 기술을 공부하며 자율주행 파트를 많이 참고한다.

프로그래머스(programmers)는 코딩테스트, 개발자 구인구직, 개발 강의 등으로 유명했고 필자 역시 종종 사용하고 있었는데, 특히 부스트캠프 같은 dev코스가 탐이 났다. 몇 달 전 인공지능에 지대한 관심을 가지고 있는 필자는 인공지능 코스를 지원하려 지원서까지 썼다가 개인적 사정으로 지원하지 못했다. 그러나 이번에 자율주행 데브코스 3기가 시작한다는 알림을 받고 바로 지원서를 작성하기 시작했다. 지금 당장 필요한 기술은 인공지능보단 자율주행에 가깝기 때문에 망설이지 않았다. 게다가 2022년 1학기에 휴식 및 요양 차 휴학을 할 예정이었는데 딱 그 기간에도 맞았고, 바뀐 내일배움카드 정책으로 4학년 뿐만 아니라 3학년도 국비지원 교육 신청이 가능해졌다.

해당 코스의 정보는 아래 사이트에서 직접 확인할 수 있다.

사실 접수까지 일사천리였던 것은 아니다. 작년에 이어 2022년에도 자율운항경진대회(KABOAT)에 참가할 예정이었고, 올해는 작년보다 더 큰 책임과 역할을 맡았다. 대회가 코스와 동시에 진행되다보니 일반 학기를 다니며 대회를 준비할 때보다 훨씬 심적&신체적 부담이 심할 것이 자명했다. 쉬며 몸을 회복하기 위해 휴학을 했는데 더욱 혹사시키는 격이 아닐까 걱정이 되었다.

그러나 아래와 같은 이유들이 기꺼이 이 코스에 지원하게 만들었다.

  • 국내에 자율주행을 다루는 체계적 교육자료가 많지 않다. 거의 이 코스가 유일할 정도.
    • 가끔 K-MOOC, 코세라 등에 자율주행 강의가 꽤 올라오지만, 그것은 지극히 이론적 내용에 불과하다. 직접 구현하고 커스터마이징해서 실력을 기르는 것은 불가능에 가까웠다.
    • 외국 자료를 참고하려 해도 마찬가지이다. 하나의 질문을 해결하려 해도 하루가 걸리면 그나마 다행인 격이다.
    • 필자의 학교를 비롯해 국내 몇몇 학교에서는 자율주행차 관련 학과까지 개설하고 있으나 연계전공, 편입 등을 고려하기엔 메리트가 없거나 허황된 소리였다. 이미 3학년인데.
  • 이번 3기 코스는 인지(Perception), 그 중에서도 카메라를 중점적으로 다룬다.
    • 작년 KABOAT 대회를 준비하며 가장 아쉬웠던 부분 중 하나가 카메라였다.
    • 단순히 이미지 학습을 시키고, boundingbox 데이터로 도킹 미션을 수행했기에 아쉬움이 컸다. 이미지 인식은 딥러닝의 주축이고, 딥러닝을 깊게 공부하고 연구하고자 하는 필자는 그 공부를 해보지 못한 것이 특히 안타까웠다.
    • 자율주행 기술에서는 자율운항보다 인지해야 할 것이 특히 많은데, 차선이나 사람, 주변 지형지물 등이 있다. 그래서 자율운항 쪽보다 카메라 인지 부분이 많이 발달해 배울 것도 많을 것 같다.
    • 잘만 배운다면 이번 KABOAT 대회의 도킹 미션에도 배운 것을 적용할 수 있을지 모른다.
  • PID 제어 외 제어 기법 및 경로 설정 & 장애물 회피 기법을 더 깊게 공부할 수 있다.
    • 아무리 인지에 집중을 한다 해도 판단, 제어 쪽도 다룰 것이다. 아직 제어 경험이 부족한 필자로서는 PWM, GND 제어 등 개념과 활용을 해볼 좋은 기회이다.
    • A, RRT 등 경로 설정 알고리즘과 장애물 회피 알고리즘 등 구체적으로 어떠한 것이 있고, 이론이 아닌 실제에 어떻게 적용되는지 알아볼 수 있을 것 같다.
  • 실습의 기회가 있다.
    • 단순 비대면 강의가 아닌, 오프라인 교육이 있어 미니카로 실습을 할 수 있다.
    • 작년 자율운항 대회를 겪으며 느꼈던 바지만, 테스트는 매우 중요하다. 개발을 아무리 잘 해놓아도 테스트 없이는 어디가 어떻게 잘못되었는지 알 수 없다. 완벽한 코드는 없다. 1의 시간을 개발에 쓴다면 테스트에 9를 써야 한다.
    • 그런 의미에서 실제적 경험과 지식을 쌓기 좋을 것이다.

🤔 선발 과정

절차는 '지원서 접수' - '코딩테스트' - '면접'으로 이루어져 있다.

(1) 지원서 접수

지원서 문항은 코스 소개란에 이미 나와있었다.

  • 지금까지 프로그래밍 공부를 어떻게 했고, 과정에 참여해서는 어떻게 공부를 할 계획인지 알려주세요.
  • 자율주행 분야로 진출하고자 하는 이유가 무엇인가요? 명확한 신청 동기가 궁금해요.
  • 자율주행과 관련하여 학습 또는 프로젝트 경험이 있다면 알려주세요.
  • 나의 장단점을 자유롭게 이야기해주세요.

딥러닝 코스의 지원서를 써본 바, 문항은 거의 유사했다.

필자가 중점적으로 어필하고 싶었던 것은 두 가지였다. 첫째, 자율주행(운항)의 실제적 경험이 있다는 것. 둘째, 성실하고 겸손하게 배우는 태도를 가지고 있다는 것.

작년 1년동안 필자의 몸집만한 배를 움직이기 위해 고군분투하며 배운 지식, 노하우, 경험들이 꽤 많았다. 학부생 수준에서 쉬이 할 수 없는 경험들임에는 확실했으며, 해당 코스에서 배우는 내용들과 상당 부분이 같다. 하여 이해도와 관심도를 어필하고자 했다. 또한 학부 교과에서 자율주행차 프로젝트 수업도 들은 바가 있어 차에 대한 경험도 있었다. 그 역시 언급 대상이었다.

사실 필자는 Python, C++, ROS 등 코스에서 배울 기본적 내용들은 알고 있다. 어떻게 시스템이 돌아가는지부터 어떤 부분을 유의해야 하는지 대강이라도 알고 있다. 하여 '자랑'보다는 '사실 및 느낀점 나열'에 집중하려 했다. 그리고 '내가 모르는 것을 찾아내겠다는 마음가짐'으로 임하겠다 적었다. 이는 블로그를 적으며 느꼈던 바와 같은데, 알고 있다 생각한 내용도 다른 사람에게 가르쳐주려 적거나 말하다보면 빈 구멍이 송송 뚫려있음을 깨닫게 된다. 그래서 항상 '겸손해야 한다'고 되새기고 있다.

(2) 코딩테스트

코딩테스트는 두 가지 언어, C++과 Python으로 진행되었다.

필자는 개인적으로 C++로 테스트를 하는 것이 매우 바람직하다 생각했다. 작년 내내 느꼈지만, 로봇프로그래밍에 C++은 필수였다. 특히 조금씩 고급과정으로 갈 수록 Python 보다는 C++이 대부분이며, ROS의 공식 문서인 ROS Wiki에도 대부분 C++로 예시 작성이 되어 있다. C++은 Python보다 복잡하고 어렵지만 그만큼 빠르고 객체 지향 프로그래밍 관련 기능 구현이 유연한 것으로 알고 있다. 그리고 가깝게는 깃허브 패키지 등이 거의 다 C++로 되어 있어 이를 해석하거나 이용하려면 C++ 실력은 필수다.

하여 이 참에 많이 감을 잃은 C++도 공부하고, 자료구조와 알고리즘도 공부할 겸 코딩테스트를 준비했다.

보통 코딩 테스트는 '어떤 입력에 대해 어떤 출력을 내기 위한 함수'를 만들어내는 과정이며, 종이과 펜이 필수일 정도로 문제 풀이에 가깝다. 반대로 생각하면 정렬이나 탐색 등 기본적 알고리즘에 드는 시간을 줄여야 한다는 뜻도 된다. 하여 아래와 같은 도서와 강의를 참고하며 준비하려 했다. 물론 대회 준비로 이 공부는 거의 못했다...

사전에 안내된 대로, 프로그래머스 코딩테스트 탭에서 C++은 Level1, Python은 Level2 문제 위주로 연습했다. 그 과정에서 다른 사람들의 풀이를 꼼꼼히 보며 어떤 점을 배워야 할지 연구했고, Level2는 특히 시간 효율성을 통과하도록 불필요한 반복을 줄이는 방법을 탐구했다.

실제 문제는 3시간에 3문제였다. 난이도가 상당했다....! 한 시간에 한 문제 꼴이었지만 Level1이라는 C++ 문제도 100점으로 통과하지 못하고 92점이었다. 나머지 Python 문제는 20점대였다. 예시 입출력은 통과하였으나 채점 입출력에서 매번 오답이 떴다. 왜 그런지 알 수가 없어 어딜 어떻게 고쳐야 할지 고민하다 시간이 많이 간 듯하다.

(3) 면접

사실 점수를 받고 '분명 탈락이다'라고 생각하고 휴학 기간동안 뭘 어떻게 공부해야 할지 계획이나 세우고 있었다. 그러나 떡하고 코딩테스트 합격 메일이 날아와 심히 당황하고 부랴부랴 면접 준비를 했다.

지원서를 다시 읽으며 지원서 질문에 살을 붙여 답변을 준비했다. 또한 유튜브에 코스 설명회가 있었는데 해당 설명회를 들으며 '나에게 이것이 어째서 필요하다' 등을 메모했다. 또한 자신의 경험과 그로부터 깨달음, 앞으로의 계획 등까지 간단히 정리해두었다.

면접은 면접관 1, 면접자(지원자) 4명으로 구성되는데 우리 조는 한 분이 참석하지 않으셔서 1:3으로 Zoom을 이용한 비대면 면접을 보았다. 총 한 시간이었고 한 질문에 돌아가며 답을 하는 식이었다. 시작 직전에는 긴장을 했는데, 막상 카메라를 켜고 나니 별로 긴장이 되지 않아 대체적으로 술술 답변한 듯했다. 무엇보다 모든 질문마다 해야할 말, 이미 가지고 있던 가치관 등이 있었던 덕이었다.

생각나는 질문들은 아래와 같다.

  • 자기 소개 및 자율주행 데브 코스에 지원한 이유
  • 커리큘럼 중 흥미가 가는, 혹은 어려울 것 같은 내용
  • 희망하는 회사나 직군
  • 자유롭게 하고 싶은 말

면접을 준비해본 사람이라면 생각해볼만한 질문들이다. 4기, 혹은 그 이후에 지원할 사람들은 너무 큰 부담을 갖지 않아도 될 듯하다. 더구나 면접관님께서도 스몰토크로 지원자들의 긴장을 풀어주시려 하기 때문에 편안하게 임하여 하고픈 말을 마음껏 하는 게 중요하다!


😎 최종 합격

친구와 인천 여행을 하는 도중 합격 메일을 받았다.

주변 사람들은 '그럴 줄 알았다'며 축하해주었고, 필자는 '이제 살인적인 스케줄만 남았구나'하고 만감이 교차했다. 2월 중순에 코스가 시작하니 그 전까지 남은 2-3주 동안 KABOAT 개발을 대강 완료해두어야 한다는 부담이 슬슬 더해지기 시작했다.

그래도 힘내보자. 6개월간 눈에 다크써클을 달고 살더라도 이만한 기회가 없다.

profile
🏫Inha Univ. Naval Architecture and Ocean Engineering & Computer Engineering (Undergraduate) / 🚢Autonomous Vehicles, 💡Machine Learning

0개의 댓글