들어가며

2018년이 끝나고 2019년이 시작된지 벌써 일주일이 지났다. 남들이 회고록을 작성한다고 했을때는 조금 오버하는 것이 아닌가하는 생각을 했었는데, 막상 사람들의 회고록을 읽고 보니 회고록을 쓰는 것에 정말 많은 의미가 있다는 생각이 들었다. 그래서 늦었지만, 2018년을 돌아보고 간단히 있었던 일들을 정리해 보려고 한다. 철저하게 개인의 기록과 기억에만 의지하는 것이라 날짜는 많이틀릴수도 있다.

1월

2018년은 정신이 나간 수준을 넘어 멘탈이 붕괴되기 직전의 상태로 시작했다. FE개발자로서는 두 번째로 제품을 런칭했는데, 해도해도 끝나지 않는 업무와 각종 개선작업들 때문에 런칭을 해놓고도 제대로 쉬지 못한 탓이 컸던것 같다. 사실 어떻게든 런칭하면 모든게 편해질거라는 안일한 생각이 스스로 멘탈을 더 힘들게 만들었다. 이 때는 1주일 마다 돌아오는 연구소 회의시간도 너무나 괴로웠다. 일이 손에 잡히지 않았으니 task는 늘 'progess'였고 그것이 너무나 연구소 사람들에게 미안했다.

결국 내 상태에 대해 동료들과 공유하고 한 달만 가벼운 작업을 하기로 결정하였다. Responsive 디자인이 전혀 적용되어있지 않았던 서비스에 responsive를 적용하고, 한글이 hard coding되어있는 모든 component에서 한글을 제거하고 i18n을 입히는 작업을 진행하였다. I18n작업은 노가다성 작업이라 정말 지겨웠지만 그만큼 부담이 없었고, responsive를 입히는 과정에서 component들을 refactoring하며 많은 것을 배우고 느낄수 있었다.

돌이켜보면 모두 피와 살이 된 조언들이 건방지게그때는 정말 짜증나게 느껴질 정도였다. 그냥 대충 넘어갑시다라는 말이 항상 목끝까지 올라왔지만, 그 분1은 그것을 절대 용납하지 않았다. 그러면서도 츤츤하며 한 달간 고기방패 역할을 해주시는 훈훈한 모습을 보였다 고기방패 2주일 만에 GG선언을 한 것은 잊자.

잊을뻔 했는데 역시나 나에게 많은 영향을 준 그 분2가 입사하셨다.

2월

그 분2는 역시나 입사하자마자 경력은 겉치레가 아니야!를 시전하시며 굉장히 많은 일들을 해내기 시작했다. 이 때부터 매우 신선했던게, 그 분들끼리 스타일과 생각이 많이 달라서 겹치지 않는 많은 것들을 배울 수 있었다. 그러면서도 신기한게 서로 큰소리 한 번 내지않고 서로 인정하며 팀워크를 다지는 모습이 인상적이었다.

연구소장님은 이때 쯤부터 술을 드시면 항상 저 두 사람들에게서 모든것을 쭉쭉 빨아먹으라는 상당히 원초적인 조언을 지속적으로 하셨고, 나 역시 그것을 지키기 위해 이때부터 노력을 많이 했었다. 아마 이때부터 다른 사람의 코드를 리뷰하는데 열정적으로 임했던 것 같다. 소장님이 말씀하셨던 저 두 사람들의 코드를 꼼꼼히 읽으면서 항상 견고함과 구조에 대해 많이 놀랐고, 그 결과 코드를 아름답게 짜는것에 대한 관심이 본격적으로 생겼다. 클린코드, 자바스크립트 패턴과 테스트 등의 책을 다시 읽기 시작했다.

또 친한 동생인 성윤이가 시작한 글또라는 커뮤니티에 글을 올리기 시작하였다. 이 때 글을 써서 정리하는 경험이 지금 많은 도움이 되고있다. 1기 모임이 끝나고 너무 바빠서 2기에는 참여하지 못했지만 정말 좋은 습관이 이때부터 생긴것 같다.

2월은 개인적으로 나에게 의미가 있었던 달이었다. 스트리미에 입사하여 개발을 시작한지 딱 1년이 되는 달이었기 때문이다. 그리고 나보다 먼저 입사하여 연구소의 살림꾼으로 일했던 DJ가 갑자기 퇴사의사를 밝혔다가 철회하는 일이 있어서 놀랐었다. 이때까지만 해도 아무도 이 회사를 나갈거라는 상상을 해본적이 없었다.

3월

