당장 눈 앞에 보이는 무언가를 해결하는 것보다 더 중요한 것은, 어떤 일이 있었고 어떤 경험을 했는지 되돌아보는 것이다. 이건 회사 뿐만 아니라 회사 밖에서 이루어지는 모든 일에 적용되고, 심지어 인간관계에서도 마찬가지다. 그동안 작은 일들에 대한 회고는 여러 번 하였는데, 개인적으로 연간 회고를 한 적은 한번도 없었다. 올해에는 어떤 일들이 있었는지 되새겨보기 위해 크게 이직과 사이드 프로젝트, 자기계발에 관한 이야기를 해보려 한다.


새로운 회사

새해가 들어서자마자 뜻하지 않은 몇가지 일들이 있었는데 그 중 하나가 3년 3개월 동안 함께 했던 팀과 헤어진 일이다. 당시엔 적잖이 충격을 받았었는데, 시간이 흘러 그 때를 생각해보니 아련한 추억이 되었다. 그 때 내가 어떤 생각을 가지고 새 출발을 결심했는지 내가 추구하는 가치 를 다시 되새겨보았던 기억이 난다. 아무것도 모르던 나에게 함께 지분투자에 참여할 기회를 주었고, 덕분에 열심히 일해서 회사가 인수합병되는 경험까지 할 수 있었다. 나 스스로 어벤져스라고 칭했던 팀이라서 시간이 지나고 보니 더 애착이 들었다. 자연스레 이직할 회사의 문화도 많이 신경을 쓰게 되었다.

jeremy

감사합니다

이직

A 회사는 같이 일했던 CTO님이 추천한 회사였다. 본사가 필리필에 있어서 2월에 회사 지원을 받아 마닐라에 다녀왔다. 나름 여행은 많이 다녀봤지만 동남아시아는 처음 가본거라 느낌부터 새로웠다. 당장 엄청난 캐시카우를 가지고 있었고 다음 스텝을 위해 개발팀을 꾸리고 있는 중이었다. 이 팀에 조인하면 글로벌한 신규 서비스를 만들면서, 꿈 꿔왔던 외국인 노동자 생활을 할 수 있었다.

B 회사는 그당시 1년 전에 인터뷰 절차 도중 다음 진행을 포기하였는데, 운 좋게 2차 면접만 진행하였고 원하는 팀에서 일할 수 있다고 했다. 이 회사에 조인하면 그동안 경험해보지 못한 큰 규모의 서비스나 플랫폼을 경험해볼 수 있을것 같았다. 그리고 자유롭게 망설임 없이 의견을 제시할 수 있고, 개발 주도적으로 보여서 그동안 같이 일했던 팀과 비슷한 문화를 가지고 있을것 같았다.

A, B 회사 모두 가고 싶어서 결정을 내리기까지 정말 힘들었다. 어느 회사를 가던 나에게는 도전으로 느껴졌고 배울 수 있는 게 많을것 같았다. 결국 B 회사를 선택하였는데, 가장 크게 고민했던 부분은 5년, 10년 뒤에 창업을 하든 스스로 무언가를 해내려면 지금보다 더 복잡하고(Complicated) 대규모(Huge) 도메인과 시스템을 경험해보는 것이었다. 그리고 플랫폼 개발에 대한 경험이다. 그동안 사용자와 직접 맞닿은 서비스를 주로 개발 해와서 서비스 뒷단에 존재하는 플랫폼은 어떻게 만들어 나가는지 알고 싶었다.

어느덧 10개월

