All Posts

2019년 회고

무슨 일이 있었나

1. 1월 퇴사

전 직장과 퇴사에 관해선 따로 지면을 할애하여 시리즈로 연재해야 될 이슈다. 하지만 솔직하게 모든 걸 웹상에 공개하기엔 무서운 세상이므로 조용히 살아갈 예정이다. 언젠가 허심탄회하게 말할 수 있는 순간이 오길 기대한다.

퇴사의 이유는 그곳에선 더 이상 발전할 수 없으리란 확신이 있었기 때문이다.

불안과 고민 속에서 퇴사를 고민하며 극한 스트레스를 받고 있었는데 결정적으로 아샬님의 유튜브를 보면서 오랜 세뇌가 깨어나기도 했다. 지금 생각해도 퇴사는 내 인생에서 가장 잘한 결정 중 하나일 것이다.

물론 좋은 회사에 대한 기준과 성장 방향에 대한 확신은 얻었지만 꼬여버린 커리어는 내가 풀어야 할 숙제가 됐다.

2. 달랩 멘토링 합류

아샬님이 멘토링을 시작한다고 하셔서 2월에 바로 신청해서 멘티가 됐다. 이후 회고의 내용은 대부분 멘토링 활동에서 얻은 것들이다.

멘토링에 합류하여 아샬님을 만난 것은 내 인생에서 가장 잘한 결정이다.

역시 코딩의 신!

3. 허리 디스크 재발

올해는 꼭 몸을 만들겠단 생각으로 2월부터 PT를 받았는데 4월 즈음 데드리프트를 하다가 결국 허리 디스크가 재발했다. 통증을 잊고 살아간 지 2년이 넘어가서 그런지 디스크 조짐을 눈치채지 못한 게 결정적 실수다.

허리 디스크는 극복의 대상이 아닌 관리의 대상이다. 생활 습관 전반적인 부분을 다시 점검했다. 사실 하고 싶던 일들이 허리 디스크로 또다시 방해받는 게 미칠듯한 스트레스였지만 그냥 내 삶에 주어진 과제라 생각하기로 했다.

운동선수에게 고질적 부상은 최악이듯 허리는 끊임없이 관리하겠다.

4. 기술 블로그 시작

아직은 번역글 1개뿐이지만 Gatsby를 이용해서 블로그를 구축했다. 내년엔 좀 더 활발한 블로깅을 해야겠다. 기존에 체계 없이 정리해놓은 TIL을 블로그에 Wiki 페이지를 만들어서 옮겼다. 물론 아직 Wiki는 미완성이긴 하지만 내년엔 Wiki를 통해서 나와 타인의 성장을 돕도록 하겠다.

5. 클린 애자일 역자 도전

아샬님과 함께 인사이트 출판사 클린 애자일 역자 모집에 도전했었다. 내가 작성한 번역글을 계기로 도전해본 것인데 아쉽게도 탈락했다. 출판사 측에서 보낸 샘플을 번역해서 보내는 게 과제였다.

확실한 건 나의 문체로 내 생각을 쓰는 것보다 번역이 훨씬 고통스러웠다. 원문의 뉘앙스를 훼손하지 않는 선에서 맥락상 적절한 한국말 단어를 고르는 게 정말 힘들었다. 앞으로 번역이 구리다고 불평하기 힘들 것 같다. 역자의 고통을 잠깐이나마 맛봤기 때문이다. 음… 근데 다시 생각해보니 역시나 구린 번역은 앞으로도 참기 힘들 것 같다.

6. 이태원 코딩 도장 시작

달랩 멘토링을 하면서 함께 모여 공부하는 즐거움을 느꼈다. 매일 모여서 공부하면 좀 더 빠른 발전을 이룰 수 있을 것이라 생각했다. 무엇보다 아샬님이 전수해주신 지침들을 혼자서 꾸준히 수행하기는 쉽지가 않았다.

아샬님의 익명의 알콜 중독자들이란 글을 읽고 역시 함께 하는 사람들이 있어야 내가 더 발전할 수 있으리란 확신이 들었다.

그래서 지인들과 지인들의 소개로 온 사람들과 함께 공부하는 공간을 만들었다. 사실은 내 집인데 원래 파티룸으로 꾸며놓은 거실이 꽤 크기 때문에 활용하면 좋겠단 생각에 시작했다. 이제 2달 즈음 된 것 같은데 일단 내가 게으를 틈이 없다. 쪽팔리기 싫어서 공부하고 솔선하다 보니 앞선 10개월보다 최근 2달이 제일 많이 발전한 듯하다.

쪽팔림 주도 개발은 역시 효과적!