내가 개발공부를 시작한 학원(Fast Campus)에서, 이번에는 현직 엔지니어로서 간단한 세미나를 시작하는 것으로 3월을 시작하였다. 뭐 사람이 구름처럼 모여든 것은 아니었지만 1년전에는 내가 세미나를 듣는입장이었던 것을 생각하면 꽤나 의미 있었다고 생각한다. 특별한 것을 준비했던것은 아니고 좋은 개발자가 되는법과 좋은 회사를 구분하는 법에 대해서 많은 이야기를 했다. 사실 이 때 했던 이야기들은 나에게 있어서 일종의 목표처럼 생각하고 있다.

와이프가 SI를 탈출한 것도 이때의 일이다. 길고 긴 SI라는 터널을 나와 FE로 전향하여 스타트업으로 이직을 했다. 많이 힘들었지만 일이 끝나고 집에와서 새벽 3~4시까지 Vue로 하는 과제를 도와주었다. 다행히도 좋은 결과가 있어 탈출에 성공하였고, 와이프 개인적으로도 기분이 상당히 좋았는지 평소에 쓰지도 않던 글까지 medium에 작성하였다.

업무적으로는 멘탈을 회복하고 다시 본격적으로 시동을 걸게 되었다. 런칭한 서비스의 글로벌 버전을 준비하는 일이었고, 그 분2가 리드하게 되었다. 사실 이때부터 연구소가 삐걱대기 시작했던것 같다. 물론 나는 짬이 딸려서느끼지 못했지만.

4월

개발자로 1년 조금 넘게 일하면서 충격을 받은적은 많지만, 같이 엄청 고생했던 동료가 퇴사하면서 굉장한 충격을 받았다. 3월 즈음부터 일에 흥미를 잃은 듯한 느낌은 받았지만 그것이 퇴사로 이어질 줄은 전혀 생각도 못했기 때문이다. 특히 가장 많은 시간을 붙어서 일한 동료였기때문에 정말 혼란스러웠다. 글로벌 서비스를 개발하는 일정이 한창 진행되고있어 그런 감정을 느낄 여유가 없는 상황이었지만 막상 일이 진행될 수록 그 동료의 빈자리가 크게 다가왔다.

이 동료뿐만 아니라 오랫동안 같이 고생했던 사람들의 줄퇴사가 이어졌다. 처음에는 디자이너, 그 다음은 OPS, 마지막은 마케터였다. 그러면서 새로운 사람들이 나간 사람들의 빈자리를 채우기 시작했지만 마음이 허전한건 어쩔수 없었다. 유일한 위안이라면 일이 바빠서 허전함을 길게 느낄수 없는 그런 상황이랄까. 이 때부터 인력 충원을 위해서 인터뷰를 많이 봤던것 같은데, 대부분 팀원들의 의견이 일치하지 않아 팀원으로 충원되지 못했다.

4월은 그렇게 정신없이 지나갔다. 그리고 이해할 수 없는 사람들이 이해할 수 없는 위치에 앉아 권한을 갖기 시작한 것도 4월 이었고.

5월

글로벌 서비스가 런칭되었다. 런칭과정이 그렇게 스무스한 것은 아니었지만 처음으로 국제화를 고려해본 프로젝트였다는 것에 의의를 가졌다. 지금은 거의 버려진 듯한 느낌이드는 프로젝트라 많이 아쉽지만 또 하나를 잘 해낸 느낌이었다.

이 서비스를 런칭하면서 또 하나의 습관이 생겼다. 여러가지 상황에 대한 확장성을 염두에 두는 설계를 하는 것이다. 기축통화가 다르기때문에 환율을 계산하는 로직이 달라야 했고, 글로벌 서비스와 기존 서비스간의 화면이나 기능들도 조금씩 달랐기때문에 기존의 component들을 많이 수정했어야 했다. 당연한 이야기지만 그 분들의 잔소리를 들으며 만들었던 component들은 수정사항이 거의 없었지만 기존에 개발해 놓고 refactoring을 하지 않았던 component들을 수정하면서 많이 고생했었다. 그렇기때문에 지금도 잘 안되긴 하지만module을 설계할 때 여러가지 상황을 고려하고 확장성과 폐쇄성을 항상 고민하고 있다.

기획단계에서 분명하게 기능들이나 요구사항들이 정해지지않으면 많이 고생한다는 것을 깨닫게 되었다. 무언가 명확하지 않으면 PM을 기다리지말고 개발자가 먼저 능동적으로 행동해야 한다는 것도.

런칭 후 얼마되지 않아 처음으로 신입개발자를 받게 되었다. 이 친구가 입사한다고 하였을때 나름 적당한 긴장과 적당한 부담이 있었다. 그 분들에게 받은 만큼 해주고 싶다는 생각도 컸고. 입사하고 약 일주일간 pair programming을 진행하고 기본적인 개념들과 팀의 convention을 말 그대로 주입했다. 다행히 2주 후의 첫 코드 리뷰에서 이 친구가 좋은 평가를 받아 내가 더 기분이 좋았던 기억이 난다. 그 만큼 potential이 훌륭했던 친구였다.