어느덧 입사한지 10개월이 되었다. 우리팀 리더는 일의 모든 과정을 공유해주고 팀(팀원)의 성장에 관심이 많다. PM은 단기적인건 물론이고 장기적으로 모두가 같은 목적지를 바라보고 나아갈 수 있도록 Product RoadMap을 만들고, 우리 팀의 성과가 회사에 어떤 영향을 미칠 수 있는지 명확한 지표도 고민해준다. 우리 팀은 3주 단위의 스프린트로 일을 하고, 스프린트 마지막 주에는 각 스프린트에 목표했던 데모를 보면서 회고를 한다. 그리고 효율적으로 일하기 위해 이것, 저것 시도해보기도 한다. 입사하기 전에 생각했던 것처럼 도메인과 시스템은 복잡하고 아직 알아가야할 게 많다. 알아가야 할 게 많다는 건 아직 배울 점이 많다는 뜻이 아닐까? 내년에는 궁금한 것 있으면 더 열심히 물어봐야지.

회사에서의 회고

우리팀이 2020년 한 해동안 어떤 성과를 이루었는지 지표를 확인하면서 각자 회고하는 시간도 가졌다. 업무, 회사생활, 개인생활에 대해 각각 좋은점, 아쉬운점, 개선할점을 적어보았다.

좋은점

  • 🔥 이 났을때 같이 끌 수 있는 팀: 🔥 은 팀에서 생각지 못한 버그나 장애가 발생했음을 나타내는 용어다. 사고가 터졌거나 터질것 같으면 망설이지 않고 "불이야"를 외친다. 그럼 모두가 달려와서 같이 해결하려 든다.
  • 테스트를 필수로 작성한 경험: 신규 프로젝트를 시작하기 전에 Test Coverage n%를 유지하자는 목표를 세웠고, 혹시나 떨어뜨릴까 염려하며 테스트를 열심히 작성하였다. 잘 짜여진 테스트 코드는 코드에 대한 신뢰도를 올려준다.
  • 전부다 한번씩 만져본 경험: 작지만 버그 수정이나 기능을 추가하면서 팀에서 관리하는 많은 프로젝트를 한번씩 다뤄보았다.
  • 새로운 문화: 상자 밖에 있는 사람에 대한 리뷰를 하면서 행보관 문화를 잠깐 적어놨었다. 용어만 보면 군대 같아 보이는데;;; 일을 더 효율적으로 하기 위해 생긴 것들이다.

아쉬운점

  • 리스크 있는 업무: 요즘 자주 드는 생각이다. 더 도전적인 업무를 해보고 싶다는 생각이 들어서 적었다. 나중에 더 큰 일을 해내려면 지금보다 리스크 있는 업무를 견뎌봐야하지 않을까?
  • 도메인에 대한 이해: 되돌아보니 입사하고 1주일만에 개발을 시작했던것 같다. 시스템과 우리팀에서 다루는 도메인에 대한 이해가 없이 개발부터 시작하니 아직까지 그 여파가 남아있는것 같다. 어떤것에 익숙해지는건 시간 투자하기 나름이라고 생각하는데, 더 투자할 것인가… 말 것인가… 사이에서 왔다갔다 하는것 같다.
  • 야근: 신규 서비스 개발을 하면서 야근을 많이 했다. 늦게까지 야근하면 다음날 늦게 출근하게 되고, 이게 반복되었던 적이 있었다. 야근은 시간이 부족해서 하는것이지 개인성장에 도움된다고 생각하지는 않는다.
  • 스터디: 개발 스터디를 하자는 얘기가 몇번 나왔었는데 바쁜 시기라서 그런지 흐지부지 되었다.
  • 관계: 친한 친구와 이야기하다가 알게 된건데, 나는 마음을 아주 천천히 여는 사람이다. 깊은 유대 관계를 가지려면 시간이 많이 필요하다. 그래서 회사 사람들과 아직 깊은 관계를 갖고 있지 않다. 그래서 좀 아쉽지만, 시간이 해결해줄거라 믿는다.

