🐂2021년 회고록

작년에 이어 올해도 한 해를 되돌아 볼겸 적어본다. 이 글을 읽기 전 작년에 적은걸 봤는데 기억이 새록새록 떠오른다. 20살 때부터 적었더라면 어땠을까라는 생각을 잠시 해보며 글을 조금 끄적여 본다.

아직 프로 회고러(?)가 아니라서 아직 회고록을 잘 쓰진 못한다. 이렇게 쓰는게 맞는 건지도 모르겠고... 그래도 꾸준히 써봐야 내년엔 더 잘 쓰지 않을까!

다사다난

정말 많은 일이 있었던 해였다. 작년처럼 치열하게 살지는 않을 것이다라고 했지만, 아직 부족한게 많아 지키지는 못했다. 배울게 너무 많고 내가 겪어보지 못한 문제, 해결해야 하는 문제들이 참 많다. 어쩜 이렇게 끝도 없는지...

2021년에는 크게 제품 출시, 면접, 이직 이렇게 3가지의 일이 있었다. 개인적인 일들이야 더 있을 수도 있겠지만, 그런건 제외했다.

제품 출시 - A회사

잠깐 2020년 8월부터 12월까지 이야기

올해초 내가 만든 서비스가 성공적으로 출시됐다. "내신의 모든것"(줄여서 내모)이라는 자사 수강생들이 사용할 수 있는 고등학교 내신 문제 서비스였다. 이 회사에 이직할 때부터 이 서비스를 만든다는 것을 알고 이직했었다. 특히나 여러 문제가 많았던 거라 나에겐 뜻깊었다.

A회사에 다닌건 2020년 9월 말이었는데 내가 입사하고 그 전에 있던 유일한 프론트 개발자가 3일 후 바로 퇴사했다. 그분이 곧 퇴사하니 물어볼게 있으면 물어보라는데, "아니 뭐를 대체...". 어쨌든 나 포함 3명의 프론트 개발자가 신규로 입사해서 같이 기초를 다시 잡아나갔다.

기존 프로젝트 파악, 업무 분담, 코드리뷰 도입, 자체 디자인 라이브러리 개발 등

다시 만들자

프로젝트를 파악하며 느낀 것은 수 많은 하드코딩, 나는 사용해봤지만 다른 개발자들이 모르는 스펙(RxJS), 유지 보수가 어려운 코드 베이스 및 재사용성이 고려되지 않은 컴포넌트들, 자바스크립트로 만들어 기본적인 타입 체크 및 에러에 대한 대응도 많이 부족했고 실제로도 라이브 환경에서 에러가 발생하고 있었지만, 일단 리포팅만 해놓고 있는 상황이었다. 그리고 정말 느리고 비즈니스 로직 자체가 너무 비효율적이었다. 그래서 동료 개발자들과 이야기 해도 같은 결론에 다달았고, 다행히도 이때까지는 중간고사, 기말고사에만 사용할 수 있는 서비스라 6개월 정도의 시간을 벌 수 있어, 간단한 현재 상태에 대한 자료를 만들어 팀장님과 상무님, 기획자님에게 이야기 드리고 다시 만들기로 결정됐다. 솔직히 내가 주도하여 다시 만들기론 했지만 부담감이 컸다. 이미 라이브되고 있는 서비스를 다시 만든다는 것, 그리고 전보다 더 좋아진 것을 개발 팀장님 뿐만 아니라 비개발자분들에게 까지 인정받아야지 다시 만든 것에대한 당위성이 생겼다. 솔직히 누가 유지보수가 어려운 제품이라고 기존 제품에 신규 기능을 안넣고 다시 개발한다고 하는데 좋아할까. 그래서 나에게는 꼭 필요한 당위성이었고, 나를 조금 더 증명해야 했다.

저 연차는 얼마없지만 없지만, 레거시 코드 많이 수정해봤고, 성능도 개선해 봤어요.

매일 같이 새벽 3~4시에 퇴근하면서, 주말에도 자발적으로 나와서 일하면서 얻은 극도로 압축된 경험이 있어요. 믿어 보세요!

역시나 쉬운게 없네

