3개월 간의 스타트업 웹개발자 인턴 경험 되짚기

2020년 04월 13일

해당 회사를 지원한 이유

  1. 기술 스택

    가장 큰 이유는 기술 스택이 내가 원하는 것과 잘 맞았기 때문이다. 나는 React 웹개발자로 취직을 희망했고, TypeScript에 대해서도 관심이 있는 상태였다. 해당 회사에서는 React, TypeScript를 기본적으로 사용했고 상태 관리 라이브러리로는 주로 MobX를 사용하고 있었다.

    그래도 React를 아주 모르지는 않는다고 생각했는데, 입사 후 보니 TypeScript로 쓰여진 React 코드는 마치 암호같았다. TypeScript를 이해하지 못한 상황에서는 회사 코드를 제대로 이해할 수 없었기 때문에 Udemy에서 TypeScript 강의를 수강하기 시작했다.

    TypeScript를 조금 공부하자 코드를 읽을 수는 있게 되었는데, 문제는 내가 직접 코드를 작성하는 부분이었다. 읽는 것보다 직접 사용하는 게 더 어려웠다. 온갖 타입에러가 나는데 에러 메세지조차 암호같아서 계속해서 구글링하고 기존의 코드를 참고했다. 떠듬떠듬 작성한 코드를 PR 날렸을 때는 정말 부끄러운 마음이 컸지만, 팀원들이 코드 리뷰를 잘 해주어서 조금씩 개선할 수 있었다.

  2. 개발 문화

    나는 개발 실무 경험이 없고 관련 전공자도 아닌 사람으로서 부족한 점이 많다고 생각했다. 그렇기 때문에 더 성장할 수 있는 환경을 원했다. 회사를 다니면서 가장 만족스러웠던 점 중 하나는 코드 리뷰를 주고 받는 부분이었다. 사실 동료 팀원들에 비해 부족한 코드를 공개한다는 것이 개인적으로 부끄러웠고 잘못된 부분을 지적받을 때에는 조금 풀이 죽기도 했지만, 피드백을 받음으로써 내가 나아질 수 있기 때문에 정말 좋은 일이라고 생각했다.

    실제로 피드백을 받아서 처음에는 굉장히 부족했던 코드를 점점 개선시켜 나가고, 그것이 내 눈으로 그리고 다른 사람 눈에도 보이게 됐을 때 만족스럽고 성취감을 느꼈다.

    실제로 사수분의 코멘트 변천사🙇‍♀️ 정말 정말 좋은 분이셨고 감사하고 있다.🙏

    1

    2

    3

    4

  3. 개발 팀 규모

    입사하기 전에는 해당 기업에 대해 알 수 있는 정보가 많지는 않다. 큰 기업이 아닌 이상 해당 기업이 올린 구인 공고의 정보, 잡플래닛 리뷰 정도다. 그래도 그 중에서 해당 팀의 규모가 나타나는 경우가 있는데, 너무 팀 규모가 작은 곳보다는 조금 더 큰 곳에 가고자 했다. 왜냐하면 개발 팀의 규모가 어느 정도 되면 개발 체계가 잡혀있을 확률도 크고, 보고 배울 수 있는 시니어 개발자의 존재가 더 많을 가능성이 높다고 짐작했기 때문이다.

