Loading
2022. 1. 23. 15:42 - lazykuna

이력을 위한 토이 프로젝트 진행하기

이력을 위한 토이 프로젝트 진행하기

개발자로 일하기 위해서는 상대방에게 자신을 어필할 수 있는 업무역량에 해당하는 무언가를 보여주어야 한다. 보통 그러한 무언가를 "이력"이라고 부를 수 있을 것 같다. 이력을 통해서 이 사람이 Final product까지 설계 및 개발을 한 과정을 보여줄 수 있고, 이를 통해 직접 테스트 하지 않고도 역량을 파악할 수 있게 해줄 것이다.

딱히 이력을 위해서 시작한 건 아니었지만, 나는 토이 프로젝트를 주로 많이 해 왔던 것 같다. 개발 성취의 본연이 주는 즐거움 때문이었던 것 같다. 하지만 본업이 바쁘기도 하고, 개발자의 최전선에 서기 위한 투자를 하다 보니 이제는 더 이상 예전같이 취미로 토이 프로젝트를 하기가 힘들어졌다. 그래도 하고 싶다면, 토이 프로젝트를 통해 철저하게 나의 실력와 이력을 기를 수 있는 방향으로 가야 될 것 같았다. 그래서 토이 프로젝트를 통해서 이력을 키울 수 있는 방법에 관하여 써 보려고 한다.

이력을 위해서 할 수 있는 일들

먼저 이력을 위해서 어떤 일들을 할 수 있을까? 한번 나열해 보았다.

동아리

공통의 목표를 가지고 여럿이 모여 공부나 프로젝트를 진행하는 것인데 타인의 피드백을 받거나 자극을 받을 수 있다는 점에서 메리트가 있다.

공모전

흔히 해커톤과 같은 것들이다. 팀으로 진행하게 될 경우 약간의 동아리적 성격을 띌 수도 있다. 단기간 내에 결과물을 뽑아낼 수가 있다는 점이 가장 큰 메리트이다.

토이 프로젝트

내가 주로 했던 방식이다. 아주 간단하게 만들고 싶은 걸 만드는 일이다. 팀으로 할 수 있다면 훨씬 의미가 클 것이다. 하지만 보통 홀로 작업하게 되고, 이에 따라 독학의 방식과 동일한 위험에 빠질 수 있다.

학회 참가

학회라고 해서 너무 무겁다는 느낌으로 받아들일 필요는 없을 것 같다. 파이썬 유저들끼리 재미있는 주제를 공유해보는 Pycon이나, 기업에서 주최하는 DEVIEW (naver) 나 if Kakao 같은 것들도 있다. 단순 참가만으로도 해당 기술에 관심이 있다는 어느 정도의 증명이 될 수가 있지만, 나아가서 직접 발표를 해볼 수 있는 기회가 있다면 더 의미있을 것이다. 소규모학회에서는 기회가 꽤 많으니 찾아보면 가능할지도?

독학

아마 제일 효율이 나쁘다. 아무래도 그럴 수밖에 없는 게 혼자서는 양질의 정보를 얻기도 어렵고 타인에게 피드백을 받을 수도 없다.
정 독학을 하겠다면 가능하면 가이드가 될 수 있는 책이 있어야 한다고 생각한다. 최근에는 Coursera와 같이 이력을 쌓도록 도와주는 전문 학습 사이트가 생겨서 의외로 꽤 괜찮을수도 있을 것 같다. 하지만 그것도 없이 인터넷을 표류하며 정보를 얻는다는 건 비효율적인 듯 하다.

어떻게 시작하지?

나같은 경우는 문제를 해결하기 위해서 진행한 사이드 프로젝트들이 대다수인데 ... 꼭 그럴 필요는 없어보인다. 뭐든지 일단 만들어 보는게 제일 중요하고, 필요하다면 이미 만들어진 다른 작품의 copy본을 만들어도 괜찮을 것 같다. 결국 final product까지 만들어 내는 설계와 개발 능력이 토이 프로젝트를 통해 배양할 수 있는 핵심 역량이다.

토이 프로젝트의 원칙

먼저 토이 프로젝트는 독학과 유사하게 피드백을 받기도 어렵고 관련하여 양질의 정보도 얻기 어렵다는 단점이 있었다. 이러한 단점을 최대한 억제하기 위해서 계획을 세워야 한다.