근데 한달 정도 같이 일하다가 프론트엔드 개발자 3분중 한분이 다른 서비스를 맡게 되셨고, 또 한분은 다른 발표가 늦게낫던 다른 회사로 이직하셨다(조건을 들어보면 안 갈수가 없었다). 엎친데 덮친격으로 연말이라 사람은 더 안뽑히고 가끔 들어오는 면접은 연차는 다들 있으셨지만 너무할 만큼 노력을 안하시는 분들만 면접으로 오셨다.

우리 아직 할게 많은데 다들 어딜 가시나요...

그래도 내가 벌릴 일인 만큼 불평할 수도 없고 혼자서라도 끝까지 하기로 마음먹고 2020년 1월을 그렇게 시작했다. 남은 기간은 4월 초까지였다. 대부분 중간고사가 5월 정도에 있기 때문에 이 서비스를 아무리 늦어도 4월 초까지는 오픈했어야 했다.

프로젝트 아키텍처부터 다시.

그래서 잠시 블로그와 개인적인 관심에 의한 공부를 모두 내려놓고 서비스에 집중했다. 프로젝트의 기본적인 아키텍처에 대해 정의했다. 사람은 언제 뽑힐지 모르고 뽑히더라도 알려줄 수 있는 시간을 최대한 절약해야 했기 때문에 최대한 복잡하지 않으면서도 자세하게 정의했고, 프로젝트의 각각의 폴더에 README.md을 추가하여 이유를 설명해 놨고 예제 코드를 추가했다. 위키에 몰아서 적어 놓을까도 생각해봤는데, 예를 들어 천줄을 읽으라고 하는 것보다야 그것을 나눠 해당 부분을 알아갈때만 본다면 시간을 줄 일 수 있지 않을까 싶었다.

NextJS를 도입했다. 프레임워크이기 때문에 많은 부분을 이미 강제해주고 있어서 프로젝트 아키텍처를 잡는게 매우 수월했고 타입스크립트도 지원하고 있어 타입스크립트 도입도 가능했다. 또한 정적생성(SSG)를 지원하여 빌드 타입에 HTML 파일을 생성하여 CDN에서 캐시하여 빠른 서빙도 가능했다. 또한 기존 프로젝트를 봤을때 거의 모든 페이지가 계산된 데이터와 랜덤인 문제 데이터의 집합을 가져와 렌더링했다. 이런 부분은 정적 생성과 클라이언트에서 데이터를 가져와 결합하는 방식으로 문제를 해결하여 기존에 로딩이 느렸던 부분도 많이 개선을 하려고 했다.

Javascript에서 Typescript로

기존 자바스크립트 프로젝트를 파악하다 보니 정적 타이핑이 너무 그리웠다. API 문서를 확인하지 않으면 어떤 값이 오는지 예상조차 안됐고, 데이터 가공을 하는 로직에서는 변수명까지 줄여쓰거나 이해가 안되게 쓰인 부분은 더 날 힘들게 만들었다. 자바스크립트로 프로젝트를 만들면 빠르다는건 사실 아직 잘 이해가 안되는 부분이다. 아 물론 1시간 안에 무언가 만들고 유지보수 없이 끝이라면 자바스크립트로만으로 만들어도 빠를 수 있지 않을까. 아, 3월 경에 새로운 프론트엔드 개발자가 와서 타입스크립트로 된걸 보고 좋아했던 기억이 문뜩 생각난다.

이외에도

처음엔 Redux에 담긴 비즈니스 로직을 재사용하면서도 구문 및 사용을 단순화 하여 사용하기 위해 기존 Redux 대신 Redux-toolkit를 도입했고 비동기 처리는 Redux-ObservableRxJS를 그대로 이용했다. 일단 타입스크립트를 도입해서 타입핑만 되도 처음에는 너무 좋았으나, Redux-Observable의 로직을 재사용하려 이용하면 할수록 에픽에는 이해되지 않는 operator를 사용하고 무엇을 의도했는지 알 수 없는 로직이 많이 보여 대부분의 로직을 수정했었던거 같다. (어느정도 애플리케이션이 만들어졌을때 Reduxrxjs관련 로직을 전부 제거했고 react-query로 마이그레이션했다. 각각의 역할과 책임이 잘 나눠져 있었기 때문에 마이그레이션을 어렵지 않았다.)

디자인 라이브러리를 만들었다. Private Nexus 레포에 배포했으며, 디자이너와 미리 이야기하여 만들었기 때문에 스토리북으로 만들어 별도로 배포하여 지속적으로 수정 사항을 미리 수정했다.

