IMD Logo기술 블로그
FaceBookGitHub
IMD Author Avatar
YONGJAE LEE
2021-01-20

dididy.2020.log

회고는 중요하다. 회고를함으로써 내가 잘한 부분과 못한 부분을 알 수 있기 때문이다. 앞으로 내가 어떻게 행동하면 좋을지에 대한 방향성을 잡아주는 역할을 한다고 느낀다.

정신없이 12개월이 지나갔다. 상반기 6개월간 인턴십을 통해 웹 개발 실무를 다뤄볼 수 있었고 하반기에는 졸업과 취업을 위한.. 끊임없는 마감의 굴레 속에서 고통받았다.

특히 내 예상과는 다르게 졸업을 위해서는 많은 노력을 기울여야 해서 힘들었다. 결론적으로 2017년부터 4년간의 대학 생활을 끝으로 2021년 2월 졸업이 확정되었지만, 취업에 대한 부분은 완전히 실패했다고 느껴진다.

Plan B 정도로 생각했던 SSAFY 5기에 합격하여 최대 1년간 재정적인 지원 하에 조금은 안정적으로 취업 준비를 할 수 있는 기반을 마련하는 선에서 2020년이 마무리되었다.

인턴십

2019년 부스트코스 에이스 수료 후 커리어 부스팅 행사에서 알게 된 AI 기반 석유 시추 솔루션 스타트업인 ENERZAi 인턴십에 합격하여 겨울방학 기간 2개월 동안 프론트엔드 직무로 일해볼 수 있었다.

첫 인턴십이 진행되던 중 예전에 제출해놓은 MI-333(충남대학교 SW 중심대학 사업단 학점연계 해외 인턴십) 프로그램의 과제테스트에 최종 합격하여 4학년 1학기 기간(4개월) 동안 NanoCellect Biomedical, Inc. 라는 미국 현지 회사에서 백엔드 엔지니어로 근무하는 소중한 기회를 얻게 되었다.

ENERZAi

지반 데이터 분석 결과를 그래프 형태로 쉽게 보여줄 수 있도록 하는 jQuery와 Django 기반 웹앱 프론트 작업을 담당했다. 빠르게 변화하는 기획에 맞춰 기능을 추가하고 수정하는 작업이 주 업무였다.

틈틈이 React로 마이그레이션 하는 작업도 병행했다. 대부분의 View에 대해서는 HTML, CSS 베이스 코드가 있으니 비교적 쉽게 옮길 수 있었고 컴포넌트 개반 개발이 왜 중요한지 알게 되었다. Django 작업은 CSO님이 맡아 협업을 진행했는데 기존 템플릿 코드 뭉치를 REST API 기반으로 변경하여 React에 적용하는 과정이 재미있었다. 하지만 늘 의문을 품으며 퇴근했다. 내가 작성한 코드가 작동하긴 했지만 잘 작성한 코드인지 확인받고 싶었다. 하지만 내가 회사에서 유일한 프론트엔드 개발자라 그럴 수 없었다.

jQuery에 대한 것도 마찬가지였다. 기존에 jQuery 기반으로 배포된 버전이 stable 했기 때문에 React의 장점이 아무리 많아도 jQuery를 메인으로 작업해야 했다. 작성되어있던 코드는 실행 컨텍스트가 명확하지 않기도 했고 중복된 코드도 많았다. 한 파일에서 로직 대부분을 처리하는 상황이었는데 이를 모듈로 나누겠다는 생각조차 하지 못하던 시절이어서 기존의 코드를 계속 참고해가며 주먹구구식으로 개발을 해나갔다.

인턴십이 끝나 이후로 새로운 개념들을 알게 되면 그때 이렇게 했으면 좋지 않았을까 하는 아쉬움에 마음이 무거워진다. 처음으로 사수의 필요성과 코드리뷰의 중요성을 깨닫는 계기가 되었다.

NanoCellect Biomedical, Inc.

지금은 상황이 역전되긴 했지만 2020년 2월 말 당시에는 한국의 코로나 확진자가 전 세계 상위권으로 매우 심각했던 시절이라 J1 비자 발급도 힘들 줄 알았고 미국도 입국 거부당할 줄 알았다. 다행히 모든 절차가 정상적으로 진행되었고 미국 샌디에고에서의 생활이 시작되었다.

