본문으로 건너뛰기

2021 여름 래블업 인턴십 후기

· 약 13분
박태완

올해 6월부터 8월까지 8주동안 했던 래블업 인턴십 후기를 작성하고자 한다.

Internship 지원과정

3학년 1학기가 끝나가고 있었고, 다음 학기부터는 졸업작품을 준비해야 되는 시기가 왔다. 이번 방학 때 의미 있는 활동을 하고 싶어 고민하던 중, 페이스북에서 래블업 인턴십 공개채용 게시글을 보게 되었다.

Figure 1: 래블업 페이스북에 올라온 인턴 채용공고

채용공고를 읽고 나서 정말 놓치면 안되는 기회라고 생각했다. 이미 알고 있는 스타트기업 중 하나였고 우리 학교와 연계하여 진행하는 현장실습 기업들과 비교하였을때 인턴십 프로그램이 가장 알차다고 생각했다. 바로 지원서를 작성하게 되었다. 지원서는 주로 프로그래밍, 프로젝트 경험에 대한 문항이 많았다.

지원서를 제출한 후, 얼마 지나 면접 메일이 왔다. 일단 서류에 합격했다는 사실이 기뻤지만, 처음 보는 기술면접이라 걱정을 많이 했다. 어떤 부분을 준비해야할지 고민하던 끝에 결국 기술부분은 많이 준비하지 못하고, 지원서에서 작성한 프로그래밍 및 프로젝트 경험에 대한 부분을 준비하여 화상회의에 참가하였다.

면접은 다행히 프로그래밍 및 프로젝트 쪽을 많이 물어보셨다. CS 기술 질문도 하셨지만 많이 대답하지 못했다 ㅠㅠ. 지금 와서 꺼내는 얘기지만, 당시에 너무 당황해서 머리가 어지러웠고 진짜 쓰러지는줄 알았다. (지금 생각하면 어떻게 합격했는지 궁금하다)

면접이 끝나고 몇주 뒤, 종강을 하고 여름방학 계획을 세우던 중에 합격 메일을 받게 되어서 매우 기뻤다!! 인턴십 선호 시작일을 일주일 뒤로 정한 뒤, 일주일 동안 신나게 놀았다.

인턴 과제/생활

래블업 인턴십은 회사에서 각 분야별로 기초적인 작업을 해결해보는 부트캠프 과제를 1주 차에 진행하고, 나머지 주차에 본인이 더 경험해보고 싶었던 분야나 관심 있는 분야 쪽 작업/issue를 맡아 해결해보는 방식으로 진행되었다.

래블업의 핵심 플랫폼은 오픈소스이다! 따라서 인턴십 과제도 GitHub에서 공개적으로 이루어졌다.

Bootcamp Assignment

부트캠프 과제를 크게 요약하면 다음과 같다.

Backend.AI를 사용하는 방법을 익힌다 Backend.AI를 이용하여 머신러닝/딥러닝 모델을 학습시킨다 Backend.AI를 로컬에서 개발 가능한 환경으로 설치한다 Backend.AI는 래블업의 핵심 제품이다. 부트캠프 과제가 끝나면 실제 Backend.AI 쪽 개발 과제가 나갈 예정이였기에 해당 과제들은 완벽하게 해결하고 넘어가야 했다.

노트

각 이미지를 클릭하면 해당 PR로 넘어갑니다.

Backend.AI Webserver

부트캠프 과제가 끝난 후, Backend.AI 소스코드를 열심히 읽던 중 처음으로 맡게 된 good first issue였다. 웹서버가 잘 작동하고 있는지 확인할 수 있는 ping API를 추가하는 과제였다. Backend.AI의 웹서버는 aiohttp를 사용하기에, 다음과 같이 코드를 작성하였고, PR을 보낸 결과 추가 수정사항 없이 PR approval을 받을 수 있었다.

Backend.AI Agent

다음은 agent 쪽 issue를 맡았다. Backend.AI agent는 연산 노드에 설치되어 컨테이너들을 관리 및 제어하는 부분이다. 이번에는 Backend.AI agent에서 컨테이너를 생성 할 때, 컨테이너 PATH 환경 변수에 ~/.local/bin 경로가 항상 포함될 수 있게끔 만드는 과제였다. Backend.AI agent 쪽 방대한 양의 코드를 보고 처음에 어떻게 해야 할지 많이 당황했지만, CTO 김준기 님께서 ai.backend.kernel 쪽 BaseRunner 객체가 생성 될 때 실행되는 코드 부분을 살펴보면 된다는 힌트를 주셔서 성공적으로 해결할 수 있었다!

p.s. 이번 과제를 하면서 알아본 결과, ~/.local 폴더는 /usr/local 폴더와 같이 로컬이나 서드파티 패키지를 설치할 때 사용되나, /usr/local 이 모든 사용자 용인 반면, ~/.local 폴더는 단일 사용자 용이라고 한다. 특히 pip가 사용한다…! (물론 bin에는 executable들이 들어있다)

