2021 상반기 ICT 인턴 회고

흐짜짜! 🫒 올리브·2021년 6월 28일
0

지난 2월, ICT 인턴십에 지원했고, 코딩테스트와 면접을 거쳐 한 회사로부터 합격 소식을 들었다. 3월 2일부터 6월 21일까지, 약 16주의 시간동안 인턴십을 진행하였다.

지원하기

ICT 인턴십은 정보산업연합회에서 학교와 기업을 연계시켜주는 프로그램이다. 우리 학교가 이 프로그램에 참여하게 되었고, 나는 130여개 스타트업 중 세 곳을 골라 지원할 수 있었다. 프론트엔드나 백엔드에 대한 경험도 없고, 스킬도 없었기에 관심사가 맞는 곳을 지원하자 생각했다.

그래서 로보틱스 관련 회사 두 곳에 지원을 넣었다. 그리고 남은 하나의 카드. 기업 설명 속 사내 문화가 자유로워보이고, 평소 배워보고 싶었던 프론트엔드 직무를 해볼 수 있다고 해서 지원했다. 분명 Javascript가 주로 사용하는 언어라고 되어 있었다.

  1. Robotics
  2. Robotics
  3. Frontend! ✔

머신러닝이용?

하지만 내가 맡게 된 분야는 머신러닝이었다. 코테를 마치고 떨리는 마음으로 면접을 들어갔을 때 듣게 된 이야기는 머신러닝이었다. 사실 나는 머신러닝에 대해 경험이 별로 없었다. (어째 컴퓨터공학과 3년 학부생이 어떤 것에도 지원하기 쉽지 않네 라고 느꼈다)
지난 겨울 방학 때 학회 친구들과 작은 얼굴 인식 프로젝트를 진행한 것이 경험의 전부나 마찬가지였는데, 갑자기 머신러닝을 맡게 된 것이다.

그래서 조금 큰 일이었다.

  1. Robotics
  2. Robotics
  3. Frontend!

NO, Machine Learning! ✔

분류기를 만들어보자!

첫번째 프로젝트는 이미지 분류기를 만드는 것이었다.
공간에 대한 이미지를 입력 받아, 그 공간의 인테리어 스타일을 예측해주는 분류기였다.

지금 생각해보면 간단한 편에 속하는 이미지 분류기였는데, 나는

  • 파이썬
  • vscode
  • 머신러닝

이 모두가 처음이고 낯설어서 너무 어려운 프로젝트로 느껴졌다. 회사는 이론적 공부를 차근차근 쌓아서 올라가는 것이 아니라, 결과를 얼른 낼 수 있는 것을 원했다. 그래서 책을 구입하고, 퇴근 후에도 공부를 덧붙이며 프로젝트를 진행해 나갔다.

조금은 긴 시간이 걸렸지만, 모델을 완성할 수 있었다.

Room Style Classifier

  • 3월 2일 ~ 4월 12일, 약 한 달 반 가량 진행
  • aws ssh 환경, linux
  • python, tensorflow, flask
  • dataset : 회사 내 인테리어 팀이 핀터레트스틀 통해 구축한 Room Style img dataset 사용
    • 5 styles : 2010 imgs
    • 9 styles : 881 imgs
  • CNN 및 ResNet, EfficientNet을 이용한 전이학습을 통해 top2 accuracy 92% 달성 모델 개발 완료 (5 style classes)
  • 인테리어 박람회 등의 전시회에서 마케팅 용도의 기반 모델로 사용됨 참고1 참고2

원격 환경에서 결과를 쉽게 확인할 수 없어 처음엔 jupyter notebook을 사용하여 개발한 후, .py 파일로 리팩토링을 진행했다.
코드 리팩토링에 대해서도 처음 들었기에 그냥 하나의 파일에 때려 넣었다가, 좀 더 사용하고 이해하기 쉽도록 기능별로 3개의 모듈로 나누었다.

사수님께 코드 재사용성에 대한 이야기를 듣게 되었다.

회사의 거대한 프로그램 속 코드는 재사용될 가능성이 훨씬 높다.
따라서 다른 사람이 읽기 쉽게, 이해하기 쉽게 쓰는 것이 중요하다.
모듈을 따로 만들어 구현하면, 추후 관리 차원에서도 좋고, 이해하기 좋다.

모델 개발 후 마케팅 목적으로 사용하기 위해 flask를 이용해 간단한 데모 페이지를 만들어 달라고 하셨다. 웹..은 무지했기에 아주 간단한 데모 페이지를 만들 수밖에 없었고, 다른 개발자 분의 손을 거쳐 실제 전시에 사용될 수 있었다.
참고1 참고2