Airbnb를 통해 예약한 방에 묵는 동안 앞으로 지내게 될 방을 구해야 했고 그 과정에서 참 많은 것들을 느꼈다. Craigslist나 SD Saram 같은 커뮤니티를 통해 연락을 보내 예약을 하는 방식과 각 아파트의 Leasing Office로 무작정 찾아가 원하는 옵션의 방을 직접 물어보는 방식을 병행하면서 차도 없이 동선을 짜가며 거의 스무 군데 이상의 집을 둘러봤던 것 같다.

결론적으로 Torrey Pines Village 아파트와 계약했는데 바로 옆에 Westfield 쇼핑몰이 있어서 가끔 밥 사 먹기도 편했고 맥세권인데다 회사까지 걸어서 15분정도라 바로 결정했다. MI-333 6기 5명이 함께 살 수 있는 꽤 넓은 투룸을 적절한 가격($2,500/mon)에 계약했다. 회사 CTO이신 조성환 박사님에게 상황을 보고하고 얼마 뒤 첫 출근을 하게 되었다.

내 사수였던 Jon은 긴 머리가 인상적인 매우 유쾌한 사람이었다. 출근 첫날에 Clean Python 책을 선물해 주었고 Flask 기반 ERP 시각화 웹앱 개발을 진행하기 위해 함께 개발환경을 설정했다.

나에게 주어진 업무는 Acumatica ERP의 변경된 구조들을 Flask에서 하나씩 대응해 나가는 것이었다. Jon의 친절한 설명을 기반으로 변경된 Endpoint를 적용하거나 DB 구조를 바꾸거나 하면서 업무에 익숙해질 수 있었다.

미국 코로나 상황이 심각해지면서 출근 5일 차부터 재택근무로 전환됐다. 2~3주 차부터는 락다운으로 음식점, 카페 등에서 취식이 금지되고 to go만 가능한 상황이 되었다. 미국에 있기는 하지만 미국을 제대로 즐길 수 없게 되어버린 것이다. 무엇보다도 마스크를 끼고 다니지 않는 사람들이 너무 많아서 생필품을 사러 가면서도 꺼림칙 했다.

재택근무로 전환되긴 했어도 Jira 기반으로 프로젝트가 관리되고 있었고 Teams를 통해 누구나와 소통할 수 있어서 불편함은 없었다. 업무를 할당받고 작업을 완료하면 Jon에게 상황을 보고했다. Jon의 시간이 괜찮을 때 내 화면을 공유해서 왜 이렇게 수정했는지 설명했고 그에 대한 코멘트를 받았다. 난생처음 코드리뷰를 받아본 셈인데 컨벤션을 맞추는 부분이나 코드 구조적으로 내가 놓쳤던 부분들을 많이 배울 수 있었다.

테스트 코드 또한 처음 접했는데 Bitbucket 파이프라인 상에서 테스트 코드를 통과하지 않으면 PR이 merge되지 못하도록 강제하고 있었다. 강제성이 있다는 것은 그만큼 해당 절차가 필요한 것일 거라 생각했다. 실제로 테스트 코드를 통해 놓친 부분들을 파악할 수 있었고 중요성을 이해하게 되었다.

서비스가 운영되면서 발생하는 장애나 이슈가 터질 때마다 하나씩 해결해나갔다. 시간이 남을 때 특정 형식으로 구조화된 CSV 혹은 엑셀 파일을 Acumatica ERP에 손쉽게 업로드할 수 있는 Python 프로그램을 개발했다. 다른 부서 직원들의 생산성을 올렸다는 생각에 뿌듯함을 느꼈다.

5월 말이 되면서 미국 코로나 상황이 심각해졌다. 샌디에고는 대전의 2배 정도 면적인데 하루 확진자가 500명을 넘어가는 상황이었다. 미국 전체 코로나 확진자는 전 세계 부동의 1위가 된 지 오래였고 샌디에고는 상황이 조금 낫긴 했지만 다른 지역은 코로나에 걸려도 병상이 모자라 치료를 못 받는다고 했다. 만약 치료를 받는다고 하더라도 입원비가 하루에 100만 원 수준이라 코로나에 걸리지 않도록 행동을 조심할 수밖에 없었다.