나는 무엇을 배웠나?

  1. 협업하는 법

    내가 입사하기 전, 개발 실무를 해본 적이 없을 때에 다른 사람이랑 거의 유일하게 협업해봤던 경험은 국비학원에서 팀프로젝트를 했을 때와 컨트리뷰톤에 참여했을 때였다. 사실 학원에서는 깃을 제대로 사용할 줄 아는 사람이 거의 없었고, 강사님도 깃을 사용하지 않으셨기 때문에 협업하기가 굉장히 어려웠다. 깃에 대한 기본적인 개념없이 pull, push, merge하다 보니 conflict도 엄청 났고 commit 관리도 제대로 되지 않았었다. 지금 그 커밋 로그를 보면 엄청난 난장판이다.🤦‍♀️

    그 다음 공개 컨트리뷰톤이라는, 일종의 오픈 소스 컨트리뷰트 대회 같은 것에 참여했는데 이 경험을 해서 참 다행(?)이었다. 여기서 여러 사람들과 깃을 통해 협업하는 방법을 알게 되었다. 예컨대 일반적으로 master 브랜치에 직접 머지하지 않는다는 것이나, 내 계정으로 포크해서 다시 업스트림에 PR 하는 방법 등.

    회사에 입사해서는 이 때 익힌 깃을 활용해서 협업하였고 나중에는 JIRA가 도입되서 JIRA + Github + Slack 으로 일했다. 커밋 컨벤션, 브랜치 네임 컨벤션 등 커밋과 브랜치를 관리하기 위한 규칙이 있다는 것을 알게 되었고, 이 규칙들을 통해 협업하는 방식을 익히게 되었다. 물론 처음에는 사수분의 이름으로 되있는 브랜치를 당겨와서 내가 수정한 다음 그 브랜치로 다시 PR을 날리는 등… 실수도 있었다.😉

    이 외에도 기획자분이 스케치로 주신 와이어프레임과 기능 정의서를 보고 추가될 피처에 대해 논의한다거나, 디자이너분들이 주신 디자인 스펙을 제플린에서 확인하고 회사의 디자인 패키지를 사용하여 마크업하는 것 등 다른 직군의 분들과 협업하는 방법도 배울 수 있었다.

  2. 기술 스택에 대한 지식

    당연히 일을 하려면 회사가 쓰고 있는 기술 스택에 대한 이해가 필요하다. 언급했다시피 나는 TypeScript에 관심만 있었지 사용할 줄 몰랐었다. 혼자서 공부하려고 시도했었지만 너무 어려워서 헤매기만 하다가 진척이 없는 상태였다. 회사에 들어오고 나서는 생존이 걸린(?) 일이다보니 공부했고, 회사 코드에 많은 유스케이스가 있었기 때문에 공부하는 데에 매우 큰 도움이 됐다.

    그리고 회사의 상태 관리 라이브러리도 주로 MobX가 사용되고 있어서 처음 공부하게 되었다. 전에는 Redux만 사용해 봤는데 Redux랑 매우 다른 라이브러리여서 처음에 받아들이는데 좀 당황스러웠지만(상태가 뮤터블이라든가…) 확실히 보일러플레이트 코드가 적고, 옵저버가 알아서 잘 관리 해주고, 리듀서니 액션 생성자니 하는(?) 리덕스보다는 플로우가 간단해서 사용하기 쉽다는 생각도 들었다.

    또 React에 대한 공부도 하게 되었다. 기본적으로 리액트를 어떻게(How) 사용하는가에 대한 지식은 있었지만, 왜(Why)에 대해서는 잘 몰랐었다. 회사 코드를 읽으며 왜 이렇게 썼을까? 싶은 부분이 있을 때 더 이해하기 위해 Overreacted 블로그 글을 읽고 리액트 공식 블로그도 다시 읽어보며 공부하고 있다.

  3. 설계, 클린 코드에 대한 고민

    이건 설계하는 법을 배웠다, 라기보다는 이것을 고민해야 한다는 점을 배웠다는 말이다. 회사 코드를 읽을 때 가장 많이 들었던 생각은 왜 이렇게 썼을까? 하는 부분이었다. 왜 이 커스텀 훅은 이렇게 생겼나? 왜 뷰모델을 쓸까? 왜 구조를 이렇게 가져갔을까? 이게 더 좋은 코드일까? 어떤 점에서 좋은 코드일까?

    나는 여러 코드를 접해본 경험이 상대적으로 부족했기 때문에, 코드를 비교하며 왜 이렇게 써야 더 좋은가, 에 대한 거시적인 시각이 부족하다고 느꼈다. 그래서 디자인 패턴, 클린 코드에 대해 좀 더 공부를 해야겠다는 자극을 얻게 되었다.

아쉬웠던 점

짧은 기간 인턴으로 있었기 때문에 더 경험해보고 싶었는데 못해본 일들이 있었다. 테스트 코드를 짜보지 못한 것과 내가 작성한 코드를 라이브로 배포하는 경험을 해보지 못한 것이다. 3개월이 지나고 정규직 오퍼를 받아 기쁜 마음으로 계약했지만, 회사가 코로나19로 인한 급격한 경영 악화로 어려워지게 돼서 일을 지속할 수 없게 되었다. 좋은 개발팀이었고 배우고 싶은 것도 많았는데 개인적으로 참 아쉽다는 생각이 든다.

그래도 이 경험으로 인해 많은 것을 새롭게 배울 수 있었고, 좋은 동료들과 함께 일했던 경험만으로 정말 가치있었다고 생각한다. (다들 행복하고 잘 되었으면 좋겠다🤟)