개선할점

  • 테스트 작성이 힘든 환경에서 외줄타기를 하는 기분: 연관되어 있는 의존성들 때문에 테스트 작성이 어려운 프로젝트가 있다. 또는, 작성된 테스트가 없는데 기능 추가를 해야 하는 상황이라면 조금 난감해진다. 기존 동작을 이해하고 나서 그에 맞게 성공과 실패 테스트를 작성하고, 그 다음에 기능 추가를 해야되나? 시간이 부족해서 나도 테스트 없이 기능 추가를 한 적이 있다. 이럴때면 외줄타기를 하는 기분이다.
  • 더 큰 일을 해내기 위해 열공: 아쉬운점에서 얘기한 리스크 있는 업무를 하는 것과 관련있는 말이다. 도전을 요구하는 일을 해내려면 부족한 지식들이나 경험을 채우기 위해 열공해야겠다는 생각.
  • 벽을 뛰어 넘기: 가끔 '여기까지만 해도 괜찮겠지'하는 생각이 든다. 완벽을 얘기하는게 아니라, 귀찮아하거나 나태함을 넘어서자는 뜻이다. 그리고 이 기능을 사용할 사람의 입장에서 한번 더 생각해보면 좋겠다.

사이드 프로젝트

아침마다 회사 근처에 있는 카페에서 커피를 사서 출근을 했다. 평소 자주 가는 카페인 스타벅스보다 원두의 향이 진하고 커피도 맛있다. 아침 출근 시간과 점심 시간에는 주문을 하기 위해 기다리는 사람과 커피를 받기 위해 기다리는 사람들로 분주했다. 스타벅스에 있는 사이렌 오더를 이 카페에서도 쓰고 싶었다. 그렇게 사이드 프로젝트 MochaOrder 가 시작되었다. 같이 만들어 보기로 한 친한 지인들과 함께 1월 13일에 첫 모임을 가졌다.

첫 회의 내용

첫 회의 때 우리의 목표는 한 바퀴 사이클을 테스트할 수 있는 MVP(Minimum Viable Product)를 개발하는 것이었다. 여기서 한 바퀴라 함은, 사용자가 음료를 선택하고 결제하면 포스기(주문을 받는 장치)에서 주문의 상태를 변경하고, 음료 제조를 다 하면 완료 상태로 변경하고, 사용자가 확인하는 시나리오이다. 이 목표를 정해놓고 우리는 매주 월요일 퇴근하고 행아웃에서 만났다.

사장님 이거 써주세요

이 Product을 구현할 때 가장 큰 허들은 주문을 처리하는 장치인 포스기(POS)이다. 우리는 한동안 모여서 포스기에 대한 고민만 하였다. 대충 찾아보니 우리가 포스기를 직접 연동하려면 윈도우 XP(실화냐;;) 위에서 실행 가능한 클라이언트 앱을 만들어야했다. 윈도우 XP가 아니더라도 윈도우 앱을 만든다는 것 자체가 꺼림칙했다. 결국 우리는 한 사이클을 돌려보는게 목표니까 안드로이드 태블릿을 구매해서 포스기를 흉내낸 웹 애플리케이션을 개발하기로 결정했다. 쿠팡에서 값싼 안드로이드 태블릿을 하나 구매하고, 실제로 주문서(영수증) 프린트도 할 수 있도록 블루투스 영수증 프린터도 구매하였다.

order

React Web Application(좌), Flutter iOS Application(우)

MVP에서 제공하는 기능은 아래와 같다. 실제로 고려해야할 사항은 엄청 많았는데 자르고 잘라서 기본적으로 포함되어야 할 것들만 개발했다. 예를 들어, 음료 못받았으니 환불해달라고 때쓰는 사람이 있을 수도 있고;; 여러 음료를 동시에 주문했는데 부분 취소는 어떻게 할 수 있는지 등은 고려하지 않았다(이런 CS가 생기면 마냥 행복할 것만 같았다).

  • 주문조회: 현재 제조중, 제조완료 상태의 주문 목록을 보여준다.
  • 히스토리: 수령완료와 취소된 주문건들에 대한 목록을 보여준다.
  • 메뉴 업데이트: 앱에 노출될 메뉴를 설정할 수 있다.
  • 매출조회: 하루 단위로 주문건들에 대한 총 매출을 보여준다.
  • 정산내역조회: 매출에서 기타 수수료(0원)을 제외한 정산 결과를 보여준다.
  • 스토어: 카페 영업 시간을 관리할 수 있다.
  • 지원: CS는 제가 처리해드리겠습니다.