학교 측에서 귀국 의사를 물어보았고 실제로 기범이는 한국으로 먼저 돌아갔다. 기범이를 제외하고 나를 포함한 나머지 4명은 남겠다는 선택을 했지만 얼마 지나지 않아 더는 안 되겠다 싶어 7월 초에 MI-333 6기 모두가 귀국하는 결정을 내리게 되었다.

조 박사님에게 귀국 의사를 전달할 당시 감사하게도 귀국 후에 CUDA FPGA 병렬 프로그래밍 작업을 하면서 업무를 이어나갈 생각이 있냐는 제안을 해주셨다. 하지만 내가 생소한 분야라 잘 할 수 있을지 모르겠다는 불안감과 취업 준비를 하는 게 맞는다는 짧은 생각으로 좋은 기회를 포기하게 되었다. 지금 와서 돌이켜보면 그런 선택을 해버린 게 아쉽다.

이렇게 6개월에 걸친 인턴십이 모두 끝이 났다.

대외 활동

7월 8일에 한국에 도착했다. 다음 날 아침 보건소에서 코로나 검사를 받고 자가격리를 시작했다. 다행히 AngelHack Seoul 2020 해커톤을 신청해놔서 격리 주 주말부터 9일간은 지루할 틈이 없었다. 이에 대한 회고는 여기에 정리해두었다.

코드숨 React 1기

코드숨은 ENERZAi에서의 힘들었던 경험과 NanoCellect Biomedical, Inc.에서의 좋았던 경험을 토대로 프론트엔드에서의 코드리뷰와 TDD를 학습해보고 싶은 욕심에 수강하게 되었다. 인턴십 기간이랑 일부 겹치긴 했는데 웹 프론트엔드 쪽으로 취업하기를 희망하던 상황이었고 근무시간 외적으로 충분히 병행하는 것이 가능하다고 판단했다.

한국행이 확정되면서 코드숨에 집중하게 되었다. 대체로 협업을 위해 컨벤션을 지키기 위해 무엇을 해야 하는지, 코드 퀄리티를 위해서 코드를 관리하고 작성하는 방법, React에서 유닛 테스트와 E2E 테스트를 제대로 작성하는 방법에 대해서 코칭받을 수 있었다. 내가 잘못 이해하고 있던 개념들과 몰랐던 개념들을 알게 될 때마다 내가 잘못 작성한 과거의 코드들을 반성했다.

과제의 요구사항 외적인 부분들인 Webpack이나 Babel, Lint 설정을 개인적으로 하나씩 확인해보면서 이게 왜 필요한 것인지 분석했다. 매주 2시간 정도 제공되는 아샬님의 강의를 통해 React 환경에서 TDD로 라이브 코딩을 하는 것을 보면서 많이 배울 수 있었다.

창업동아리에 새로 들어온 개발자 친구들에게 인수인계차 진행했던 프로젝트에 코드숨에서 배운 프로세스를 적용했다. 원하던 기능을 작동할 수 있게 하고 테스트 커버리지를 일정 수준까지 맞추는 선에서 프로젝트를 마무리했다.

코드숨 트레이너이신 윤석님과 함께 진행했던 모던 자바스크립트 스터디와 리엑트 공식문서 스터디를 통해 면접을 간접적으로 대비할 수 있었다. 각자 문서를 읽고 챕터별로 문제를 만들어와서 서로에게 질문하는 방식으로 진행되었는데 내가 알고 있어야 해당 질문에 답변을 할 수 있는 거니까 면접 대비용으로 탁월한 방식이라고 느껴졌다. 이것을 인지하고 스터디에 참여했던 건 아니었지만, 면접을 거치고 보니 윤석님에게 감사했다. 스터디 중간마다 개발 관련해서 윤석님의 다양한 인사이트를 공유받을 수 있어서 도움이 많이 되었다.