Backend.AI Manager

다음 과제는 이 PR을 리뷰하던 중 생긴 과제였다. 해당 PR은 가상 폴더에 alias를 설정하여 세션을 만들 수 있는 기능을 webui에 추가하는 PR이었는데, 리뷰하던 도중 alias 이름이 중복되어 들어가게끔 만드는 버그를 찾게 되었다. Webui 상에서 alias 이름이 중복되어 들어가게 되면 실제로 Backend.AI agent에서 세션이 만들어질 때 같은 디렉터리에 이름이 똑같은 폴더가 두 개 있을 수는 없으니 오류가 발생하여 정상적으로 작동하지 않게 된다. 물론 해당 부분은 패치해서 PR이 정상적으로 병합되었지만, Backend.AI manager 쪽에도 안전 코딩이 되어있으면 좋겠다는 의견이 모여 해당 건을 내가 맡게 되었다. 작업을 하면서 폴더 이름 중복 검증뿐만이 아니라 백포트 되면서 중복된 코드도 정리하여 PR을 보냈고, 성공적으로 PR이 병합되었다.

Backend.AI Test

마지막 과제는 다른 인턴과 함께 협업하는 특별한 과제였다. 다른 인턴분이 Backend.AI CLI 커맨드를 리팩토링을 하고, 나는 리팩토링 된 CLI 커맨드들을 이용하여 통합 시험(Integration Test)를 작성하는 역할을 맡았다. 각 커맨드에서 CRUD(Create-Read-Update-Delete)를 포함한 커맨드를 실행 후 정상적인 값 또는 결과가 나왔는지 확인하는 과정으로 테스트 케이스를 작성하였다. 생각보다 커맨드가 많아 작업하는데 시간이 예상보다 오래 걸렸지만, 그만큼 제일 뿌듯했다. 이렇게 한 사람이 커밋한 코드를 기반으로 동시에 다른 코드를 짰다는 점에서 색다른 경험이었다고 생각한다.

OKR Meeting

Figure 2: OKR Tracker

래블업 인턴들은 매주 한 번씩 OKR Meeting을 참석해야 한다. OKR Meeting 이란 이번 주에는 어디까지 했고 작업하면서 어떤 과정에서 막혔다, 그리고 그걸 어떻게 해결하였는지 정리하여 발표하는 Meeting이다. 또한 발표를 하게 되면 래블업 팀원분들이 각 작업에 대한 피드백을 해주신다. 피드백을 받으며 부족했던 부분을 채울 수 있었고, 다른 인턴들의 발표도 들으면서 담당하지 않은 다른 부분의 내용도 알 수 있어 유익했다.

인턴 후기

회사는 선릉역 5분 거리에 위치해 있다. 사무실이 많이 크지는 않지만, 다양한 복지시설이 존재한다. 스트레스 해소용으로 플레이할 수 있는 Xbox, 전자피아노 등이 있다. (Xbox에는 ultimate game pass가 구독되어 있다!) 근무 중 집중이 안 되거나 휴식이 필요할 때는 언제든지 와서 플레이할 수 있다.

회사는 엄청 자유로운 분위기이고 수평적인 커뮤니케이션을 지향한다. 다들 너무 친절하시고 질문도 잘 대답해 주신다. 덕분에 처음에 낯을 많이 가리지 않고 잘 적응할 수 있었던 것 같다.

매일 아침 10시에 All-hands Meeting을 통해 간단하게 다른 분들의 작업과 성과를 트래킹하고, 오늘 일정을 공유한다. 또한 래블업에서 진행되는 Meeting은 누구든 간에 참여가 가능하다. 인턴도 마찬가지로 다양한 Meeting에 참가하여 실무 지식을 쌓을 수 있기에 정말 좋은 문화라고 생각한다.

인턴십 기간 동안 다양한 과제를 수행하면서 점점 실무 작업에 가까워진다는 생각이 들었다. 아직 갈 길이 많이 남았지만, 간단한 issue부터 시작해서 여러 부분에서 회사 제품에 기여를 했다는 점이 뿌듯했다. 실무 과제들을 해결하는 과정에서 여러 문제들이 가로막았지만, 삽질을 통해 해결하는 과정에서 정말 많이 배웠다고 생각한다. 또한 Backend.AI의 코드는 이때까지 다뤄본 프로젝트 중에서 코드가 가장 많고 복잡하였는데, 이를 차례대로 해석하면서 어떻게 작동하는지 알아가니 성취감이 높았다.

회사에 출근하여 멘토 옆에서 다양한 경험을 쌓고 싶었으나, 안타깝게도 인턴십이 시작되자마자 사회적 거리 두기 단계가 4단계로 올라가 회사에 많이 못 가서 아쉬웠다.