Common Computer Summer Internship 후기

우현웅·2020년 9월 11일
6

2020.07 ~ 2020.08 까지 진행했던 common computer summer internship 후기를 남겨보려 한다.

인턴 지원 과정

커먼컴퓨터를 국민대 잡페어를 통해 알게 되었다. 다른 기업들보다 조건도 좋아보였고, 사내 프로덕트인 ainize가 서버를 무료 배포해준다는 것을 보고 스타트업이 이런 클라우드 서비스를 하는 것에 신기하여 관심을 가지던 도중, 커먼컴퓨터에서 인턴을 진행한 동기가 회사가 참 좋다고 추천해줘서 지원하게 되었다.

지원하자마자 바로 서류 통과가 되고 인턴 과제가 주어졌다. 서류는 기본적인 내용만 체크하는거 같았다. 인턴 과제는 Docker와 Kubenetes를 이용해서 RestAPI를 배포하는 것이었다. 주제는 챗봇이었는데, 학습된 오픈 소스 챗봇을 가져다 써도 좋고, 단순한 if-else 챗봇을 만들어도 좋다 하셨다. 챗봇이 중점이 아니라 API 서버 배포에 중점을 둔 것 같았다.

도커와 쿠버네티스가 처음이라 구글링부터 시작했다. 도커와 쿠버네티스는 무엇인지, 왜 사용하는건지… 를 봐도 사용법이 머리에 정확하게 꽂혀 들어오지는 않았다. 단지 '쿠버네티스는 도커를 기반으로 돌아간다는 것만 이해를 하고, 그래서 두 개를 같이 쓰라하는 거군…' 이라는 생각이 들었다. 과제를 하기 위해서 간단한 사용법을 열심히 구글링해서 if-else로 구성한 챗봇 API서버를 배포하는데 성공했다. (감사합니다 대협!) 과제 완료 이메일을 보내자마자 1시간만에 합격 통보를 받게 되었고, 그렇게 난 커먼컴퓨터 하계 인턴이 되었다.

꺄아아악...!

첫 출근 🖥️

첫 출근날, 10시 출근인데 9시에 도착해서 회사 앞 편의점에서 시간을 떼우다 들어갔다. 근데 들어가니 이미 인턴 분들과 회사 분들이 거의 다 와 계셨다 😭 모두 출근해서 회사 건물에 출입을 위한 얼굴 등록을 하고, 맥북을 지급받고(!!!), 사내 이메일, 슬랙, 노션에 가입했다. 회사에 처음 온 사람들을 위한 사내 문서가 있었는데, 그걸 읽으면서 회사의 문화나 목적에 대해 어렴풋이 알 수 있었다 (그리고 문서가 모두 영어로 되어 있어서 굉장히 회사가 있어보였다 🤭). 그 뒤로 우리가 어떤 일을 하게 될지 소개받았다.

인턴들이 하게 될 일은 단순 명료했다. ML 오픈 소스 프로젝트를 찾아 ainize에 API 서버 형태로 배포하는 것. 2개월 동안 최소 5개의 프로젝트가 배포되었으면 좋겠다고 하셨다. 물론 퀄리티를 챙기면서. 그 후 ainize란 무엇인지 ainize에 배포는 어떻게 하는지 설명을 듣고, ainize tutorial 등을 따라하며 감을 익혔다. 첫날은 tutorial도 다 하지 못했지만, 정신없이 지나갔던 날이었다.

Ainize

Ainize는 커먼 컴퓨터의 serverless cloud computing service이다. 쉽게 이야기하자면 AWS처럼 내 코드를 배포할 수 있는 플랫폼이라고 생각하면 좋겠다. 인턴 기간동안 ainize에 총 5개의 프로젝트를 배포 하였고, 그 과정 속에서 배운 것들을 크게 구분하자면 총 3가지이다.

  1. Docker
  2. 간단한 Web
  3. Open source 생태계
2개월 동안 컴컴에서 진행한 일들!

일단, ainize에 배포하기 위해서는 Dockerfile이 필요하다. 프로젝트 내에 있는 Dockerfile로 이미지를 빌드하고, 이를 배포하기 때문에 Docker container 환경에서 서버를 배포하는 것이 좋다. 이를 위해 Dockerfile 작성과 build, run, pull, push 등의 명령어는 아주 익숙해진 것 같다. 처음에 dockerfile 작성에 대해서 아주 많은 두려움이 있었는데 (이해를 전혀 못해서) 인턴 초반에 회사 내에서 이루어진 Docker tutorial 세미나 를 통해서 Dockerfile 작성법과 기초적인 사용법들을 제대로 배울 수 있었다. 사실 이 Docker tutorial이 주간 회의에서 윤기님이 Docker tutorial 세미나를 여시겠다고 제안해주셨다(우리를 위해!). 시간을 내주셔서 세미나까지 진행해주시는 점이 너무 감사했다.