폰트 최적화에도 힘썼다. 처음에는 간단하게 생각해서 Noto sans 구글에서 링크 넣으면 되겠지 했었는데 여기에도 공부할거 투성이었다. 폰트 파일의 타입부터 해서 fallback을 지정하고 CJK를 사용하며, 크기를 최대한 줄이는 등 많은 걸 고민하며 적용했던 기억이 있다.

런칭

제품은 성공적으로 런칭했고 기존에 존재했던 많은 버그들이 잡혔다. 기획자분이 QA까지 해주셨는데 기존 리포팅해놨던 버그가 대부분 해결되어서 모두 closed하고, 새로 찾은 부분에 대해서만 다시 리포팅해주셨던 기억이 난다.

애플리케이션의 성능을 정말 빨라졌다. 가장 먼저 느낀것은 비개발직군의 피드백이었다. 기획자분께서 "와 정말 전보다 엄청 빨라졌어요"라고 말했을 때의 쾌감과 뿌듯함은 잊을 수 없다. 실제로 측정해 봐도 전에는 화면이 정말 느리게 렌더링 되었지만 지금은 70% 이상의 유저의 FCP가 1,000ms이내로 빨라졌다.

느낀점 그리고 부족했던 점

1. 욕심을 많이 내지 말자.

아무리 간단해 보이는 프로젝트라도 내부에는 어떤 로직이 숨어있을지 모두 확인하기 어렵고, 코드가 있다고 재사용 가능하다는 것을 의미하지 않는다.

또한 개선을 하면, 개선을 한 부분 혹은 다른 부분에서 반드시 해결해야 하는 문제나 버그가 추가로 발생한다. 이 부분을 간과하여 개선하면 다되겠지라고 생각하고 일정을 타이트하게 잡으면 지킬 수 없는 일정이 되버린다.

2. 무언가 성능이 안나와 바꾸기로 했다면 기존 애플리케이션의 성능을 꼭 측정해 놓자.

내가 정말 간과했고 안일했던 부분이다. 나는 기존 앱이 너무 느렸기 때문에 이를 개선해야 한다는 거에만 초점을 맞추다보니, 기존 앱을 성능을 측정하지 않았다. 나중에 새로 만든 앱에 대해 성능 측정을 할때 비로소 내가 빠뜨린 부분이 있다는 것을 알게 되었다.

불행중 다행은 누구나 체감할 수 있을 정도로 앱이 빨라졌다는 건데, 사실 이것을 어디에 보고해야 하거나 수치로 봐야하는 니즈가 나중에 생겼다면 아주 난감했을 것이다. 꼭 성능은 수치로 기록해 놓자!

3. 디자인 시스템? 라이브러리?

규모가 있을때 만들자. 디자이너님과 나의 처음 목표는 매우 컸다. 우리가 만드는 앱에 우리 브랜드의 색을 입히고 어느 프로젝트에서나 재활용할 수 있는 라이브러리를 만들어 나중에 공수를 덜자는 거였다. 그래서 많은 것들이 고려되었고, 웹 프로덕트 디자인에 익숙하지 않는 디자이너분과 나 또한 디자인 시스템을 경험해봤지만 처음부터 빌딩해보진 않아서 서로 많은 의견 충돌과 너무 거대한 프로젝트가 되버렸다(물론 과한 덕분에 그 과정에서 더 배운 것도 많긴하다). 하지만 한명의 프론트 개발자가 관리하기가 너무 힘들었고 나 혼자 개발함에도 디자인 라이브러리에 문제가 있거나 뭔가를 추가된다고 하면, 디자인 레포 -> 작업 -> 개발 배포 -> 확인 -> 프로덕션 배포 -> 서비스 레포 -> 버전업 및 다시 설치(QA환경은 디자인 라이브러리는 없다.)를 반복하는 과정이 너무 비효율적이었다. 그리고 결론적으로 다른 서비스에 적용할 일은 생기지 않았다. 코로나 직격탄으로 서비스를 더 늘릴 수 없었고 다른 팀에서는 react를 기술 스탯으로 사용하지 않았다. 또한 개발팀은 많지도 않고 서비스 개발 및 유지보수를 해야되기 때문에 살아남긴 했으나, 다른 부서는 정리해고까지 되어 본사 인원의 반이 줄어 더더욱 신규 프로젝트나 기존 프로젝트에서의 디자인 라이브러리 재사용의 가능성을 줄어들었고 유지보수 비용만 늘어났다.

