Experience

소프트웨어 개발 인턴십

이번 여름 방학은 생각보다 빠르게 지나갔다. 마지막 시험을 끝내고서 바로 제주도에 다녀왔고 그 이후에 1주일을 더 놀았다. 비록 많지 않은 나이지만 늦게 대학교를 시작했다는 생각이 지배적이었다. 그래서 조금이나마 더 무언가를 해야겠다는 생각이 늘 있었다. 그러다 무턱대고 Career Development Center와의 미팅을 신청했다. 정말 무엇을 물어봐야 할지 몰랐고 그저 어떤 방학을 지내야 할 지 힌트를 받고 싶었다. 미팅이 잡히기 전까지 대충 방학을 어떻게 보낼지 나만의 목표를 몇 개 작성해 두었었다. 운동, 독서, 개발 공부와 같이 어찌보면 조금 진부하거나 뻔한 내용들로 가득했다. 그러다 미팅 날짜가 되었다. 코치분과 얘기를 나누다가 마지막 쯤에 이번 방학에 좋은 기회가 있어서 그런데 신청해보지 않겠냐고 하셨다. 아무런 계획이 잡혀있지 않았던 나는 무조건 하겠다고 하였다. 하지만 말과는 달리 정말 하겠다고 결정하기까지 정말 많은 고민을 하였다. 우선 될 지 안 될지도 모르는 대학교 1학년이 왜 그런 고민을 하냐고 할 수 있다. 대학교의 특성상 모든 인턴들이 외국어를 사용해야 하는 업무를 맡길 것 같았고 나는 그런 업무를 할 시간에 차라리 내 공부를 하는 게 좋겠다고 생각도 했었다. 그러나 결국 신청을 하였고 운이 좋게 첫번 째 인턴을 시작하였다.

일의 시작

걱정과는 다르게 내 주된 업무는 프론트엔드 파트였다. 인턴이 확정되고 react와 thymeleaf를 배워오면 좋겠다라는 문자를 받았다. 2주 안되는 시간이었기에 thymeleaf는 template engine이라 금방 배울 수 있겠다라는 판단을 했기에 react를 배우는 데 초점을 맞췄다. 유튜브에 무료 강의를 보면서 간단한 quiz 앱 정도 만들 수 있을 때 쯤 첫 출근을 하였다.

첫 업무

주로 번역 업무를 도맡아서 하였다. 정확히는 번역된 엑셀 파일을 json 파일로 옮겨 웹사이트에 적용하는 업무였다. i18n 라이브러리를 활용하여 번역을 진행하였다. 처음 사용해보는 라이브러리라 다큐먼트를 보고 설정 방법과 적용 방법을 익혀나갔다. 생각보다 어렵지 않아서 금방 끝낼 수 있을 것이라는 착각을 했다.

첫 난관 봉착

프로젝트를 하나 받아서 번역을 시작했다. 다큐먼트에 나와 있던대로 설정을 하고 적용을 해보고 되는지 확인하려고 했다. 그런데 어떻게 실행시키는지 조차 몰랐다. 지금보면 어떻게 그걸 몰랐나 싶지만 프로젝트가 작은 부분으로 나뉘어져 있어 헷갈렸다. 다행히 팀 내에 계신 분들이 질문에 너무 잘 대답해주셔서 금방 해결할 수 있었다. 우여곡절 끝에 실행하였지만 번역은 당연히 다 안되어 있었다. 여기서 두번 째 문제가 생겼다. 어디 부분이 코드에 어디 부분인지 도저히 알 수가 없었다. react가 익숙하지 않아 처음에는 코드를 따라가질 못했다. 그냥 문자열로 되어 있는 부분만 찾아서 바꾸는 식이었으니 잘 안 보이거나 내가 발견하지 못하는 문자열들은 번역하기가 쉽지 않았다. 이 또한 물어봐서 코드를 따라가는 방법을 배웠다. VSCode 에디터를 썼는데 하면서 여러가지 단축키도 배웠다. 가끔 내 키보드를 가져가셔서 금방 뚝딱 하시는 게 신기해서 물어보거나 직접 찾아봤다. 또 다른 문제는 modal과 같이 condition에 따라 render되는 경우에는 모든 logic을 건드릴 수 없기에 data를 mock해서 테스트를 해보아야했다. 그러나 typescript 문법도 익숙하지 않았던터라 스스로 문법을 익히고 테스트를 하기까지 꽤나 어려웠다.

배운 점