Im-D

GitHub PR 기반으로 협업하는 것에 대한 자료를 검색하던 중 Im-D의 Dev-Docs 리포지토리를 발견하게 되었다. 이미 많은 문서들이 작성되어있었고 코드리뷰 받듯이 문서에 대한 리뷰를 서로 해주는 스터디인듯했다. 프론트엔드 관련된 글들이 많기도 했고 실제로 프론트엔드 개발자로 일하고 계신 선형님과 봉기님에게 많이 배울 수 있겠다 싶어 무모하긴 했지만, 선형님의 GitHub 핸들에 적힌 이메일 주소로 스터디에 참여하고 싶다는 메일을 보냈다.

사실 내가 보낸 메일에 답장이 오지 않을 가능성이 크다고 생각했다. 하지만 예상과는 다르게 선형님께서 빠르게 답변을 해주셨고 서류 제출과 면접 과정을 거쳐 출국 직전 기분 좋은 합격 소식을 듣고 최종적으로 합류할 수 있었다.

처음 스터디에 참여했을 때 외부인인데도 불구하고 다들 친절하게 대해주셨다. 원래 내부적인 추천제로 운영하는 스터디였는데 지원해서 들어오게 된 사람은 내가 최초라고도 하셨다. 더 열심히 해야겠다고 느끼는 순간이었다.

그전에는 기술문서를 작성하는 것에 익숙하지 않기도 했고 내가 잘하고 있는 것인지 판단하기 힘들었다. Dev-Docs 스터디에 참여하면서 내가 작성한 주제에 대해 발표하고 나면 다양한 피드백을 받을 수 있다는 게 가장 큰 장점인 것 같다. 단순히 스터디에 참여해 문서를 발표하는 것에서 끝나지 않고 리포지토리에 PR한 문서에도 질문과 리뷰를 코멘트하며 문서의 퀄리티를 올리는 과정을 거치게 되는데 이 과정에서 많이 배울 수 있었다.

선형님 봉기님, 대화님, 은님, 은지님, 지기님 모두 이 스터디가 왜 필요한지 이해하고 있는 것 같았고 열정적으로 발표를 준비해오셨다. 혼자 공부했다면 알지 못했을 다양한 주제들에 대해 접해볼 수 있어서 매주 학습할 수 있어서 유익했다.

2020년 7월 말부터 Dev-Docs 스터디를 통해 7개의 문서를 작성하여 발표하고 피드백 받았다. 적고 보니 생각보다 많이 작성하진 못한 느낌이다. 선정한 주제들은 개인적인 필요에 의해 학습하다가 문서 작성으로 이어지는 경우가 많았는데 그래서인지 더 애착이 간다.

2021년에는 퀄리티있는 기술 문서를 많이 작성해보고 싶다. Bomb Lab(2)도 빨리 작성해야겠다.

2020 오픈소스 컨트리뷰톤

운이 좋게 2020년 오픈소스 컨트리뷰톤 ESLint 팀에서 활동을 할 수 있게 되었다. 협업과 코드 퀄리티를 유지하는 측면에서 Lint가 어떤 역할을 하는지 파악한 시점에 ESLint에 기여할 기회를 얻게 된 상황이라 더 뜻깊었다. 어떤 활동을 했는지는 여기에 정리해두었다.

YAPP 17기

YAPP은 프론트엔드 개발자로서 긴 텀을두고 프로젝트를 진행해보는 경험을 해보고 싶어서 지원하게 되었다. 이것 역시 운이 좋게 선발되어서 기획자, 디자이너 각각 1명, 백엔드 2명, 프론트 3명으로 구성된 WEB2 에 소속되어 면접 스터디 플랫폼인 위더뷰를 제작해나갔다.

다들 학업이나 취업 준비, 이직 준비로 바쁜 시기인데도 불구하고 최선을 다해서 참여해줘서 팀원들에게 고마웠다. 구현하다 보니 스타일링 기준을 맞추는 게 어려웠다. 일반적으로 PC에서 보이는 화면은 작업표시줄이나 브라우저 상단에 가려져서 1920 x 700 정도라는 것을 인지하지 못하고 16:9 비율에 꽉 차도록 작업했다.