나는 아래 원칙에 따라서 토이 프로젝트를 진행하려고 한다.

  1. 기한이 있어야 함
    기한이 있어야 효율적으로 시간 소요가 된다. 기한이 정해지지 않는다는 건 보통 프로젝트가 너무 크거나 필요한 스킬셋이 산정이 안 된다는 것이므로, 토이 프로젝트 세분화나 이전에 해야 하는 작업부터 파악해야 한다. 이 경우 프로젝트의 끝맺음을 맺기 못하고 아무것도 남기지 못하는 경우가 발생하곤 했다. (사실상 이력에 기여하는 정도가 0이 된다...)
  2. 개발범위 산정하기
    개발범위가 너무 크면 개발기간도 그만큼 길어진다. 필요하다면 쪼개서 해야 한다. 모듈화가 중요해지는 추세상 이러한 작업방식 자체를 어필할수도 있지 않을까 싶다.
  3. 스킬셋 산정하기
    빠른 목표 달성을 위해 익숙한 언어나 플랫폼을 사용하는것도 좋지만 이력을 위함이라면 해당 분야의 새로운 신기술을 도입해 보는것도 좋아 보인다. 기술 도입 이전에 해당 기술이 어떤 장단점을 가지고 있는지도 같이 분석하면 더 메리트로 작용할 것이다.
  4. 문서화 하기
    프로젝트를 진행하고 나서는 문서화를 해야 한다. 내가 무엇을 했는지를 남기는 것은 이후 유지보수를 위함이자 동시에 프로젝트의 설계 및 개발방식에 대해서 다시 반성(?)할 수 있는 기회를 준다. 그리고, 문서화 할 수 있는 것 자체도 능력이다! 많이 하다 보면 더 좋은 문서를 만들게 될 것이다.

이에 대해 굉장히 좋은 정리글이 있어 모 트윗의 글을 그대로 가져와 보았다.

1. 웜업(조사 => 핵심기능 구현)
2. 클라이막스로(전체 기능 구현 => 귀찮은 디테일 구현 => 코드 리뷰)
3. 쿨다운(기술 블로그 작성 => 블로그 리뷰)
4. 블로그 적으며 머리에 휴식을 주고자 차기 아이템 발굴

거창하게 프로젝트를 진행하지 말고, 잘게 쪼개서 하나씩 하나씩을 이 방식으로 정복해 가면 꽤 도움이 되었던것 같다.

추가적으로 "웜업"과 "쿨다운" 시기에, 가능하다면 관련 업계 종사자 중 잘 알려진 분께 이메일을 보내면 더 좋다. 아이디어 검증, 뜻하지 않은 디스커션, 임프레션 주기.

마지막의 "리뷰"는 피드백을 얻기 어려운 사이드 프로젝트의 단점을 상쇄시켜줄만한 강력한 수단이지만... 나는 친구가 없다... 😂

결국 핵심은 처음부터 너무 크게 개발하지 않기 라고 생각한다. 이 원칙만 잘 지켜도 그럭저럭 결과물이 나온다. 나는 너무 크게 개발한 모 프로젝트를 폐기하고 다시 쪼개서 개발하고 있다... 아프다.

커리어의 방향성을 고려한 토이 프로젝트

(2022년 1월 30일자 추가내용)

여러 토이 프로젝트로 커리어를 쌓았다고 하더라도 그것이 자신이 지원한 포지션과 관련이 없다면 면접관에게 임팩트를 주기 어렵다. 면접관이 자신이 작업한 결과물(토이 프로젝트)에 대해서 깊이 있게 질문을 하지 않거나 전혀 질문을 하지 않을수도 있다. 면접관이 질문을 하지 않는다는 것은 돌아오는 대답으로 얻을 수 있는 정보가 불필요하기 때문일 테니...

그래서, 자신이 하고자 하는 업무를 먼저 파악한 후에 이와 연관된 프로젝트를 설계/개발하는 것이 좋다. 대충 아래의 예제 정도가 될 수 있지 않을까...

  • Web frontend : 최신의 프론트엔드 툴킷들로(react, storyboard ...) 사이트 만들어보기 등
  • Web backend : MVC 모델, (spring나 node.js로) 서버 백엔드 구축하고 서비스해보기, TPS 부하 시뮬레이션 해보기, 최적화 등
  • MSA : docker의 container, kubernetes의 orchestration를 이용하여 golang 등으로 간단한 테스트 만들어보고 deploy, 트러블슈팅 해보기
  • Data Engineering : 구글 데이터셋 같은 곳의 데이터 가공 후 hadoop과 같은 분산저장 이용하여 대규모 데이터셋 시스템 설계해보고 구현해보기 (보통 MSA와 딸려오는 경우가 많음)
  • Data Scientist : 구글 데이터셋 같은 곳을 이용하여 모델 짜서 머신러닝 수행해보기 (데이터 가공 역할을 포함하기도 함)
  • Fullstack developer : 상기 포지션이 항상 확고한건 아니고, 사업을 급격하게 확장해 나가는 경우에는 이것저것 많이 하는 사람을 좋아하는 잡탕 포지션도 있다 (?)

이는 비단 토이 프로젝트 뿐이 아닌 다른 커리어를 쌓는 방식에도 마찬가지로 적용된다. 확고한 방향성을 먼저 잡아야 자신이 원하는 포지션에 지원했을 때 강하게 어필할 수 있다.

참고자료