프로젝트가 크다보니 번역 업무도 상당히 많았다. 처음에는 너무 같은 업무의 반복이라 조금은 지루했다. 코드를 직접 쳐보고 싶었다. 그러나 이런 반복적인 번역 업무에도 상당히 많은 것을 배웠다. 우선 기본적인 부분부터 배울 수 있었다. npm이 무엇이고 registry가 무엇이고 private registry는 어떻게 사용할 수 있는지. 그리고 번역 업무를 하기에 앞서 가끔 빌드에 오류가 난 부분을 수정할 때 webpack과 babel이 왜 필요한 지 알 수 있었다. 예를 들어 한 번은 calendar 라이브러리를 사용해야 했는데 지원해야하는 언어를 지원하지 않았다. 이미 프로젝트 내에 모든 calendar는 이 라이브러리를 사용하고 있었기에 다른 라이브러리로 바꾼다는 것은 힘들었다. 그래서 라이브러리를 npm registry에서 fork해서 moment를 사용하는 걸로 바꾸려고 했다. 우선 코드를 이해하고 어느 부분에서 언어 번역을 하는지 파악했다. 다행히 금방 파악할 수 있었고 이제 수정하기만 하면 됬다. 하지만 원래 인자를 받는 순서나 방법이 고정되어 있다고 생각해서 방법이 없는 줄 알았다. 하지만 질문 끝에 closure 함수를 알게 되었고 이를 통해 꽤나 손쉽게 구현이 되었다. 정말 3시간 동안 붙잡고 있던걸 10분만에 풀리니까 속은 시원했지만 갈 길이 멀다는 걸 정말 뼈저리게 느꼈다. 또한 이를 private registry에 올려서 다른 프로젝트에서 받을 때 에러가 났는데 이는 require대신 import를 사용해서였다. JS안에서도 여러 버전이 있고 webpack이 compile할 때 moment module을 가지고 가지 못해서 생기는 에러였다. 이 외에도 정말 다양한 라이브러리를 경험했다. 번역 업무외에 사내 업무 효율을 높이기 위해 크롬 확장 프로그램을 제작했다. Plasmo라는 생각보다 얼마 안된 프레임워크를 사용했고 이 외에도 기능을 구현하기 위해 nestJS, GraphQL, react-query, recharts,date-fns 와 같은 여러 라이브러리들에 대해 공부하였다. 기능 구현에 앞서 어떤 라이브러리가 제일 잘 맞는지 확인하였고 이를 구현하기 위해 최대한 빠르게 이해하려고 노력했다. 이전에는 다큐먼트를 보기 전에 유튜브를 먼저 찾아보았는데 이제는 다큐먼트를 보고 API 문서를 찾아보는게 훨씬 이해가 편해졌다. 또한 일주일에 한 번 모여서 얘기하는 시간에는 그간 각자 흥미롭다고 느꼈던 주제들 또는 article에 대해서 얘기하는 시간이 있었다. 매주 이야기들을 들으며 생각보다 개발 트렌드는 빠르게 변화하고 적응하는 게 필요하겠구나 생각이 들었다. 그리고 prettier ls 라는 commandline tool이 이뻐보여서 다운 받았다. 근데 막상 잘 쓰지 않게 된다… 그래도 가끔 기분 낼 때 쓰긴 한다…

협업

대학교에서 알고리즘 공부하고 혼자 공부해 본게 처음이기에 협업을 해본 적이 없었다. 이전에 git이라는 게 있고 많이 쓰는구나 정도만 알았지 사용해 본 적은 없었다. 초반에는 정말 너무 어려웠다. 일을 하기 전에 새로운 브랜치를 따지 않아서 애 먹은 적이 한 두 번이 아니었다. 커밋 메세지도 어떻게 작성해야 하는지 생각도 되게 많이 해야 됬었고 새로운 이슈나 pr을 작성할 때 또한 마찬가지였다. 그래도 이제는 정말 기본적인 방법은 익히고 사용할 수 있게 되었다.

아쉬웠던 점

우선 방학 내에 한 것이라 너무 짧은 기간이 아쉬웠다. 더욱 길게 하면 어땟을까 생각한다. 또한 내 역량의 한계가 뚜렷하다보니 잦은 실수를 한다는 점이었다.

느낀 점

아직 갈 길이 정말 멀었다라고 생각했다. 다음 인턴이나 취업을 하게 된다면 나한테 일을 맡겼을 때 불안하지 않게 제 시간안에 잘 할 수 있는 사람이 되고 싶다. 하지만 좌절하기보단 자극을 받는 계기가 되었다. 오히려 이번 일을 하면서 개발이 내 적성에 맞는다는 걸 알 수 있었고 마음을 다잡고 더욱 열심히 공부할 수 있게 되었다. 프론트엔드도 재밌었지만 아직은 풀스택을 하고 싶다는 생각이 든다. 학교를 다니면서 틈틈히 사이드 프로젝트도 만들고 개인 공부도 열심히 해야겠다.

working space나에게 좋은 기억을 준 자리