4. 주변 동료에게 더 잘해야지

3월경 신규 채용이 되었다. 신규 채용이 된 프론트엔드 개발자는 내가 추천한 첫 회사에서 같이 일했던 프론트엔드 개발자였다.

사람은 구하기 어렵고 회사의 브랜드 파워도 약해 잘 하는 프론트 개발자를 찾기는 하늘에 별 따기였다. 그렇다고 완전 신입분을 모셔오기에는 할 일이 너무 많았다. 또한 규모도 작아 잘하더라도 트러블이 날거 같아 잘하지만 태도 등이 애매한 검증되지 않는 사람은 오히려 팀에 악영향을 줄거 같아 뽑을 수도 없었다. 그렇던 중 전 동료와 연락이 닿았고 마침 이직을 고민하고 있어 추천으로 면접을 보고 우리 회사에서 같이 일할 수 있었다.

경력도 있고 열심히 하시던 분이라 들어오자 마자 안심하고 일을 바로 나눠줄 수 있었고 팀에도 잘 적응하여 다들 아직까지도 연락도 하고 주기적으로 만나면서 지낸다.

"개발만 잘하면 되겠지, 제품만 잘 만들면 되겠지" 했었던 마음이 없지 않았었는데, 이때 동료의 소중함과 좋은 사람의 소중함을 더 느끼며 나를 많이 반성해 보는 시간이 되었다. 실력도 당연히 중요하고 그와 더불어 태도, 톤앤매너 등도 정말 중요한 요소이다.

이직의 트리거

동료 개발자가 오기 전부터 어느정도 마음의 준비를 하고 있었고, 우리 회사에 지원하기 전에 동료분에게도 바로는 아니지만 이직할 거라 미리 말을 해두었다. 이유는 복합적이었던거 같다.

제품의 완성

내가 이직하여 직접 많은 것들을 만들고 고민하며 문제를 해결했었고 제품은 잘 출시되었다. 근데 제품이 성공하는 것과 출시는 다른 거였다. 일단 학원 재원생을 위한 서비스이다 보니, 사용할 수 있는 유저의 수가 너무 적었다. 유저가 한정적이면서도 많이 없으니 큰 문제도 생기지 않았고 나에 나름의 모든 것을 받쳐서 만들었지만 그 모습을 보니 힘이 많이 빠졌다.

그리고 문뜩 이전 회사에서 백엔드 개발자 티모와 둘이 밤을 새며 상품 리뷰 서비스를 만들고 어드민도 추가하며, 사람들이 상품 리뷰를 남길때마다 어드민으로 확인하고 좋아하며 뿌듯했었던 감정과 그때는 그게 하나도 힘들지 않았던 기억이 떠올랐다. 왜 였을까.

정리해고

물론 나와는 크게 상관이 없다고 말할 수도 있겠지만, 회사 인원의 절반이 나가게된 큰 사건 이었다. 개발팀이라고 안심할 수도 없었다. 그리고 실제로 내가 이직하고 1달 후쯤에 개발팀에도 정리해고가 일어났다. 같이 일을 했건 안했건 얼굴을 봤던 주변 동료가 나가는 모습을 보는건 너무 슬프고 누구나 불안해진다. 내가 회사에 와서 열심히 일하는건 우리 서비스가 잘 성장하고 회사가 성장하고 능력있는 동료들이 늘어나는 것이 기뻐서이다. 물론 더 좋은 선택을 위해 자발적으로 나가는 건 당연히 축하하고 기쁘다. 그런데 이건 아니다.

듬직한 동료

내가 나가면 우리 제품을 돌볼 사람이 없다고 하면 너무 불안했을 것이다. 하지만 새 동료가 생겼고 인수인계도 수월하게 되었으며 그 동료는 오히려 고생했다며 이직을 축하해 줬다. 물론 이 동료분도 나를 이어 더 멋진 신규 기능을 개발해 줬었고, 12월에 더 좋은 회사로 이직하여 잘되었다.

성장에 대한 갈증

제품이 완성되고, 사실 완성되기 전부터 이미 앞에 일정은 대부분 알고 있었다. 언제 출시되고 다음엔 어떻 기능이 추가될 것인지 등에 대해서 말이다.