admin

Admin - 정산 페이지

카페 사장님이 사용할 프로그램은 React, Redux Saga, Websocket, Protobuf 등을 사용해서 만들었다. 이 Web Application은 안드로이드 Native app의 webview로 제공되고, 안드로이드의 WebAppInterface를 통해 안드로이드의 메서드를 호출할 수 있다. 사용자가 커피를 주문하면 안드로이드 태블릿에 올라간 웹뷰에 주문이 생성되고, printOrder라는 메서드를 호출하면 블루투스 프린터를 통해 주문서가 출력된다.

order sheet

사용자가 주문을 하면 블루투스를 통해 주문서가 프린트된다.

유저가 모바일 앱에서 주문을 요청하면, 서버는 주문을 다시 카페 사장님이 사용하는 웹 앱에 전송한다(Server-side-Push). 이러한 양방향(Bi-directional) 통신이 가능하도록 서버는 gRPC 기반으로 개발되었다 . 처음에 통신 프로토콜로 gRPC만 사용하였는데, gRPC는 그 특성상 HTTP/2를 통해 실행된다. Android에서는 몇가지 설정을 해주면 HTTP/2를 사용할 수 있는 반면, 웹 애플리케이션에서 HTTP/2를 쓰려면 Envoy를 통해 프록싱해서 사용해야 된다. Envoy는 HTTP/1.1과 HTTP/2 간의 트랜스퍼를 도와주는 프록시라고 보면 되는데, 처음엔 이걸 써보려고 며칠을 삽질했었다. 굳이… 이렇게까지 해야되나 싶어 웹 애플리케이션 통신에는 netty 기반으로 WebSocket 인터페이스를 추가하였다. 서버와 클라이언트 간의 메시지 정의에는 Proto Buffers를 사용하였는데, 가장 큰 매력은 Write once, run anywhere이다. 메시지 정의를 한 번만 해놓으면 Go, Java, Python, Objective C, Javascript 등 다양한 언어와 플랫폼에서 동작할 수 있도록 컴파일해준다. 새로운 프로젝트를 하게 되면 또 사용해보고 싶을 정도로 좋은 경험이었다.

긴 여정

long long

매주 쌓인 회의록 덕분에 스크롤이 아주 작아졌다.

이걸 여정이라고 해도 될지 모르겠다. 처음에는 2~3개월 동안 만들어보자는 목표를 세웠는데 어느새 11개월이 지나있었다. 중간에 새로 만들어보자는 의견부터 시작해서 많은 일들이 있었다. 갈수록 속도는 아주아주 느려졌다. 회사 일, 개인적인 약속 그리고 결과물이 원하는 만큼 만족스럽지 못해서 모두가 말은 안하지만 지쳐있었다. 그러다가 11월쯤이었나? 같이 개발하던 지인의 추천으로 4년전에 구매해놓은 린스타트업을 읽기 시작했는데 책의 머리말에서부터 뼈를 때려맞은 기분이었다.

린 스타트업 방법은 반대로 회사를 어떻게 ‘운전’해 나가는지를 알려준다. 수많은 가정을 바탕으로 복잡한 계획을 만들고 그것을 실천해 나가는 것이 아니라, ‘만들기-측정-학습’이라는 피드백 순환을 통해 운전자와 운전대가 서로 상호 작용해 나가는 것처럼 끊임없이 조정해 나가는 방식을 알려준다.