두번째로는 간단한 web이다. API서버와 함께 이를 이용할 수 있는 Demo 페이지를 만들어야 했는데, 점점 욕심이 나거나 필요에 의해 여러 가지 기능을 추가 해야했다. 가장 기억에 남고 힘들었던 건 generative-inpainting 프로젝트를 할 때 였는데, 프로젝트가 input으로 2장의 사진을 요구했다. 하나는 지우고 싶은 부분은 white marking한 사진, 나머지 하나는 투명 배경에 white marking만 있는 사진. 첫번째 사진은 솔직히 쉽게 할 수 있지만, 두번째 사진은 사용자가 쉽게 구할 수가 없어서 Demo페이지에서 이 부분을 만들어주어야 했다. 그래서 front 부분에 그림판 기능을 추가했는데, 별거 아닌거 같아도 처음 시작할 때는 조금 막막했다. 하지만 구글링 하면서 구현하니까 그렇게 로직이 어렵지도 않고 자신감도 생겼다.

히히 그림판 성능은 쓸만하다!

서버 부분에서도 처음에 어려움을 겪었던 부분이 있는데, 바로 traffic handling 부분 이었다. 학생 때 하던 프로젝트들은 일단 돌아가기만 하면 OK 였는데, 회사에선 돌아가는 것 뿐만 아니라 사람들이 많이 와도 죽지 않는 서버를 제공하는것도 중요하다고 강조했다. 그래서 요청이 많으면 429 처리를 해주어야 했는데, 이를 위해서 Queue를 통해서 request관리를 했고 이를 테스트하기 위해 locust를 이용하여 load test를 진행 했다. Queue를 이용하면서 threading을 사용해야 했는데, 사실 Threading에 대한 개념이 명확하지 않았고 써본적이 없었기 때문에 공부하는데 어려움이 있었다. 하지만 예시 코드도 보여주시면서 잘 알려주셔서 무사히 Queue 작업을 마친 기억이 난다.

locust를 이용한 load test

마지막으로는 오픈 소스 생태계에 전보다 많이 익숙해졌다. 일단 오픈 소스를 찾아서 API서버로 배포해야하는 일이기 때문에, 오픈 소스를 분석하고 가공 해야 했고 성능이 좋아도 단박에 돌아가는 일은 없었기에 이를 위해서 의존성 관리나 코드 일부를 수정 해야했다. 처음에는 다른 사람의 코드를 보고 분석하는게 어렵고 두렵게 느껴졌는데, 읽고 분석하다 보니 할만하다고 느껴졌다 (물론 핵심적인 부분은 이해하지 못했다 ). 또 프로젝트를 진행하면서 발생하는 문제를 구글링만 하는 것이 아니라, issue란을 보면서 프로젝트를 좀 더 이해하며 문제를 해결할 수 있었다. 한번은 문제 해결을 위해 직접 issue를 남겨 원작자와의 소통을 통해 문제를 해결한 경험이 있다. 다른 인턴분은 완성한 demo 페이지를 원작자에게 PR을 보내서, 원작 Repo README에 Demo 로 실리기도 했다. ainizers 활동의 매력 중 하나는 이런 오픈 소스 생태계에 익숙해지며 나도 기여할 수 있다는 자신감이 생긴다는 것 같다.

issue를 남겨 에러를 해결했다. Demo list에 ainize를 올리신 분도 계심!

나도 Comcomer

그 외에도 다양한 회사 내 행사나 회의에 참여할 수 있어서 좋았던 것같다. 매주 이루어지는 Comcom weekly에서는 인턴들도 다같이 참여하여 회사에 대해 좀 더 이해하고 다른 분들이 어떤 일을 하고 있는지 알 수 있었고 직원 분들이 어떻게 일 하는지도 배울 수 있었다. 격주로 목요일 마다 하는 Eng-Tech Talk에서는 엔지니어 분들이 주제를 하나 씩 선정하셔서 간단한 발표를 해주셨다. 몰랐던 주제들도 많았고, 좀 더 CS 지식에 관심을 가져야겠다 고 생각이 들었다.