이제 앞으로 1년 동안은 나에게는 유지보수와 몇 가지 기능 추가만 남아있었다. 상무님이 대기업에서 오셨었는데 정말 꼼꼼하고 철저한 플랜을 세우셨고 그대로 차근차근 진행되고 있었다. 나는 3월 정도부터는 정말 편했다. 든든한 동료도 생겼고 야근을 할 일도 없었으며 몇 가지 버그만 수정하면 됐다. 앞으로 할 일도 이미 했었던 것들에서 조금만 개선하거나 추가만 하면 됐다.

이때 먼저 연락이 오는 회사들을 통해 오랫만에 면접을 봐봤다. 그때 느낀건 다른 곳에서도 수 많은 문제가 발생하고 있고 난 지금 저런 문제들을 고민하고 해결해야겠다는 것이었다. 서비스 하나 내고 쉴 타이밍이 아니라고 느꼈고 더 성장 할 수 있는 곳을 찾기로 마음 먹었다.

면접

정말 다시 한번 부족함을 많이 느꼈다. 요즘 타입스크립트에는 어떤게 추가되었는지, 자바스크립트는 어떻게 동작하는지, 브라우저는 어떻게 동작하는지, 객체 지향이나 함수형 프로그래밍 등에 대한 질문이 쏟아졌지만 제대로 대답도 못했다. 내가 정말 가고 싶은 회사들이었고 너무 소중한 기회를 그렇게 날리고 다시 처음부터 공부를 했다.

이직할 준비를 제대로 하고 기회를 놓치지 말자!

또 실리콘벨리에 있는 멋진 스타트업들에서도 연락이 왔지만 영어를 못해 면접을 두번인가 거절했었다. 번역기만 믿고 영어 공부는 소흘했었는데... 기회는 준비된 자한테만 온다는건 확실한 사실이다.

영어 공부는 어릴때하건 어른이 되서 하건 늦지 않는다.

그래서 다시 처음부터 공부를 했다. 나는 경력직이 아닌 신입이라는 생각으로 처음부터 다시 공부를 했었고, 평소 내가 가장 관심있어하던 카카오 계열의 블록체인 회사에 합격하게 되었다.

이직

지금 8개월 정도 일한거 같다. 일명 "네카라쿠배" 중에 "카"의 계열사지만 대기업이다. 처음 접해보는 대기업을 문화가 아직도 낯설긴 하다. 확실히 지금까지 일해왔던 스타트업과는 다르다. 물론 좋게 다른지 나쁘게 다른지는 경우에 따라 다른거 같다. 😷

큰 장점 복지가 좋다 :). 깔끔한 사무실과 개인 법카와 연간 복지비도 있어 업무 효율도 눈치 않보고 늘릴 수가 있다. 맨 위에 있는 사진이 그 결과물이다. 카카오 자체에서도 많은 할인과 이벤트가 있어 이런것도 좋다. 휴가도 법정 휴가 이외에 더 준다!

다른 것들은 나중에 회고하며 작성해 볼 예정이고, 하지만 확실한건 여기서도 8개월 동안 개인적으로 꾸준히 공부하고 있으며, 매순간 주어진 문제도 해결하고 성장하고 있다.

2022년에는

운동을 하자.

너무 달린 나머지 건강에 소흘했던거 같다. 나는 평생 개발하고 싶고, 공부도 하고싶다. 이 직업이 좋고 내가 만드는 것들이 좋다. 평생할려면 건강 관리에 힘쓰자.

부모님께 잘하자.

예전에는 부모님은 다른 친구분들에게 자식 자랑을 듣기만 하셨다. 하지만 이제는 조금씩 우리 자랑도 하시고(형도 있다는...) 그걸 전화로 말해주신다. 너무 뿌듯하지만 한편으로는 죄송하다. 30살이 되어서야 부모님께 비싼밥 사드려봤다니 죄송하고 또 죄송하다. 더 잘하자!!!

더 많이 공부하자.

좋은 장비가 생기고, 좋은 환경이 되었으면 전보다 더 공부하고 성장하자. 가수 박진영님은 60세에도 춤 추기 위해 1일1식을 하며 아직도 건강관리를 한다고 하는데, 나는 작년에 고작 2년 열심히 살았다(물론 그 전에도 치열하게 살긴했지만 개발자로서 말이다). 앞으로 29년만 더 공부하고 배우고 적용하자. 그 후에는 비트코인으로 대박났...

Last updated