하지만 친하게 지냈던 디자이너가 퇴사해버렸다. 이 때부터 현실을 받아들이기 시작했다. 지금의 회사가 더 이상 모든 구성원들 매력적인 회사가 아니라는 것을.

6월

크게 하는 일이 없었다. 자잘한 화면 수정들과 운영팀에서 요청하는 사항들 뿐. 이제와서 생각해보면 좀더 기술적인 도전을 해볼걸 하는 미련한 아쉬움이 든다. web worker와 service worker를 사용해 본 것 이외에는 큰 무언가가 없었다. 그 분1은 burn out을 호소하시며 발리로 1달간 훌쩍 떠나버리셨고 회사는 고요했다.

오히려 이 달은 사이드 프로젝트로 진행한 안 고독한 미식가가 정말 재미있었다. TypeScript와 MobX를 적극적으로 써보았는데 개인적으로 정말 좋은 경험을 했다. 이 프로젝트는 2018년 들어서 순수한 개발을 즐겼던 짧은 시간이었다. 이 프로젝트 덕분에 6월을 어찌어찌 보낼수 있었다.

4월에 이어 두 번째 충격적인 사건이 있었는데, 그동안 정말 정신적으로 의지를 많이 했었던 연구소장님과 개발이사님이 퇴사하셨다. 전체 회식날 퇴사 이야기를 들었는데 술을 많이 마셨던 탓인지 두 분을 붙들고 광광 울었던 기억이 난다. 그리고 이 분들을 뒤따라서 백엔드를 담당하고 있던 대부분의 개발자들이 퇴사해 버렸다.

백엔드의 95% 정도를 담당하고 계셨던 분들이라 회사가 받은 충격은 꽤 컸다. 회사가 가진 기술의 근간이 흔들리기 시작한 것이다. 그리고 연구소장님과 개발이사님이 생각보다 훨씬 큰 역할을 하고 있었다는 것을 깨닫기 까지 얼마 걸리지 않았다.

7월 그리고 8월

7월을 시작하자마자 과감하게 2주의 휴직을 신청하였다. 무언가 공부에만 집중하여 머릿속을 채워넣고 싶었기 때문이다. Functional Programming을 공부하기로 마음먹고 scala와 clojure를 공부했는데, 오랜만에 새로운 언어를 공부하게 되어 신선하면서도 즐거웠다. 동시에 functional programming에 대한 개념도 좀 더 채워넣을 수 있었다. 6월쯤 들었던 유인동님의 강의를 remind한 것은 덤. 이때 스스로 배웠던 개념들은 지금도 요긴하게 잘 써먹고 있다.

반대로 회사에서는 ISMS인증 때문에 아무런 기능개선이나 개발 일정이 잡히지 않아 답답했었다. 서비스 순위는 점점 떨어져만 가는데 경영진들이 아무런 액션을 취하지 않았고 결국 우리팀이 먼저 움직이게 되었다. 하지만 이 움직임이 모든일의 시작점이었을 줄이야.

8월에는 똑똑한 숙녀였던 동료가 퇴사했다. '한국의 구글'이라고 불리는 구글코리아로 휙 가버렸다. 아마 그 친구가 제일 화가나고 실망한 상태로 퇴사했을 것이라 생각한다.

9월

새로운 서비스를 개발하게 되었는데 생각보다 간단한 서비스였다. 정말 좋았던것은 회사의 제품에 TypeScript를 본격적으로 도입을 하게 된 것이다. 덧붙여 기초적인 뼈대를 만드는 작업까지 내가 맡으면서 정말 좋은 경험을 하게 되었다. 이 경험이 지금의 회사에서 도움이 될 줄은 몰랐지만 말이다. 이때부터 제품 기획회의에 참여하게 되었는데 그동안 시니어들이 회의만 다녀오면 왜이리 힘들어하는지 알게되었다. 개발자는 제품의 품질에 대해서만 고민하면 안된다는 것을 깨닫게 된것도 이때다. 회의때마다 나오는 어이없는 의견에 강경한 자세를 보였더니 어느새 나는 '같이 일하기 힘든 개발자'가 되어있었다. 적당히 타협하고 내줄건 내주되 찾을 것은 찾아야한다그 분2의 말을 뼈저리게 실감한 달이다.

8월에 있었던 모종의 사건으로 그 분1은 팀장을 그만두었고, 그 분2가 그 역할을 맡게 되었다. 그리고 그 분1은 퇴사를 결심하고 우리에게 그 상황을 알렸다. 당연히, 우리팀은 동요했다. 내가 제일 크게 흔들렸던 것 같고.

10월