앱을 사용하는 것처럼 스크롤이 생기면 안 되는 화면들의 경우 16:9 비율 아래에서는 UI가 깨졌으며 브라우저 배율에 따라 UI가 깨지는 문제도 발생했다. 이슈를 공유해주신 병헌님에게 고마웠고 디자인해주신 은비님에게 미안했다. 이를 해결하기 위해 px 단위를 vh로 변경하여 높이 기준으로 고정했다. 그 결과 16:10 비율 아래에서는 화면비나 배율에 상관없이 동일한 UI를 보장할 수 있었다. 16:10을 넘어가면 경고 화면을 보여주도록 하는 선에서 타협했다.

프론트 작업하면서 기태님이나 찬호님, 재호님에게 많이 배울 수 있었다. UI 개발 상황을 효율적으로 공유하기 위해 PR별로 푸시될 때 마다 스토리북을 gh-pages에 배포되도록 하는 GitHub Actions를 설정했다. 이렇게 해두니 각자의 컴포넌트 UI 개발 상황을 각각 생성된 링크를 통해 확인할 수 있어서 효율적이었다. 이를 기반으로 의사소통할 수 있게 되어 다들 편하다고 말해주셔서 뿌듯했다.

예은님과 채팅을 Stomp로 작동하게끔 하는 작업을 마치고 소켓으로 WebRTC 스트림 라우팅 되던 부분을 Stomp의 메시지 큐 기반으로 옮기는 작업을 했는데 어렵긴 했지만 어려운 만큼 재미있었다. 결론적으로 아직 해결하지 못하고 외부 소켓 서버를 사용해 WebRTC 스트림을 라우팅하고 있다. 빠른 시일안에 이 부분을 해결하고 싶다.

아직 수정해야 할 부분이 많아 마감 이후에도 시간이 되는 팀원분들과 계속 작업하고 있다. 실제로 유저가 사용할 수 있는 수준까지 개발하는 게 목표이다.

졸업

한 학기 + α 동안 정말 미칠 듯이 힘들었지만, 다행히 졸업 사정을 통과할 수 있었다.

이번 마지막 학기에 들은 시스템 프로그래밍, 네트워크 및 통신, 종합설계 세 과목 모두 내용 면에서나 과제의 양 측면에서도 만만치 않은 과목들이었다. 특히 종합설계는 졸업 프로젝트로서 각종 다이어그램, 테스팅 등을 문서화하고 실제로 구현해야 했다. 여기에 더해 학교 특성상 논문도 작성해야 했으며 논문 심사에 통과해야 졸업이 가능한 상황이었다.

문제는 졸업 프로젝트와 논문의 주제가 다르다는 것이었다. 일반적인 구현이었다면 그나마 나았을 텐데.. 창업동아리 측 부탁으로 개 코주름 패턴을 이용한 인증을 주제로 하게 되었다. 기존 지문인식 솔루션을 많이 참고해서 특징점을 찾는 방식으로 연구의 방향성을 잡을 수 있긴 했지만 생소한 분야라 아무래도 힘들었다. 통상적으로는 두 학기에 걸쳐 진행되는 게 일반적인데 나는 4학년 1학기 동안 학점연계 인턴십을 진행한 탓에 한학기안에 모든 걸 끝내야 했다.

학기 말이 되면서 졸업 프로젝트는 기존에 의도했었던 부분들을 어느 정도 타협하긴 했지만 나름대로 그럴듯하게 구현할 수 있었다. 문제는 논문이었는데 지도교수님에게 계속 리젝 당해서 원래 기한보다 1주일 늦춰져서야 겨우 마무리 할 수 있었다. 논문 작성할 때는 너무 힘들었는데 완성되고 보니 뭔가 뿌듯했다. 같이 고생해준 민혁이에게 감사하다.