유저의 사용성만 고려하면 됐던 기존의 서비스들과 달리, 우리가 만든 Product에 대해 피드백을 받으려면 앱을 사용할 유저 뿐만 아니라 주문을 받고 커피를 만들어 줄 사장님이 필요했다. 그렇게 11개월 동안 매주 월요일에 모여 무언가를 만들어보긴 했지만, 실제로 이 제품을 사용하고 피드백을 줄 사장님을 만나보지 못했다. 만들기만 할 뿐 측정할 수 없기 때문에 학습 또한 불가능했다. 언젠가부터 잘 나아가던 빛이 매질의 경계를 만나 꺾이는 것만 같았다. 말을 꺼내기까지 힘들었지만 이 프로젝트를 어떻게 하면 좋을지 다같이 이야기하는 자리를 가져야겠다고 생각했다.

11개월 동안의 회고

1달 동안 무언가를 꾸준히 하는 것도 힘든데 우리는 11개월 동안 딱 5번 빼고 매주 월요일에 모였다. 모두가 소중한 시간을 투자해서 만들었지만, 사용할 사람 1명 없다는게 너무 슬펐다. 결과는 좋지 못했지만, 우리가 해왔던 것들 중 좋은 점은 유지하고 고쳐야 할 점은 개선해서 하나라도 얻어갔으면 하는 바람에 회고를 하자고 제안하였다. 회사에서 하고 있는 회고 방식 중 K(Keep), P(Problem), T(Try)만 따로 뽑아서 적어보기로 했다.

KEEP

Keep - 잘하고 있는 점

Problem

Problem - 문제라고 생각되는 점

Try

Try - 시도해보면 좋은 점

우리는 11개월 동안의 Keep, Problem, Try를 알아보면서 웃고 떠들었다. “나도 이렇게 생각했는데 너도 이렇게 생각했구나.” 그동안 바깥으로 드러내지 않고 개인적으로 생각하고 있던 고민들이 회고를 통해 공유되었다.

Problem을 보면 프로젝트 기간에 대한 이야기와 제품에 대한 피드백이 가장 눈에 들어온다. 처음에 지인들에게 이걸 만들어야겠다고 얘기한 이유 중 하나는 유사한 서비스들보다 더 잘 만들 수 있다는 확신 때문이었다. 하지만 막상 뛰어들어보니 생각만큼 쉽지가 않았다. 개발하는 것과는 별개로 요구되는 것들이 있었다. 오프라인에서의 노하우가 없더라도 무작정 달려갈 수 있는 용기와, 일정이 길어지지 않게 MVP를 잘 다듬어보는 능력도 필요했다. 다음에 무언가를 새로 만든다면 린 스타트업의 가이드처럼 시행착오를 겪고 빠르게 개선할 수 있는 구조를 만들어놔야겠다고 느꼈다.

오랜 시간동안 같이 고민하면서 만들어준 Jenny, 주차네이마르 Jr, 여러분에게 감사 큰 절 올립니다.

gg


독서

코로나 바이러스 덕분에 집에 있는 시간이 많아져서 세어보니 책을 40권이나 읽었다. 책장에 정리하기 전에 사진으로 남겨보았다. 읽고나서 블로그나 일기에 써놓은 책들은 내용이나 느낀점이 분명하게 기억에 남았는데, 무슨 내용이었는지 기억이 잘 나지 않는 책들도 있었다.

개발

개발서적은 회사 업무와 관련된 책을 많이 읽었다. 협업에 필수적인 Git을 더 잘 알기 위해 추천받은 책을 구매한 기억이 난다. 그리고 spring boot, kotlin, java를 주로 사용하고 있어서 관련된 책들도 보인다.

소설

히가시노 게이고의 나미야 잡화점의 기적을 읽고 나서부터 신간이 나올때마다 틈틈히 사서 읽고 있다. 뉴스기사나 홍보자료들 보면 제2의 나미야 잡화점의 기적이라는데.. 히가시노 게이고의 작품답게 몰입감을 주는건 좋았지만, 나잡기와 비교할만한 감동을 주지 못했다.