어떤 기술을 경험했나

아래 나열된 모든 방법론, 언어, 라이브러리, 프레임워크에 능통하진 못했지만 경험한 것만으로도 매우 좋았다. 무엇보다 아샬님께 Best Practice로 배우다 보니 제대로 수련하는 방향이 무엇인지 알게 됐다.

방법론

  • TDD: 가장 충격적인 경험. TDD는 테스트 코드가 중심이 아니다. 테스트 코드는 부산물일 뿐이다. TDD는 설계 방법론이다. 물론 TDD를 한다고 좋은 설계를 보장받을 순 없다. 다만 설계의 이상 신호를 던져주는 지뢰 탐지기 같은 존재다. TDD를 잘하고 싶기 때문에 객체지향 이론과 수련에 더더욱 신경 써야 한다. TDD는 경험자에게 배워야 한다고 본다. 혼자 수련하기는 정말 힘들었을 듯. 이걸 혼자 쌓아온 아샬 그는 도대체…
  • 짝 프로그래밍: 짝 프로그래밍 또한 엄청 신선하고 대단한 경험이었다. 컴퓨터 한대로 같이 작업한다니. 이전엔 상상도 해본 적이 없는 작업 방법이다. 둘이 나눠서 하면 효율이 떨어질 것 같지만 다른 생각을 할 틈이 없기에 모든 집중력을 쏟게 되는 마법이 펼쳐진다. 프로그래밍 뿐만아니라 짝으로 스터디를 하는 것도 대단히 효과적이다. 앞으로 꾸준히 수련할 예정이다.
  • How to solve it: 수학자 풀리아가 정리한 문제해결 방법론이다. 이해-계획-실행-반성의 순서로 문제를 해결해간다. How to solve It & TDD로 인해 막연하게 두렵고 회피해왔던 코딩 테스트가 더 이상 두렵지 않다.
  • 클린 코드 & 클린 아키텍처: 이전에 코딩을 배울 땐 코드는 그다지 중요하지 않고 당장의 문제 해결이 중요하며, 코드 퀄리티에 집착하는 개발자치고 잘하는 사람이 없다는 소리를 듣고 배워왔다. 물론 과도한 최적화나 집착으로 인해 문제 해결을 놓치는 건 큰 문제지만 코드 퀄리티를 신경 쓰지 않으면 프로덕트는 점점 부패해간다. 본질적 문제 해결과 코드 퀄리티를 동시에 챙기는 건 물론 매우 어렵다. 그러니까 평소에 꾸준한 수련이 필요한 것이다. 평소 수련한 걸 바탕으로 무의식적으로 코드가 작성되는 법이다. 클린 코드와 클린 아키텍처를 공부하며 전체적인 수련 방향을 설정할 수 있었다.
  • Agile: 애자일 방법론에 대해 아주 잘은 모르지만 아샬님을 통해 애자일의 핵심이 방법론이 아님을 배웠다. 애자일의 핵심은 어떻게 고객에게 빠르게 가치를 전달할까? 라는 고민에서 시작됨을 알았다.

언어

  • JavaScript: 아샬님의 Data Strucuture & Algorithm 강의에서 TDD & How to solve it을 배우며 시작한 언어다. 같이 수강한 사람들이 JavaScript를 쓰길래 짝 프로그래밍을 위해 얼떨결에 시작했다. 근데 지금은 거의 주력 언어로 자리 잡았다. 코딩 테스트 문제를 풀 때 JavaScript가 참으로 좋다. JavaScript는 이제 거의 영어와 같다고 본다. 또한 가장 변화가 빠른 언어이다. 현대 언어에서 좋다는 패러다임이나 기능이 매년 엄청나게 반영되기 때문에 JavaScript는 꾸준히 수련해야 할 것이다.
  • TypeScript: 워낙 채용 공고에서 많이 요구되는 언어라 공부해봤다. JavaScript가 동적 언어이기에 갖는 불편함의 극복과 여러 편의 기능이 좋았던 언어 같다. Node.js 기반 백엔드 개발에선 TypeScript가 확실히 좋은 듯하다. 그러나 개인적으론 아직까지 JavaScript를 더 선호한다.
  • Kotlin: 전 직장에서 안드로이드를 개발할 때 Java로 개발했는데 개인적으로 Kotlin을 써보니 충격적이었다. 안드로이드 개발이 이렇게 편해질 수 있다니! 요즘은 주로 코딩 테스트 문제를 Kotlin으로 풀어보는데 정말 좋다. Java였다면 이렇게 간결하게 풀 수 있었을까 싶다. Kotlin은 계속 수련할 생각이다.