내가 개발한 코드가 직접 사용자에게 닿는 첫 경험이었고, 아주 저 먼 백엔드에 내 모델이 자리잡고 있지만, 뿌듯했다.
프론트엔드까지 잘 해낼 수 있었다면 더 좋았을 걸, 하는 아쉬움이 있었다.

그리고 전시에 대한 부분은 인턴의 위치에서는 여러모로 참여하기 어려워서 실제 사용자의 반응은 내 지인을 통해서만 확인할 수 있었다는 게, 참 아쉬웠다.
또, 전시에 사용될 때 나의 모델은 사수님의 손을 거쳐 조금 개선되었는데, 어쩐지 소통이 부족했던 나는 어떻게 개선되었는지 전달받지 못했다...
소통의 중요성을, 다시금 깨달았다.

사용자 경험 수집하기

회사는 3D 인테리어 에디터 프로그램을 운영하고 있었다. 개발 후 사용자의 경험을 통해 버그를 찾아내는 일이 세세하게 진행되고 있진 않았다. 따라서 전국 아파트 도면 데이터를 구축하는 일에 인턴이 파견(?) 되었다.
QA, Quality Assurance. 사용자의 입장에서 불편한 점과 버그를 찾아내 개발자 분들께 전달했다. 자칫 단순 반복 작업으로 될 수 있었던 도면 작업을 사수님이 숲을 봐야한다는 말을 짚어주시며 사용자경험을 수집했다. 물론 단순 반복 작업이 맞긴 했다...

스타트업 문화

아직 유교걸이라 '회사'를 떠올리면 딱딱한 이미지가 상상됐다. 학교 근로를 할 때도 딱딱한 이미지였고, 어쨌거나 어려워보였다. 하지만 내가 다녔던 회사는 정말 자유로운 분위기였다. 그래서 놀랄 때가 참 많았다.

  • 영어 이름 사용
    나이에 상관 없이 이름을 부를 수 있다는 게 장점이었다. 서로 쉽게 다가갈 수 있는 것 같았다. 심지어 대표님까지도.
  • 갑자기 즉흥적인 자율 재택 근무
    코로나로 인해 대표님이 즉흥적으로 자율 재택을 선언하기도 하셨다. 한 달 하다가 다시 원래대로 돌아가긴 했지만.
  • 갑자기 일찍 퇴근
    새로 이사 온 사무실에 티비를 설치한다거나 할 때, 갑자기 대표님이 일찍 퇴근을 선언하기도 하셨다. 예에
  • 풋살
    회사가 있던 건물은 풋살 경기장이 있었다. 대여를 해서 풋살하고 오기도 하더라.
  • 섞여서 앉는 자리
    이사를 오고 난 후, 제비뽑기로 자리를 뽑았다고 들었다. 그래서 직무에 상관없이 자리가 섞여 있다. 이리저리 옮겨다니며 대화를 하는데, 이건 불편하겠지만 좋은 문화인 것 같다.
  • 사람 이동이 많다
    내가 다닌 4개월 동안 2명의 사람이 나갔고, 2명의 사람이 들어왔다. 사람의 이동이 많은 것이 특징인 듯 했다.

재택근무

4개월을 다닌 건 맞지만, 따지고보면 1달 반은 재택근무를 한 것 같다. 완전한 재택은 3주 정도, 자율 재택도 3주 정도. 그래서 회사 분들과 더 친해지기 어려웠나..

  • slack

회사의 대부분 업무는 슬랙을 통해서 대화가 오고 간다. 용도에 따라 채널을 따로 만들 수 있고, 외부 사람 초대도 사용 가능해서 많이 쓰인다고 한다. 나도 외부사람이니 초대 받아 들어갔고, 대부분의 공지 사항을 전달 받거나 개인적 메시지를 주고 받았다. 재택 근무에 들어가니 나의 관리를 위해 slack으로 출퇴근을 기록하기도 했다.
아, 슬랙은 한 주제에 대해서 대댓글 형식처럼 스레드로 이야기를 나눌 수도 있다.

하지만 여기서 또 인턴의 아쉬운 단점이 발생하는데, 회사는 아마 전체 공지 채널이 있는 듯 했지만 나는 오로지 인턴 채널에만 초대됐다. 그리고 주요 공지는 인턴 채널에 자동 공유되지 않았다. 그래서 놓치는 공지가 좀 있었다...
또, 자신들만의 채널에서 공유되는 이야기는 전혀 알지 못해서..조금의 소외감을 느낄 때도 있었다. 킁