무라카미 하루키의 초기 장편 중 하나인 양을 쫓는 모험도 재밌게 읽었다.

한국에서 유독 인기가 많은 베르나르 베르베르 책은.. 다음에는 사서 읽지는 않을것같다. 2020년 신간이었던 기억도 상상력이 풍부해서 흡인력은 상당한데 책을 읽고 나면 남는게 없어서 '뭐지'하는 느낌이랄까. 현시대의 일상들을 반영한 작품들인데 재미있어서 하루도 안되어 뚝딱 읽을 수 있다.

에세이

기억이 남는 에세이는 많이 없었다. 하나를 꼽으라면 라틴어 수업을 추천하고 싶다. 한국인 최초, 바티칸 대법원 변호사인 한동일님이 서강대학교에서 한 라틴어 강의를 바탕으로 쓴 책. 이 책의 제목은 <라틴어를 통해 배우는 인생 수업>의 줄임말이라고 생각한다. 이 책의 서문과 끝인 감사문은 강의를 수강했던 학생들의 이야기로 이루어져있다. 학생들은 단순히 <초급 라틴어>, <중급 라틴어> 강의를 듣고 학점을 받는것 이외에 이보다 더 큰 값진 인생의 교훈을 얻었다. 책의 모든 챕터는 라틴어 한 문장을 시작으로, 그 문장에 포함된 라틴어와 관련된 역사, 문화 등을 설명하면서 인생의 교훈을 엮어낸다. 그리고 마지막에는 항상 나에게 그렇게 하고 있는지 되물어본다.

자기계발

사진을 보니 '자기계발 서적 진짜 많이 읽었구나' 하는 생각이 든다. OKR, 상자밖에있는사람, 규칙없음은 책을 읽고 나서 생각해볼 것과 배울 점들이 많아서 블로그에 정리했었다. 그 외에 커뮤니티를 장려하는 내용인 홀로 성장하는 시대는 끝났다와 도요타의 린 생산방식을 스타트업에 적용한 린 스타트업, 브랜드 기반의 마케팅과 달리 지표와 ROI 기반을 강조하는 그로스 해킹도 재밌게 읽었다.


올해의 영상

How to Maintain Self Motivation - Jongshin Yoon

90년대부터 음악을 해왔던 종신옹은 대중가요의 등장, mp3의 불법 다운로드 시대를 대를 거쳐 지금 음악 산업을 휘어잡고 있는 스트리밍 플랫폼들까지 다양한 변화를 거쳐오면서 지금 자신도 무언가를 하지 않으면 안되겠다는 생각에 <월간 윤종신>을 시작했다. 그러다보니 종신옹의 하루 일과는 <월간 윤종신>, 회사 일, 방송 일, 가족 일 조금. 이 패턴으로 10년을 살아왔다. 이 얘기를 들었을때 <월간 윤종신>을 기획한 것 만으로도 대단해보였는데, 종신옹은 그건 누구나 생각할 수 있는거라고 아무렇지 않게 얘기를 했다.

  • 신의 한 수라면, <월간 윤종신을>한 게 아니라 <월간 윤종신>을 3년 이상 한 것이다.
  • 위기에 묘수는 없다. 생각보다 미련하고 꾸준히 버티는 것이 방법이라고 한다.
  • 타인의 평가에 자주 흔들리는 사람은 인생의 노선을 자주 바꾼다. 같은 일을 오래 하지 못한다. 그렇게 자꾸 옆길로 새다가 보면 본질을 놓칠 수 있다.
  • 창작 철학 중 하나는 "트랜드는 없다." 트랜드는 미디어가 만들어 낸 말이라고 생각한다. 분석을 통한 창작은 리딩이 아닌 팔로워라고 생각한다.
  • 이방인으로 살아보고 싶을 정도로 청년같은 마음