Framework & Library & Environment

  • Node.js: JavaScript를 사용하다 보니 자연스레 Node.js로 관심이 갔으며 채용 공고에 워낙 많이 찾는 기술이라 공부하게 됐다. Node.js & TDD로 Rest API를 만들어 봤는데 PHP(Laravel 아님. 순수한 PHP.)만으로 API개발을 해봤던 내 입장에선 충격적이었다.
  • React: 지금 프론트엔드에서 대세이고 당분간은 계속 대세일 기술. 나는 PHP로만 웹 개발을 해봤는데 프론트엔드 개발이 이렇게 재밌을 수 있음을 리액트를 통해 경험했다. 물론 리액트를 제대로 쓰려면 SoC에 대한 개념과 왜 리액트를 쓰는지에 대해 정확히 이해해야 한다. 리액트 자체에 대한 개발 경험이나 숙련도는 아직 좋다고 볼 순 없지만 리액트를 어떤 방향으로 사용해야 하는지 안다. 아샬님 덕이다.
  • Spring: 아직은 거의 모른다고 봐야하지만 스프링러너를 통해 배웠다. 스프링은 객체지향의 정수라 들었다. 확실히 그 구조를 보면 클린 아키텍처에서 말하는 부분이 녹아있다. 일단은 백엔드 개발을 주로 하고 싶기 때문에 스프링은 피할 수 없는 산인 듯하다. 내년엔 스프링을 주로 공부할 예정이다.

DevOps

  • Git: 전 회사에선 Git을 쓰지 않았기에 Git에 대한 목마름이 컸다. Git에 아주 능숙하진 않지만 달랩 멘토링과 이태원 코딩 도장을 운영하며 PR을 날리고 Merge 하는 협업 프로세스를 꾸준히 경험해왔다. 특히나 아샬님의 매운맛 피드백으로 인해 항상 커밋 메시지에 굉장히 신경쓰고 있다. 또한 코드 리뷰도 받아봤고 가능하면 다른 사람의 코드도 리뷰해주고 있다. 전 회사에서 프로젝트할 때 이렇게 Git으로 협업을 했었다면… 이란 후회는 있다.
  • CI/CD: CI/CD가 무엇인지 배웠고 Circle CI를 통해 CI/CD를 구축해본 경험이 있다. 물론 아직 자세히는 모른다. 나중에 회사에서 CI/CD를 구축해볼 수 있으면 좋겠다.
  • Docker: 아샬님 강의를 계기로 써봤다. ‘도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문’이란 책을 따라 실습하면서 도커 컴포즈와 스웜까지 사용해봤다. 충격적이었다. 서버 환경 설정이 이렇게 쉬워진다니. 너무 낡은 기술만 써왔던 듯.

무엇을 보고 들었나

강의