기존 코드를 개선해보자

회사 프로그램의 기능 중에는 도면 이미지를 업로드하면, 그 도면에서 '벽'을 찾아 에디터의 데이터 형태로 만들어주는 기능이 있다.

하지만 이 기능이 위와 같이 벽이 잘 인식되지 않는 단점이 있었다.
이를 개선하기 위한 작업을 위해, 기존 개발된 두 개의 코드를 섞는 작업을 진행했다.
이미 개발된 거대한 코드를 읽는 게 참 ..어려웠지만, 차츰 적응해서 전체적인 구조를 파악할 수 있게 되었다. 그리고 이 과정에서도 인턴에게는 코드가 부분적으로 공개되어 사수님의 도움이 무조건 필요한 경우가 있었다.

기존 코드에 머신러닝 모델이!

기존 코드를 개선하던 중에, 코드에 사용된 모델의 재학습을 통해 성능이 더 개선될 수 있는 가능성을 발견했다. 회사 프로그램으로 구축된 데이터셋을 활용해서 재학습을 진행했다.

DeepFloorplan

  • 4월 30일 ~ 6월 15일 진행
  • aws ssh 환경, linux
  • python, tensorflow
  • 기존 코드 수정 후 사용 : TF1 / TF2
  • dataset : 회사 에디터를 통해 구축된 데이터 사용
  • 학습에 적합한 형태의 dataset 변형 코드 작성
  • 재학습에 필요한 코드 추가
  • 재학습, 결과 확인

아쉽지만, 결과는 그리 개선되진 않았다. dataset의 추가 구축이 필요한 것으로 결론을 냈다.

장점, 얻은 것

  • 내가 정말 많이 부족함을 많이 느꼈다.
    코딩 스킬 뿐만 아니라, 수학적 논리적 기본 지식도.
  • 읽기 쉬운 코드, 이해하기 쉬운 코드를 작성해야 함을 알았다. 그리고 그 스킬이 아주 조금은 는 것 같다.
    (왜냐하면, 초기 프로젝트 코드 작성을 다시 봤을 때 부족한 점이 보였기 때문이다!)
  • 회사는 소통이 중요함을 깨달았다.
    같은 팀이 무엇을 하는지 아는 것도 중요하지만, 다른 팀이 무엇을 하는지 아는 것도 중요하다. 이를 위해서는 알아보기 쉽게 문서 정리를 하고, 서로 공유하는 문화가 중요하다.
  • 회사를 고를 때 고려할 점을 알게 되었다.
    아무런 기준이 없던 내게 조금은 기준이 생긴 것 같다.
  • git 및 github 사용 ; 사실 아직도 잘 모르겠고, 꼬이고, 많이 부족하다.
    커밋할 때 실수를 많이 했다. 커밋 마구잡이로 하지도 말고, 커밋하기 전에 구동도 잘 확인해보고 하자.

단점, 아쉬웠던 점

  • 사수님을 더 괴롭힐걸
    그리고 인턴은 더 묻고, 더 모른다고 해도 된다. 배우는 입장이니까.
  • 좀 더 활발히 지낼걸
    사실 다른 팀이 하는 일에 대해서도 많이 궁금했다. 개발자라는 직무에 엄청난 사랑을 느끼는 입장은 아니었으므로. 하지만 유난히..내성적이었던ㅋㅋㅋ 나는 결국 수줍수줍하다가 4개월이 끝나버렸다.
  • 더 푹 빠져서 할 걸
  • 인턴의 자리가 전체 코드 공개, 문서 공개, slack 채널 공개도 되지 않아서 답답함을 많이 느꼈다. 하지만 회사 입장도 이해 가서 어쩔 수 없는 부분.
  • 프론트엔드 더 해볼 수 있었으면 좋았을걸
    하지만 4개월 안에 결과를 낼 수 있는 것도 중요하니, 프론트엔드에 대해서 하얗게 무지한 인턴에게 무언가를 시키기엔 어려웠을 듯 하다.

끝났다...

긴 회고가 끝났다. 인턴도 끝났고.
앞으로 더 공부해야할 게 많다는 걸 느꼈다. 그리고 부족함을 알고서, 그걸 채우려고 노력해야겠구나, 도망치려고만 하면 안되겠구나도 느꼈고.
도망치지 말자, 맞서 싸워야 해.

더 많은 걸 알 수 있다는 거에 기뻐하고 좋아하자.
더 많이 알아내자!

어쨌든 고생했다. 👏👏👏👏👏 끝!

0개의 댓글