그 분2에게 9월에 시작한 프로젝트와 언제 시작할지 모르겠지만 추후 있을 프로젝트를 마무리 짓겠다고 약속했다결국 하나도 못지켰다. 10월은 제품개발과 면접준비로 더 바빴던것 같다. 그리고 역시 개발자는 면접 준비를 통해 많은 것을 배운다는 당연한 사실을 다시 느끼게 되었고.

결국 예전에 같이 일했던 사람들이 있는 지금의 회사로 이직하게 되었다.

11월

지금의 회사에 입사하자마자 code review를 해야한다고 강력히 주장하여 code review를 도입했다. 다들 필요성은 느꼈지만 시간이 없어 하지 못하고 있던 것들인데, 내가 때마침 도화선에 불을 붙이는 역할을 한 것 같다. 다행히 다들 필요성을 공감하고 있어서 아무런 문제 없이 잘 도입되었다.

그리고 앞으로 사용할 제품의 frontend에 쓰일 boilerplate를 만드는 작업을 진행했다. 나 혼자 쓸게 아니라서 생각보다 만만치 않았는데, 사실 어려운 것은 webpack의 설정같은 것이 아닌 팀원들과의 합의였다. TypeScript를 도입하는 것은 결국 무산되어 아쉬웠지만 대신 flow를 도입했고, thunk를 걷어내고 saga를 도입하기로 하였는데 이 과정이 무척이나 힘들었다. unit test의 범위와 방법에 대해서 정하는 것도 힘들었던 기억이 난다.

특히 힘들었던 것은 모든것을 혼자 먼저 연구해보고 장단점을 파악하여 팀원들에게 알려주고, 설득하는 일련의 과정이었다. 그 분들이 새삼 대단하다는 생각이 들기도 했고. 하지만 덕분에 좋은 경험을 했다고 생각한다. 나 나름대로의 기준이 생겼고 연구의 진정한 의미를 깨닫게 되었다. 역시 나쁜것 만은 없나보다.

12월

팀장님의 요청으로 FE파트의 code convention을 정했다. convention을 문서에 정리하면서 그 분들에게 1년동안 배운 기초를 쏟아내고 있다는 생각을했다. 개인적으로 그 분들의 흔적이 부정당하기는 싫었기 때문에 정성들여 문서를 정리했고, 다행히 팀장님을 포함한 팀원들이 납득했다. 내가 배운게 헛되지않았고, 틀리지 않았다고 작은 승리감을 맛보았다.

또한 새로운 서비스 개발을 하기 위해 언젠가 한번 해야겠다고 마음먹었던 라이브러리를 연구하고 팀원들에게 전파하는 경험이 정말 재미있었다. 그리고 이것을 통해 간단한 그래프와 차트를 구현하고 있는데, 도전할 것이 많아서 재미있는 시간을 보내고있다. D3js는 만만한 라이브러리가 아니라는 것을 온몸으로 느끼고 있지만 말이다.

그리고... 어쩌다보니 리드 프론트 엔지니어역할을 맡게 되었다. 시니어 엔지니어가 팀에 합류하면 당연히 물러날 계획이지만 정말 어쩌다보니 그렇게 되었다. 처음에는 부담되었지만, 지금은 적당한 부담감과 적당한 긴장이 도리어 내가 좀 더 공부하게 되는 요소가 되었다. 다행인 것은 팀원들이 나를 믿어준다는 것이다.

덕분에 난생 처음으로 새해 목표도 세우게 되었다. 그 분들처럼 선배 엔지니어로서 좋은 영향을 주고, 많은 것을 알려주어야 하기 때문이다.

마치며

이렇게 적고 보니 꽤 많은 일이 있었다. 지금 느껴지는 감정을 요약하자면...

  • 좋았던 점
    1. 좋은 사람들과 함께여서 좋았다좋은 라임이어서 더 좋다.
    2. 기술적으로 좀 더 성장했다고 느껴지는 한 해였다(물론 갈길이 멀지만).
    3. 인력시장에 찾을래야 찾을 수 없다는 유니콘 2명에게 정말 많은 것을 전수받았다. 나중에 집으로 초대해서 고기 쏴야지.
  • 아쉬웠던 점
    1. 좀 더 기술적인 도전을 해볼 기회는 많았는데 내가 게을러서 놓쳤다.
    2. 퇴사 직전에 내가 짠 코드들을 보았는데 그제야 보이는 헛점들이 많았다. 왜 정줄을 놓고 코딩하였는가.
    3. 독서가 모자랐다. 게임할 시간에 책좀 더 읽을걸.
    4. 개발자가 된 것을 후회하였다. 정말 멍청한 짓이지만.

좀 급하지만, 새해에는 아쉬웠던 점들이 없도록 더욱 노력해야겠다고 다짐하며 마무리 해야겠다. 다들 2019년에는 화이팅 하시길.