인프런에 구매만 해놓고 아직 듣지 못한 강의들이 많지만 일단은 완강한 것들만 적도록 하겠다.

  • Friday Night Training: 달랩에서 아샬님이 강의하신 Friday Night Training에서 Docker, DevOps, Git, GitHub, CI/CD, TDD를 배웠다. 이 강의를 통해 현대적 개발 패러다임과 기술의 존재를 알게 됐다는 점이 굉장히 좋았다.
  • Android Architecture Masterclass: Udemy 온라인 강의인데 상당히 괜찮았다. 안드로이드에서 MVC, MVP, MVVM 등 많은 아키텍처 패턴이 있는데 실상은 제대로 적용된 예제를 찾기가 매우 힘들다. 이 강의를 통해 적어도 어떤 방향으로 애플리케이션 구조를 잡아야 되는지 알게 됐다. 안드로이드를 잘 모르더라도 들어볼 만한 강의다. 사실상 객체지향 설계에 초점이 맞춰져 있다.
  • Data Structure & Algorithm: 아샬님께서 2달 동안 진행하신 자료구조와 알고리즘 강의였다. 아마 현재 내 개발 역량에 가장 큰 영향을 미친 강의일 것이다. 이 강의를 통해 TDD, How to solve it, 짝 프로그래밍을 제대로 경험했고 꾸준히 수련하는 계기가 됐다. 특히나 아샬님께서 유니콘 같은 존재인 TDD & 함수형 프로그래밍으로 코딩 테스트 문제를 해결하는 걸 보면서 감탄만 했었다. 이 수업 이후로 나에게 TDD는 더 이상 이상론이거나 환상 속의 테크닉이 아니다.
  • JavaScript Basics for Beginners: codingwithmosh.com에서 JavaScript를 시작할 때 들었던 강의다. ES6+ 문법을 반영하여 설명한다. 이미 프로그래밍 경험이 있어서 그냥 빠르게 봤던 것 같다. 일단 강사인 Mosh는 Best Practice를 준수해서 마음에 든다.
  • The Complete Node.js Course: codingwithmosh.com에서 Node.js Rest API를 공부하기 위해 들었다. TDD와 배포까지 다룬다. 무엇보다 Node.js API 개발에서 Best Practice로 권장되는 사항들이 코드에 많이 녹아있다. 안티 패턴이 반영된 예제들이 많은데 이런 예제들은 초보자들에게 잘못된 습관을 만들어준다. 그런 의미에서 처음 Node.js API 개발을 공부한다면 강추하는 강의이다.
  • DB 모델링과 서비스 아키텍쳐: 시니어 개발자이신 용영환님께서 진행하신 패캠 오프라인 강의이다. DB 모델링 뿐 아니라 엔터프라이즈 아키텍쳐에 대해서 많은 경험을 공유받을 수 있었다. 개발자라면 큰 기업에서 일해볼 필요가 있다고 느낀 계기였다. 말이 필요없다. DB 때문에 힘들어 한다면 수강을 권장.
  • Frontend TDD: 아샬님이 진행하신 Frontend에서 TDD로 개발하는 방법을 전수받는 워크숍이었다. 하루 종일 했지만 내용이 너무 방대해서 중간에 아샬님께서 굉장히 지쳐 보이셨다. 2일이나 2주에 걸쳐서 하는 게 좋겠다는 피드백을 드렸었다. 현시점에서 돌아보자면 이때 배웠던 개념과 지침들을 계속 개발할 때 지키려고 하다 보니 자연스레 클린코드 & 클린 아키텍처를 지향하게 되는 것 같다. 역시 TDD는 경험자에게 배워야 한다.
  • 리얼리눅스 Git 강의: 리얼리눅스에서 Git으로 협업하는 방법을 배웠다. 오픈소스에서 시작된 Git이기에 오픈소스 개발자분에게 실제로 오픈소스에서 Git으로 어떻게 협업하는지를 배운 좋은 경험이었다. 마지막 과제로 오픈소스에 작은 기여하기가 있었는데 아직까지 미루고 있다. 내년엔 작게라도 기여를 해봐야겠다.
  • 코드스피츠 85: 맹대표님께서 꾸준히 진행하신 코드스피츠에서 현대적 JavaScript 사용법을 배울 수 있었다. 제네레이터와 코루틴은 상당히 어려웠다. 이후에 각잡고 공부를 많이 해봐야 되는 부분일 듯하다.
  • 스프링러너: 우아한 형제들의 박용권 님께서 진행하시는 스프링 워크숍이다. 다루는 기술은 스프링이지만 클린 아키텍처와 객체지향에 대해서 많은 걸 배울 수 있었다. 개인적으로 스프링을 잘 몰라서 걱정이 됐었는데 Java만 할 줄 알면 큰 문제가 없는 수업이었다. 그 외에도 해박한 지식과 풍부한 경험을 바탕으로 중간중간 질문에 막힘없이 대답해주셨고, 저녁 식사에서 정말 귀중한 얘기를 많이 해주셨다. 꾸준히 공부하고 수련해온 시니어 개발자는 어떤 모습인가를 알게 된 귀중한 경험이었다. 따로 지면을 할애하여 반드시 후기 포스팅을 작성할 예정이다.

