개발자로서의 회고
수많은 2018년 회고의 글을 읽어 가며 나 스스로 역시 이 흐름에 빠지고 싶지 않았다. 그래서 2019년 01월 01일이 오늘 펜을 들게 되었다. (라고 하지만 실제로는 레오폴드 갈축 기계식 키보드를 두드리고 있다.)
지인의 소개로 외주 개발을 하게 되었다. 지도 프로젝트. 프런트 단은 타입스크립트로 로직이 돌고 view는 또 신기하게 그냥 jQuery와 바닐라 자바스크립트로 돌고 있었다. 내가 전임자의 파일을 받았을 때 script.js 파일의 길이가 1200줄... 그리고 내가 프로젝트를 마칠 때 즘은 2400줄이 되었다. 지금 생각하면 말도 안 되지만 당시엔 그렇게 짰다. 타입스크립트의 맛?을 조금 본 경험과 길 찾기 탐색 알고리즘을 만져본 경험이 되었다. 그리고 외주란 클라이언트의 요구사항이 명확하지 않으면 항상 어려움이 있고, 그렇다 할지라도 개발자가 주도해서 제안하고 논리적으로 뒷받침한다면 클라이언트 역시 받아들인다는 것을 배웠다.
17년 말부터 인사노무 SaaS 스타트업에서 백엔드 개발자로 일하게 되었다. 개발자로 취업할 생각은 없었는데 월 구독형 소프트웨어 사업 관련하여 조언을 구하러 갔다가 대표님의 매력에 빠져 팀에 조인하게 되었다. 모든 것을 해 낼 수 있다는 자신감으로 들어갔지만, 실제로 개발 속도를 맞추기 위해 야근은 기본이요, 침낭을 사무실에 놓고 자주 청소하시는 아주머니의 인사로 하루를 깨곤 했다.
프런트, 백엔드 가릴 것 없이 기능 단위로 개발을 해 냈어야 하는데, 팀에서 새롭게 도입한 애자일 스크럼 개발 방식에 따라 속도를 내는 만큼 그대로 팀에 공유가 되었다. 웹 개발에 대한 지식을 이제 막 받아들이던 시절이었고, 여러 가지 기술을 빨리 학습하는데 아직도 어려움이 있던 게 사실이었다. Sequelize 특정 query 옵션을 걸 줄 몰라서 database touching을 두 번씩 한다든지, 프런트엔드 쪽 scss 빌드 처리를 하지 않은 채 배포하여 우리 웹 서비스를 망가뜨린다든지, 주니어로서 많은 실수를 했다.
그런데 다행히도 팀에 엄청난 퍼포먼스를 내는 사수가 있었다. 사수라 표현하기엔 그분은 부끄러워하겠지만, 나로서는 처음 회사에서 만난 기술 멘토인 셈이다. 이 분은 비록 개발 경력이 2-3년 차였지만, 튼튼한 컴퓨터 지식을 바탕으로 믿을 수 없을 정도의 학습 속도와 개발 속도를 내던 분이었다. CSS가 너무 하기 싫어 팀 회고 때 징징대곤 했다.
"각자가 좋아하는 부분을 개발해야 더 속도가 나지 않겠느냐"
해서 백엔드 쪽만 개발하게끔 내 의견을 들어줄 것 같았지만, 돌아오는 대답은 꽤나 충격적이었다.
"한 번 그 기능을 맡았을 때 (css를) 제대로 하면 다음부턴 할 수 있을 거예요"
처음엔 이 대답이 굉장히 섭섭했다. 나는 백엔드 개발자로 들어왔고, 그래서 백엔드에 집중하고 싶은데, 자꾸 회사에선 프론트, 백, css 모든 것을 다 해냈어야 해서 처음과 이야기가 다르다는 생각을 했다. 하지만 이내 사수의 이 한마디로 나의 개발 학습 방향은 달라지게 되었다. 무슨 일이 되었건, 자꾸 카테고라이즈하고 피하게 되면 앞으로 절대 이 영역에 대한 두려움을 해결할 수 없다는 것을 알게 되었고, 무슨 일이 닥쳐오건 피하지 않게 되었다.
옛날부터 결제 기능에 관심이 많았다. 마침 회사에서 결제 기능을 만들어야 하는 타이밍이었고, 내가 해 보겠다고 당차게 책임을 맡게 되었다. 일회성 결제와 월 정기결제가 목표였고 거의 한 달을 쏟아 런칭을 할 수 있게 되었다. 아직도 처음으로 10개가 넘던 고객사들에게 월 정기결제 요청 트랜스액션이 성공적으로 이루어지던 그 순간을 잊지 못한다. 아임포트라는 강력한 개발자 결제 지원 서비스를 이용했지만, 내가 처음으로 만든 기능이 상용화되던 순간은 어느 신입 개발자에게나 뿌듯하지 않을까 싶다.
치열하게 1년 같은 3개월을 이 스타트업에서 보낸 후, 난 이런 정도로 열심히 하면 내 사업을 해도 되겠다는 생각을 하게 되어 퇴사를 했다. 대표 형과는 아쉽지만 솔직하게 내 마음과 다짐을 이야기하니 이해해 주었다. 개발자로서, 또한 사업의 방향을 설정하는 운영, 인사 측면에서도, 인성과 사업의 본질에 대해서도 많이 배우고 가는 터라 대표 형께 많이 고맙다는 이야기를 했다. 지금도 이 분과는 좋은 관계로 잘 지내고 있다.
나는 중간에 지인 분에게 파이썬 프리랜싱 프로젝트를 하게 되었다. 처음 접하는 언어라 약간의 두려움이 있었지만 부트캠프에서 배운 빠른 학습 방법을 통해 파이썬을 3일 정도 공부하고 바로 프로젝트 개발에 들어갔다. 이전에 지인 분이 Fortran 언어를 통해 상당히 절차지향적인 방법으로 draft로 개발된 코드가 있었고 또한 그 이 전에 참고한 excel macro sheet이 있었다. 두 부분을 참고하여 내 생에 처음으로 OOP 스러운 개발 코드를 만들어 내게 되었다. 물론 내부 함수의 독립성이라든지, public, private 변수의 구분을 크게 두지 않았다든지 하는 아쉬움들이 있었지만, 나름 큰 문제없이 처음으로 데스크톱 어플리케이션을 만들어 본 경험은 소중했다. Tkinter라는 파이썬 UI 프로그램을 만지면서 HTML + CSS 가 얼마나 다루기 좋은 툴인지 새삼 깨닫게 되었다.
그러면서 자연스레 내 사업을 다시 찾아다니다가, 남대문 시장에 싸고 싱싱하면서도 풍성한 꽃 도매 시장 사장님이 기억났다. 이전 경험 상, 핸드폰으로 괜찮은 꽃 바구니 좀 보여달라고 하면 3-4개의 사진을 카톡으로 보내주시고, 주문하고 계좌이체를 하곤 했는데, 이걸 자동화하면 꽤나 좋겠다 싶었다. 평소에 시중에서 구매하던 꽃보다 3배 풍성하고, 싱싱하고, 3배 낮은 가격으로 구매할 수 있었기에 홍보만 잘하면 되겠다 싶었다.
그래서 베트남에 있는 지인과 함께 꽃 배달 one-page 서비스를 개발하게 되었다. redux form을 사용하여 주문이 되면 slack web hook api를 사용하여 슬랙으로 주문 정보를 받아 내가 직접 남대문 시장에 주문하는 시스템이었다. 서버 코드를 만들고 싶지 않아 궁여지책으로 슬랙을 사용하게 되었는데 나름 serverless 였던 것이다! 보통 사이트 주소를 카카오톡 등으로 전달하곤 했는데, 모바일 접속이 많은 만큼 모바일 first로 제작하는데 CSS어려움들이 있었다.
쥬니어 개발자로서 종종 쓸데없는 개고생을 한 적이 많았다. 또는 시니어의 지혜가 있다면 쉽게 넘어갈 법한 문제에서 며칠을 고생하거나 해결하지 못하던 케이스가 있어 쥬니어-시니어 연결 서비스가 있다면 쥬니어가 종종 돈을 내고서라도 그의 개고생의 며칠을 절약할 수 있지 않을까. 그래서 가볍게 한 페이지의 랜딩페이지 웹사이트를 만들어서 주변 반응을 보았으나 역시나 촘촘하지 않았던 서비스 기획에 반응이 그리 좋지 않았다. 홈페이지 CSS 연습한 셈 치고 바로 접었다.
내가 몸 담고 프로그래밍을 배웠던 부트캠프에 와서 계약직으로 일을 도와주기 시작했다. 처음엔 기존에 3rd party form으로 되어있던 부트캠프의 기본 코스 신청 등록 페이지를 만들고 없던 서버를 만들어서 신청자 및 결제 관리를 하는 것이었다. 그러다가 자연스럽게 심화 코스 학생들을 돕기 시작했는데 학생들이 도움을 못 받고 있는 부분들이 너무 명확하게 보였다. 그래서 어떻게 하면 학생들이 적지 않은 가격을 내고 소중한 시간을 내서 왔을 때 가장 많이 배워갈 수 있을까 고민을 하기 시작했고 스스로 진지하게 제대로 준비하기 시작했다.
기본적인 커맨드만 알았지만 처음 스타트업 조인 이후 Git으로 팀워크를 하면서 참 많이 배웠다. git commit message 작성법, 충돌 날 경우 해결 방법, Git Client Tool 사용 방법 및 GitHub flow 등, Git은 아직도 내겐 미지의 영역이 있어 꾸준히 연습하고 적용해 봐야 한다.
17년에 아주 유치한 수준으로 Scrum을 실시했다면 18년에는 조금 덜 유치한 수준으로 스프린트를 진행한 것 같다. 좀 더 나은 예측과 측정으로 현실적인 스프린트 계획을 할 수 있었는데 이는 부트캠프 개발팀을 리드하면서 좀 더 발전이 될 것으로 희망한다.
역시 스타트업에서 배운 코드 리뷰 문화를 가지고 현재 부트캠프 개발팀에 적용 중에 있다. 팀원들이 아직 익숙지 않지만 분명히 코드의 질이 좋아진다는 점에 동의하고 있으며, 스스로도 의심의 여지없이 도움이 되었기에 꾸준한 코드 리뷰로 서로의 코드에 대한 이해도를 높이고 퀄리티 역시 나아지리라 믿는다.
사실 CI는 이제 막 적용을 시작한 상태라 아주 미비한 유닛 테스트 들을 가지고 있다. 그래도 CI의 중요성 자체를 크게 인지했다는 사실과 CD가 없이는 배포에 너무 많은 시간을 쓰고 병목현상이 일어난다는 것을 확인했다. 19년도에는 좀 더 조밀조밀한 유닛 테스트들과 무중단 배포 세팅을 이루어야 한다는 목표가 생겼다.
온라인 오프라인을 가릴 것 없이 사람은 속한 곳에 영향을 받게 된다. 나의 경우 온라인으로는 페이스북에서 지속적으로 올라오는 도전이 되는 개발기, 후기, 사용기 등에서, 그리고 주변의 동료가 끊임없이 배우고 성장해나가는 모습에서 도전을 받고 긴장의 끈을 놓지 않게 되었다. 이런 긍정적인 스트레스는 나 자신을 성장하게 한다.
모든 것을 다 하려는 욕심이 있었다. 개발도, PM 역할도, 사업도...
모든 것을 다 잘할 수는 없었다. 선택과 집중으로 소수의 도메인을 깊게 파서 파트너끼리, 동료들끼리 도움이 되었어야 했다. 돌이켜보니, 모든 일을 모두가 나눠서 하는 그러너 일을 내가 하고 있었다. 이제라도 깨달았으니 19년도에는 내가 더 잘할 수 있는 부분에서 상상할 수 없을 정도의 퍼포먼스를 내고, 그러지 못한 점들에 대해서는 명확하고 효과적인 동료들의 도움 요청을 통해 레고 조립과 같은 태스크 블록 조립들을 이뤄내야겠다.