마지막 관문은 공인영어성적 확보였다. 사실 네이버 핵데이 참여 등 졸업을 하지 않고 학생 신분을 유지하는 것이 유리한 경우가 많다. 문제는 SSAFY에 합격해버린 것이었다. 졸업하지 못한다면 SSAFY에서 중도 퇴소 처리된다. 졸업이 꼭 필요해진 상황이었기 때문에 졸업 기준에 맞는 공인영어 성적을 어떻게든 만들어야 했다. 토익은 시험과 결과 텀이 너무 길다 보니 시험일 기준 5일 만에 결과가 나오는 토익 스피킹을 준비했다. 다행히 마감일 전에 기준 점수보다 높은 점수를 받고 졸업에 필요한 요건을 모두 갖출 수 있었다.

취업..

최종 합격한 곳들이 있긴 했지만 가지 않았다. 적어도 코드리뷰 문화나 테스트 코드를 작성할 수 있는 여유가 있는 회사에 취업하고 싶었다. 이런 문화적 바탕이 없더라도 배울만한 사수분이 있다거나 연봉이 괜찮았다면 지금 그곳에 일하고 있었을 텐데 여러모로 아쉽다.

합격하진 못한 곳들은 면접을 보면서 좋은 인사이트를 얻는 경우가 많았다. 내가 부족한 부분을 점검할 수 있게 되었고 행동에 반영하는 계기가 되었다.

이를테면 개인적으로 프로젝트를 장기간 진행하면서 유저 피드백을 적용한 경험이 있는가에 대한 질문을 받고 개발자로서 어떤 자세로 서비스를 만들어야 하는지에 대한 본질을 파악할 수 있었다.

나는 당시 그런 경험이 없었다. 면접 이후 앞서 언급했듯이 YAPP WEB2 팀원들과 진행 중인 면접 스터디 플랫폼 위더뷰를 개발해나가면서 유저 입장에서 생각하는 마인드 셋을 습관화하였다. 마감이 지난 시점인 현재에도 개발자로서 협업하기 편한 구조인지, 유저 입장에서 불편하지 않은지를 염두에 두며 계속 작업해나가고 있다.

대면 면접도 그렇고 과제테스트나 전화 면접 같은 프로세스를 경험해볼 수 있어서 좋았다. 그 과정에서 나의 부족한 CS 및 프론트엔드 지식에 대해서 알 수 있었다.

면접 질문들을 통해 UI 개발에 Promise를 활용할 수 있다는 것을 파악하거나 버블링 캡쳐링이 실무적으로 어떻게 사용되고 있는지 개인적으로 궁금증으로 되물어보기도 하는 등 면접을 진행하는 동안 성장한다는 느낌이 들어서 좋았다.

네라카쿠나 중견이라고 부를 수 있는 곳들은 모두 코테컷 당해서 슬펐다.

앞으로 어떻게 행동할 것인가?

올 한 해 동안 해커톤이나 스터디에 참여하면서 실력 있는 개발자분들을 많이 만날 수 있었다. 그리고 그분들이 그렇게 될 수 있었던 이유를 찾기 위해 이를 나름대로 분석하고 정리해보았다.

몇 가지 공통점이 있었는데 아래와 같다.

  1. 어떤 기술을 사용하기 전에 꼭 공식문서(혹은 좋은 개발 서적)를 읽는다. 이런 행동이 습관화되어있다.
  2. 남들이 시켜서 하는 게 아니라 자발적으로 꾸준히 뭔가(토이프로젝트 등)를 꾸준히 한다.
  3. CS나 알고리즘에 대한 중요성을 이해하며 이것들을 고려하여 작업한다.
  4. 그것이 왜 쓰이는지 본질을 제대로 파악하고 있다.
  5. 학습한 개념이나 해결한 이슈를 공유하는데 거리낌이 없으며 그만큼 그것을 위해 많은 시간을 할애했다고 느껴졌다.

2021년에는 이런 부분들을 조금씩 체화하면서 변화해나갈 것이다.

아직 스스로 한참 부족하다고 느껴지긴 하지만 내 목표는 Web Frontend 분야의 어느 한 축에서 Guru가 되는 것이다. 목표에 도달하기까지 몇 년이 걸릴지 모르겠지만 적어도 스스로 부끄럽지 않은 2021년이 되도록 노력해야겠다.

2020.log

IMD Author Avatar
Im-D
2020-12-31