컴컴에서 가장 큰 장점은 슬랙 이나 노션, 주간 회의 등을 통해서 서로 무엇을 하고 있는지 소통하여 모든 멤버가 어느 정도는 회사의 진행 상황을 알 수 있던 점이었다. 나는 ainizers로서 단순히 프로젝트 배포만 하기 때문에 다른 부분은 몰라도 되지만, 직원의 입장에서는 이러한 점들이 회사에 좀 더 애착을 갖게 하고 원활한 업무를 도와주는 요소인 것 같다.

또 Docker tutorial 세미나를 들은 다음주에 이노베이션 아카데미에서 윤기님, 민호님이 하시는 Docker 및 Ainize tutorial에 실습 보조로 가게 되었는데, 막상 그런 곳을 가니까 커먼 컴퓨터에 소속감을 느낄 수 있어서 좋았던 것 같다. 지난주에 배운 내용을 바로 다음주에 도와주려니까 부족한 부분은 없지않아 있었지만 내 자신은 나름대로 복습도 되고, 다른 수강생분들의 질문을 들으면서 생각지도 못했던 부분을 오히려 배워가기도 했다.

Comcom server account creator

인턴 막바지에 민호님의 요청으로 ansible을 이용해서 회사 내 서버 계정 생성기를 만들게 되었다. 여태까지 ainize만 하다가, 처음으로 다른 개발을 하게 되어서 기분이 묘했는데 사실 ainize할 프로젝트도 찾기 힘든 상황이어서 아주 좋았다. 처음에 ansible을 아예 몰라서 찾아보는데, 이런 것도 있구나 라는 생각이 제일 먼저 들었다. 서버를 사용해보는 것도 이번이 처음이라서 여러 대의 서버를 관리해야 한다는 상황을 생각해보지 못했기 때문인 것 같다. 만들기 전에 민호님이 개발에 필요할 것 같은 키워드들을 전부 주셔서 삽질한 것 치고는 빠르게 만든 것 같다. 계정 생성 서버를 만들고 나서 이를 관리하고 손쉽게 알림을 받기 위해서 slack webhook을 사용해서 슬랙 채널과 연동시켰다. 만들고 나서 품질에 대해서는 사실 자신이 없었는데, 민호님이 정말 고마워하시고 실제로 사용하시는 거 같아서 뿌듯한 마음이 들었다.

최종 발표

인턴 마지막날, 최종 발표 시간을 가졌다. 나는 주로 프로젝트를 하면서 든 나의 생각이나 느낀점을 위주로 발표했다. (프로젝트에 대한 설명은 이미 weekly때 많이 했기 때문) 최종 발표는 행아웃을 이용해서 진행했는데, 생각보다 많은 분들이 들어와주셔서 감사했다 :) 뭔가 컴컴분들에게 기억에 남은 기분이었다. 발표 후에 수철님께서 사비로 마련하신 핑쿠핑쿠 키보드 증정식이 있었는데, 익명 투표를 통해 Best 인턴을 뽑아서 증정했다. 운이 좋게도 내가 Best인턴으로 뽑혀 키보드를 받게 되었다. 사실 프로젝트 퀄리티는 상일님이 압도적이었는데, 뭔가 느낀점을 주로 발표한 부분이나 인턴 생활동안 이쁘게 봐주셔서 뽑힌 것 같다. :)

2개월이 누군가는 길다고하고 누군가는 짧다고 하는 시간이겠지만, 적어도 나에게는 짧은 시간이었던 것 같다. 회사에 적응되니 떠나는 기분..? 내가 여러 회사를 경험해본 것은 아니지만 커먼 컴퓨터는 분명히 매력적인 회사인 것 같다. 자유롭고 유연한 근무 환경과 확실한 목표가 있는 회사가 흔치는 않을 것이다. 학생 때는 생각하지 못한 관점으로 일을 하면서 배운 것도 많았다. 운 좋게도 생각한 것 보다 더 좋은 회사에서 인턴십을 진행해서 이번 여름은 나에게 행운이었다.

Summer Internship 그 후...

운좋게도 인턴 4개월 더 연장하게 되어 핑쿠핑쿠 키보드와 함께 일을 하고있다. 앞으로 4개월동안 또 어떤 일을 하고 어떤 일이 생길지는 모르지만, 언제나 도움의 손길을 내밀어주시는 컴컴 분들과 함께라면 두렵지 않다 (찡긋)

profile
hello world는 잘쳐요

2개의 댓글

comment-user-thumbnail
2020년 9월 11일

우웅이 짱이다
캡스톤 팀원이 잘돼서 보기 좋구만

1개의 답글