책 쓰는 프로그래머 박찬성이 IT 트렌드를 알려줍니다. 어렵게만 느껴졌던 IT 이슈를 쉽게 풀어주는 본 칼럼은 매달 연재됩니다. |
사이드 프로젝트는 본업 이외에 개인적으로 수행하는 프로젝트를 말하며, 장난감을 대하듯 약간은 편한 마음으로 임할 수 있기 때문에 '토이 프로젝트'라는 말로도 표현됩니다. 사이드 프로젝트를 하는 이유는 경험해 보지 못한 새로운 분야를 향한 도전, 내 분야에 등장하는 신기술의 연습, 당장 내가 겪는 불편함을 해소할 수 있는 소프트웨어의 개발, 미래의 전도유망한 서비스의 초석이 되는 소프트웨어의 개발 등 매우 다양합니다. 그리고 근본적으로 시작은 모두 매우 변화가 빠른 IT 분야에서 살아남기 위해 스스로를 갈고닦는 수단이라는 공통점을 가집니다.
하지만 사이드 프로젝트 또한 엄연히 '프로젝트'라는 것에 주의해야 합니다. 별다른 계획 없이 시작하고, 적당히 프로젝트를 진행하고, 어정쩡하게 프로젝트를 마무리해서는 많은 것을 얻을 수 없습니다. 오히려 제대로 마무리되지 못한 프로젝트는 소중한 시간을 내어 수행했음에도 두려움을 심어주는 결과를 초래할 수도 있습니다. 두루뭉술하게 배운 지식과, 두루뭉술하게 마무리된 프로젝트는 다음 언젠가 마주칠 유사한 상황에서 '어렵다', '힘들다' 같은 선입견을 가지게 하기 때문입니다.
그렇다면 어떻게 해야 사이드 프로젝트를 성공적으로 수행하고, 그 속에서 스스로를 지속적으로 성장시킬 수 있을까요? 이번 칼럼은 사이드 프로젝트를 수행하는 방법과, 그 과정에서 마주칠 수 있는 몇 가지 난관을 헤쳐나가는 방법에 대한 이야기를 다룹니다.
사이드 프로젝트의 라이프 사이클
제가 생각하는 사이드 프로젝트의 기본 라이프 사이클은
1. 아이디어의 기획
2. 핵심 기능 프로토타이핑
3. 세부 구현
4. 정리 및 브레인스토밍
5. 홍보 및 1번으로 돌아가기입니다.
먼저, 어떤 프로젝트를 수행하려면 근간이 되는 아이디어가 있어야 하겠죠. 그리고 어떤 아이디어라도 '핵심'이 되는 부분과 그 핵심을 지지하기 위한 '주변' 부분으로 나뉠 수 있습니다. 만약, 핵심이 실현 가능성이 낮다면, 그 아이디어는 방향을 잃어버리게 되기 마련입니다. 따라서 무엇보다 가장 먼저 '핵심' 기능의 구현 가능성을 프로토타이핑으로 먼저 확인합니다.
프로젝트의 실현 가능성을 확인했다면, 그다음은 세부적인 구현과 더불어 프로젝트에 살을 붙이는 작업이 필요합니다. 모든 프로젝트가 그러하듯이 '핵심'이 되는 기능 구현은 전체 구현의 극히 일부에 지나지 않기 때문에, 이 단계는 생각 이상으로 매우 중요합니다. 많은 사람들의 공감을 이끌어낼 수 있는 '문맥'을 내포시키고, 핵심 기능이 실행될 수 있는 '환경'을 조성하고, 그 과정에서 예기치 못한 수많은 문제를 겪으며 트러블슈팅의 능력을 향상하는 기회를 얻을 수 있죠. 가령 프로젝트의 전체 구조 잡기, 코드 스타일링, 현재 트렌드에 맞는 도구의 활용, 현업에 가까운 구현 방식의 적용 여부, 현업에 가까운 CI/CD 파이프라인 구축 등이 여기에 해당될 수 있습니다.
1~3번까지 달려왔다면, 클라이맥스라는 정점을 찍고 모든 것의 구현이 완료되었을 것입니다. 하지만 그것은 어디까지나 코드가 완성된 것이고, 그 코드의 세부 작동 방식은 머릿속에 중구난방으로 정리된 상태로 남게 됩니다. 여러 가지 트러블슈팅을 통해 수 많은 경험을 했지만, 실제 엑기스로 추출해서 오랫동안 나의 코어로 자리매김할 지식이 전혀 선별되지 않은 상태입니다. 한 가지 다행인 점은 바로 이 시점에서는 프로젝트의 어떤 코드를 보더라도 즉시 이해가 가능하다는 것입니다. 즉 두뇌가 말랑말랑한 상태로, '정리'를 하기에 매우 적합한 시점인 것입니다.
정리는 어떤 식으로 해도 좋지만, 개인적으로는 블로깅 방식을 선호합니다. 블로깅은 기본적으로 '오픈'이기 때문에, 정리의 퀄리티를 어느 정도 보장하려는 노력이 항상 뒤따릅니다. 따라서 좀 더 정제된 방식으로 글을 쓰는 것이 가능하며, 주장을 정당화하기 위해서 그냥 지나친 사소한 지식을 다시 주워담을 수 있는 기회도 생길 수 있습니다.
여기서 한 단계 더 나아가고 싶다면, 온라인 출판사를 통해 글을 기고하는 것도 좋은 방법입니다. 다행히 요즘 시대에는 '미디움(Medium)' 같은 플랫폼에 연계된 여러 온라인 출판사(예: ITNEXT, Towards Data Science 등), 특정 회사의 공식 블로깅 플랫폼(예: 구글 클라우드, 구글 텐서플로 등)이 존재하며 비교적 쉽게 기고를 제안할 수 있습니다. 이 방식은 크게 두 가지 이점이 있습니다.
먼저, 어느 정도 유사한 분야에 대해 서로 이해관계가 일치하고, 자신들의 블로깅 플랫폼을 통해 게시되는 글이기 때문에 기술적으로나 글의 작성 방식으로나 모두 리뷰를 받을 수 있다는 것입니다. 피드백을 통해 프로젝트를 한 단계 더 고도화할 수도 있으며, 적어도 커뮤니케이션 능력에 중요한 기술적 글쓰기의 능력이 향상될 수 있습니다. 두 번째 이점은 업계의 전문가들과 커넥션이 형성되는 초석을 다질 수 있다는 것입니다. 이해관계로 얽힌 인맥이지만, 앞으로 진행될 다양한 프로젝트에 대한 디스커션을 할 수 있는 커넥션을 가진다는 것은 매우 큰 자산입니다.
정리 단계에서는 '들뜬 기분'과 '아쉬운 기분'이 공존합니다. 프로젝트가 잘 마무리하여 뭔가를 해냈다는 도취감에서 오는 기분도 들지만, 한편으로는 다른 아이디어로 살을 더 붙여봤으면 어땠을까 하는 아쉬움이 남을 수 있습니다.
이 단계에서는 글쓰기로 생각을 정리함과 동시에, 그다음으로 수행할 사이드 프로젝트에 대한 아이디어를 구체화해 보는 것이 좋습니다. 일종의 차기 프로젝트의 기획으로 볼 수 있습니다. 하나의 프로젝트를 종료하며 잘 마무리하면서 동시에, 다음 아이디어를 떠올리며 실현되었을 때를 상상하는 것은 언제나 즐거운 일일 것입니다. 이런 식으로 종료와 시작의 교차점을 만들어두면 쉼 없이 항상 성장하는 내 모습을 발견할 수 있습니다.
마지막으로 종료된 프로젝트를 홍보하는 단계가 남아있습니다. 건너뛰어도 상관없지만, 저는 반드시 필요한 과정이라고 생각합니다. 그 이유는 누구나 남에게 '인정'을 받고 싶기 때문입니다. 본업에서는 경력이 쌓이며 어느 정도 인정을 받는 것이 당연하지만, 온전히 나만의 생각으로 한 새로운 시도는 내가 한 일을 직접 세상에 알리지 않는 한 인정받기 어렵습니다. 사람들은 기본적으로 그런 프로젝트가 있다는 사실조차 알 수 없기 때문이죠. 또한, 외부의 객관적인 평가는 언제나 스스로를 되돌아볼 수 있는 기회를 제공합니다. 운이 좋다면 나의 아이디어에 흥미를 느껴 함께 협업할 동료를 얻는 기회도 얻을 수 있습니다.
선택과 집중
사이드 프로젝트의 라이프사이클은 꽤 이상적으로 보입니다. 하지만 몇 가지 난관에 부딪힐 수 있습니다. 특히, 초기에 너무 목표를 크게 잡으면 프로젝트의 질이 낮아지고, 어정쩡하게 프로젝트가 마무리되는 등 오히려 역효과를 낳을 수 있습니다. 또 유사 프로젝트를 어느 정도 반복적으로 수행하다 보면 '익숙해짐'에 따른 문제가 발생합니다. 현재 내가 가진 기술적 경계에서 만족하고, 그 이상을 바라보지 않게 되는 것이죠.
어떤 일을 하더라도 '지속성'은 매우 중요합니다. 그리고 지속성은 '선택과 집중'할 영역을 분명히 정해야만 확보될 수 있습니다. 먼저, 전체적인 큰 그림을 구상하고, 단계적으로 큰 그림을 풀어나갈 수 있도록 문제를 잘 쪼개야 합니다. 되도록이면 사용자 입장에서의 유스케이스를 고려하는 것이 좋습니다. 예를 들어서 '머신러닝을 제대로 파 봐야겠다'보다는 '자동으로 사람의 표정을 인식하는 서비스를 만들어봐야겠다'가 더 좋습니다.
실제로 어떤 영역이든 '공부'에 초점을 맞추면, 일생의 과업으로 가져가야 할 만큼의 방대한 양에 압도될 수 있습니다. 하물며 사이드로 그 정도의 압박을 느낀다면 금세 지쳐버릴 수밖에 없겠죠. 그 대신 완성된 결과물로 '가능한 무언가'에 중점을 두는 것이 현실적인 목표를 세우는데 좋습니다. 유스케이스를 정의하면, 원하는 목표를 달성하기 위한 단계가 비교적 쉽게 눈에 보입니다. 그리고 각 단계를 별도의 프로젝트로 구성하면, 연속적으로 이어지는 프로젝트 속에서 하나씩 마무리되는 환경은 스스로에게 적절한 당근과 채찍을 줄 수 있습니다.
또한, 프로젝트가 마무리될 때마다, 전체 그림을 구상할 때는 보지 못했던 새로운 사실도 깨달을 수 있으며, 이를 통해 그 다음 이어지는 프로젝트의 아이디어를 보다 현실적으로 고도화할 수도 있습니다.
전문가의 영역으로 한 발짝 가까워지기
일단 집중하고 싶은 영역에 대해, 원하는 결과물을 완성했다면, 큰 흐름을 꽤 잘 이해하는 능력을 가질 수 있습니다. 이것으로도 꽤 값진 경험이며, 이 과정을 반복할수록 보다 최적화된 자신만의 흐름을 만들 수도 있습니다. 하지만 구현 능력이 현업에 준하는 수준으로 상승했다고 보기는 어렵습니다. 현업에서 사용되는 도구, 구현 방식 등은 검색만으로 파악하기가 어렵기 때문에 혼자 터득할 수 없기 때문입니다. 실제로 많은 사람들이 혼란스러워하고, 이를 해결한 방법을 쉽게 찾지 못하는 문제죠.
저는 '혼자서'는 이 문제를 해결할 수 없다고 결론지었습니다. 즉, 실제 현업 개발자들과의 소통을 통해 얻은 지식을 실제 구현에 녹여내야만 해결될 수 있습니다. 다행히 현시대에는 '오픈 소스'와 '커뮤니티'라는 환경을 통해, 개발자들 간의 소통이 쉽게 이루어질 수 있는 생태계가 조성되어 있습니다. 이를 통해 내가 가진 전문 지식을 나누고, 다른 전문가들의 지식을 흡수하는 등 상생이 가능합니다. 또한, 현재 보유한 기술의 경계를 뛰어넘어 주변 기술까지도 함께 이해하며 '현실적인' 요구 사항에 부합하는 시나리오를 구현하는 능력까지도 터득하는 기회를 얻을 수 있습니다.
“거인의 어깨 위에 올라서라”라는 말은 언제 어디서나 통용될 수 있습니다. 남녀노소 할 것 없이 주변의 누구라도 내가 배울 수 있는 거인이 될 수 있고, 나 또한 다른 사람의 거인이 될 수 있다고 생각합니다. 혼자서 모든 것을 해결할 수는 있지만, 점점 불어나는 지식의 홍수 속에서 혼자서 모든것을 습득할 수는 없습니다. 지름길이 있다면 지름길을 활용하는 것이 가장 바람직할 것입니다. 물론 그러기 위해서는 스스로 '오픈' 마인드셋을 장착하는 것이 중요할 것입니다.
마치며
이 글은 지난 2년간 다양한 사이드 프로젝트를 수행하며 수많은 직접적인 결과물을 만들고, 다양한 인맥의 커넥션을 맺고, 커뮤니티와 오픈 소스를 통해 기여를 주고받고, 전문 영역을 차츰차츰 팽창했던 실제 경험을 토대로 작성되었습니다. 한 사람의 경험이기 때문에 정답은 아닐 것입니다. 다만, 사이드 프로젝트를 통해 성장하고 싶지만, 그 방법을 구체화하지 못한 분들께 조금이나마 도움이 되길 바랍니다.
추천 도서
에릭 프리먼, 엘리자베스 롭슨 저 / 서환수 역 | 한빛미디어
문제를 처음부터 해결해 나가면서, 구현 측면에서 현실적으로 들 수 있는 다양한 의문과 문제를 단계별로 해결해나가는 책입니다. 복잡한 문제를 두고 “이것이 답입니다”라고 말하는 대신, 이런 방식으로 구현했더니 발생 가능한 문제를 보여주며, 하나씩 구현된 소프트웨어를 고도화하는 과정 그 자체를 함께 풀어나갑니다. 그리고 그렇게 적용된 해결책이 사실은 현업에서도 많이 사용될 수 있는 정규화된 '패턴'이라는 것을 보여줍니다. 또 다른 특징으로는 대화 형식으로 작성되어있어서 책과 대화를 나눈다는 착각이 들 수 있을 정도로 친근합니다.
펠리너 헤르만스 저 / 차건회 역 | 제이펍
흔히 코드를 작성하는 데는 흔히 '손코딩' 등으로 머리에 든 생각을 코드로 옮기는 일을 많이 하지만, 코드를 읽는 데는 큰 노력을 기울이지 않습니다. 하지만 실제로 우리는 코드를 작성하는 것보다, 다른 사람의 코드를 읽고 이해하는데 현저히 많은 시간을 보냅니다. 이 책은 코드를 읽는 분명하고도 올바른 '방법'이 있다는 것을 설명과 함께 구체적인 훈련법을 함께 제시합니다. 그리고 높은 가독성을 위해 코드를 작성하기 위한 일반화된 가이드도 함께 얻을 수 있습니다. 은연중에 '직관력'에 의존하여 코드를 읽고 쓰는 방식을 제시하는 교육이 많지만, 사실은 '체계적'인 접근법이 존재하며 이를 제대로 훈련하기 위한 노력이 필요하다는 것을 배울 수 있습니다.
추천기사
‘대한민국 No.1 문화웹진’ 예스24 채널예스
박찬성(프로그래머)