스터디

  • 테스트 주도 개발로 배우는 객체 지향 설계와 실천: 아샬님 & 멘티분들과 주 1회 진행했던 온라인 화상 스터디인데, 사실상 아샬님의 객체지향 강의였다. 다만 아쉬운 건 중간에 중단됐다. 따로 사람을 모아서 어떻게든 책을 끝낼 생각이다. 이 책은 테스트 주도 개발보단 객체지향에 초점이 맞춰진 책이다. 객체지향으로 제대로 개발해보고 싶다면 반드시 정복해야 하는 필독서인 만큼 스터디를 꼭 진행할 예정이다.
  • 달랩 짝 프로그래밍: 주 1회 달랩에서 아샬님 & 멘티분들과 같이 하고 싶은 주제를 짝 프로그래밍으로 해결하는 시간이었다. 요즘은 뜸해졌지만 매주 강남을 가는 길이 즐거웠던 이유다. 짝 프로그래밍을 통해 아샬님의 코딩 습관이나 TDD 노하우 등 정말 많은 걸 배웠고 흡수하려고 노력했었다. 역시 고수에게 배우는 게 가장 빠른 길이다.
  • 달랩 코딩 도장: 주 1회 달랩에서 코딩 수련을 하는 시간이다. 멘티분들 이외에도 내공이 깊은 현업 개발자분들이 오시는 경우도 있어서 상당히 재미있다. 항상 아샬님의 코드를 보며 좌절하는 게 꿀잼 포인트.
  • 공마스터디: 맹대표님께서 대표님 사무실에서 진행하는 비공개 스터디였다. 페북에서 운이 좋아 선착순에 들어서 참석하게 됐는데, 정말 많은 영향을 받은 스터디였다. 토론 스터디였지만 사실상 맹대표님의 지식회였기 때문에 굉장히 좋은 지식을 많이 흡수할 수 있었다. 켄트 벡의 구현 패턴 책으로 스터디를 진행했을 때 정말 많은 경험을 공유 받을 수 있었다. 이후 HTTP책을 진행하다가 구성원들의 배경지식에 비해 너무 어려워서 중단된 아쉬운 스터디이다. 아샬님을 만났을 때 충격을 맹대표님을 만나고 또 느꼈다. 이 업계엔 너무 굉장한 사람들이 많은 듯. 맹대표님은 수십년 간 묵묵히 수련해온 무림 절대 고수의 느낌. 정말 정말 대단한 분이다.
  • 이태원 코딩 도장: 달랩 코딩 도장 주 1회는 아쉬워서 지인들과 매주 수요일 이태원에서 코딩 도장을 진행 중이다. TDD & 짝 프로그래밍 & How tosolve it & Git을 모두 함께 수련한다. 정말 재미있다.
  • 이태원 코딩 도장 스파르탄 스터디: 내가 백수이기에 할 수 있는 스터디이다. 하루에 일정 시간 동안 같이 협력적 책읽기를 한다. 특히나 토요일은 아침부터 저녁까지 하루 종일 달린다. 공부가 정말 재밌다. 정독보단 빠르게 회독을 하는 걸 추구하는 스터디.

    • 웹을 지탱하는 기술(진행중)
    • 객체 지향의 사실과 오해(1회차 완료)
    • 도메인 주도 설계 구현(진행중)

2020

tyson

거창한 계획은 하지 않을 생각이다. 어차피 삶에서 매 순간 우선순위는 바뀌고 순간의 선택은 직관에 의존하게 된다. 습관이라는 프레임워크 아래 큰 방향성을 잃지 않도록 살아갈 예정이다. 어떤 습관을 만들고 꾸준히 수련할 것인지 고민해보겠다.

올해는 백수의 몸으로 회사에 있지 않고도 얼마든지 생산성 있게 살아갈 수 있다는 걸 몸소 체험했다. 또한 홀로 수익을 창출하는 경험을 통해 회사 밖에서도 충분히 내 능력을 증명할 수 있음을 느꼈다.

커뮤니티 활동이나 스터디를 통해 넓은 외연을 유지하는 게 정말 중요한 것을 느꼈다. 세상은 생각보다 빠르고 좋은 방향으로 발전한다. 회사에만 있다 보니 금세 뒤처진 자신을 발견할 수 있었다. 내가 할 줄 아는 것들은 기술력이 좋은 대부분의 회사에선 쓰지 않거나 하지 않는 방식이었다. 끊임없이 싸돌아다니자.

또한 함께 배우는 것의 즐거움을 느꼈다. 내년엔 더 많은 사람과 함께 공부하고 경험을 나눌 예정이다. 자세한 건 2020년 계획을 통해 고민해보겠다.

다들 회고를 쓰는 걸 보니 나도 회고란 걸 해보고 싶어서 해봤다. 적다 보니 생각보다 적을 게 많아서 놀라기도 했지만 허리가 아프고 몸이 아프다는 핑계로 매 순간 더 최선을 다하지 못한 나날들이 있었음에 씁쓸함을 느낀다. 더 많이 공부하고 더 많은 숙련도를 쌓을 수 있었을 텐데 하는 후회가 밀려온다. 좋게 말하면 다양한 걸 해봤지만 나쁘게 말하면 그 어느 것 하나 제대로 익힌 건 없는 느낌이다.

결국 제일 중요한 건 꾸준함이다.

하지만 적어도 개발자에게 꾸준한 수련을 필수적이며 꾸준한 수련만이 좋은 개발자가 되는 왕도임을 깨달은 한 해였다. 또한 어떤 방향으로 수련하는 것이 옳은지 이제는 조금 안다. 그것만으로도 의미가 있지 않을까 싶다. 핵인싸 개발자가 될 2020년을 기대해본다.