코딩 개인 프로젝트 - koding gaein peulojegteu

꿀위키 버프글 섹션에서 참고할 만한 좋은 글들을 보던 중 너무 공감이 되는 포스트를 읽게 되었습니다.

프로그래머가 개인 프로젝트를 해야하는 5가지 이유

제가 생각하는 개인 프로젝트의 장점도 위 내용과 비슷합니다.

개인프로젝트라면 개인이 목표를 수립하고 하나의 결과물을 만드는 것과 소위 투잡이라는 본업무시간 외의 알바 중 일부도 포함이 될 수 있겠다고 생각합니다. 하지만 알바도 알바나름이기 때문에 일부라는 말을 첨가했습니다. 기일에 치여 주먹구구식으로 구현하는 사례도 많기에..

저도 얼마전부터 개인 프로젝트를 시작했습니다. 동기와 목표를 수립하기 위해 주변에 취약한 웹사이트를 새로 구축해주다는 일을 벌렸습니다. 어느 정도 소소한 수입이 생기기는 하겠지만 삶의 질이 향상될 정도는 아니기에 중요하지 않습니다. 중요한 것은 위 포스트에서도 설명한 것과 같이 자기계발의 투자입니다. 투자라고하면 미래의 가능성을 보고 행해지는 현재의 행위라고 정의할 수 있지만 개발일에 있어서는 무엇을 어떤것을 하던 그때그때 가시적인 효과가 나타납니다. 항상 새로운 것을 발견하고 적용하고 본인의 기술로 흡수하게 되기 때문이죠.

저 또한 이 일로 인해서 실무에서 하지 못했던 것, 평소 하고 싶었던 것, 책으로만 접했던 것들을 실제로 적용 해볼 수 있는 동기가 생기게 되고 목표가 수립되었습니다. 저만의 디자인 패턴, 그리고 라이브러리.. 시작 직후엔 미미했지만 어느정도 눈에 보여지는 결과물이 생겨날 수록 흥미와 작업의 속도가 붙고 있습니다. 하루에 할당되는 시간은 1~2시간.. 아무리 저를 위한 일이라 한들 가족과의 시간을 등질 순 없습니다. 그렇다고 생활에 지장을 줄 만큼 새벽까지 할 수도 없습니다. 그게 제일 바보 같은 행동이겠죠. 때문에 많지 않은 시간에 빠짝 작업을 해야하고 가끔은 못할 때도 생깁니다. 하지만 회사의 8시간 업무보다 얻어지는 정보는 질적으로나 양적으로나 우위에 있었습니다.

애매하게 처리된 코드는 다시 리뷰를 하고 제 자신에게 스스로 납득시키기 위해 코드를 다시 고칩니다. 어느날은 리팩토링 작업으로 결과물의 진전이 없을때도 있었습니다. 하지만 괜찮습니다. 개인프로젝트는 기한에 압박을 주는 사람은 없습니다. 반대로 생각하면 루즈해지기도 쉽기에 어느정도 긴장감은 가져야 한다고도 생각합니다.

이렇게 작업하는 결과물은 고스라니 저의 자산이 됩니다. 작업 과정에서의 경험은 어디서도 가르쳐주지 못하는 값으로 칠 수 없는 아주 중요한 제2의 자산이 될것이구요. 그리고 이것은 저의 커리어에 반영을 시킬 수도 있으며 결과물이 쌓이면 제 자신의 코딩 수준과 발전 과정을 살펴볼 수 있습니다. 자신을 돌아보는 것만큼 가치있는 일은 그리 많지 않다고 봅니다. 그만큼 중요합니다.

이런 좋은 개인프로젝트를 저는 오랫동안 실행에 옮기지 못했습니다. 그 이유는 “시간이 없어서”가 아닙니다. 동기와 목표가 정해져있지 않기 때문입니다. 내가 뭘 만들어야할까? 대체 왜 만들어야하지? 에 대한 고민에 빠지게되면 쉽사리 헤쳐나오지 못합니다. 시작하려하면 시작도 못하고 진행하다가도 도태되기 쉽습니다. 개인 프로젝트에 있어서 목표 설정은 가장 어려운 부분인 것 같습니다.

하지만 시작이 반인만큼 시작과 동시에 새로움을 느낀다면 성공입니다.

글 내비게이션

간단한 프로그램, 앱, 실제로 서비스할 웹 사이트까지 여러 개인 프로젝트를 진행하다 보니 나에게는 나름 대로의 개발 프로세스가 생겼다. 처음 어떤 프로그램을 만들 때에는 단순히 아이디어만 가지고 시작했다.

"포커 게임을 만들어봐야지"

"스케줄 관리 프로그램을 만들어봐야지"

"···"

아이디어 외에는 어떠한 것도 생각하지 않은 채로 바로 코드를 써 내려갔다. 오직 내가 생각한 아이디어를 프로그램으로 만들어 내겠다는 그 열정만으로 코딩을 했다.

지금에 와서 1~2년 전에 만들었던 것들을 보면 "어떻게 만들었지?" 하는 생각이 든다. 프로그램이 정상적으로 작동하기는 하지만, 기능을 업데이트하기란 거의 불가능에 가깝다. 주석이 별로 없어서 내가 쓴 코드를 알아보기도 힘들고, 한곳을 수정하면 다른 곳에 문제가 생긴다... 답이 없다..

옛날에는 코딩을 하기 전에 생각하는 과정 자체를 시간 낭비라고 생각했다. 정말 단순했었다. 생각을 하지 않고 코딩을 하게 된다면, 어차피 나중에 더 많은 시간을 뺏기게 된다. 코딩이란 것 자체가 내 머릿속의 생각을 코드로 옮기는 것이기 때문에, 생각을 하지 않고 코딩하는 것은 말이 안 된다.

최근에는 아이디어만 가지고 바로 코딩을 시작하지 않는다. 코딩을 하는 시간보다 정보를 찾고, 생각하는 시간이 훨씬 길어졌다. 현재 내 개발 프로세스는 다음과 같다.

1. 아이디어 나열

2. 유사 서비스 참고

3. 아이디어 구체화 및 필요 기술 조사

4. api, 주요 로직, db 설계

5. 인프라 구축 (서버, db, ftp, ssh 등 기본 세팅)

6. UI 구축 (사용자들에게 보여지는 부분)

7. 서버단 구축 (api, db 연결, 주요 로직등)

8. 테스트

9. 유지 보수 및 업데이트

처음 개인 프로젝트를 진행했을 때(아이디어 나열 -> 코딩)와 비교해보면 많은 과정이 추가되었음에도,전체 개발 기간은 크게 길어지거나 하지 읺았다. 내 프로세스가 정답이라고 할 수는 없지만, 스스로 경험을 통해 가장 효율적인 순서를 찾은 것이다. 물론, 위 프로세스대로 진행해도 중간에 새로운 부분이 추가될 때도 있고, 설계가 변경될 때도 있다. 하지만 기본적인 틀이 잡혀있다 보니, 중간에 일부분이 바뀌어도 프로젝트의 방향은 바뀌지 않는다. 마치 건물을 짓기 전에 기초공사를 잘해놓은 느낌?

결론적으로 개인 프로젝트가 나에게 정말 많은 도움이 되었다고 생각한다.

책이나 학원등을 통해 공부하는 것과는 완전히 다른 배움을 얻을 수 있다. (스스로 공부하는 법, 나만의 프로세스, 설계하는 능력 등등)

지금도 책을 통해 개념적인 부분만 공부하고 있다면, 잠시 내려놓고 개인 프로젝트를 하나 만들어보라고 권하고 싶다.

- 작성자가 최근에 만든 개인 프로젝트

한 달짜리 개인 프로젝트 후기

얼마 전, 한 달 여 동안 개인 프로젝트로, 한글 타자 연습 웹 앱을 만들었습니다. 프로젝트를 진행하며 글도 몇 편 올렸고, 간단한 데모 앱도 결과로 공개했지요. 이번엔 그 프로젝트가 끝난 다음의 이야기를 나눠보려 합니다. 지금의 불편한 감정 상태를 털어놓는 글입니다.

데모 앱을 공개해서 뿌듯했다

어렵사리 웹 앱으로 타자 연습 앱을 키보드 입력을 직접 처리하며 한글을 그려 낸 것이 제 기준에 적당히 도전적인 문제였습니다. 너무 쉬운 일은 지루하고, 너무 어려운 일에 도전하면 불안한 상태로 진행은 안되니, 적당히 도전적인 목표를 잡아야 몰입하기 좋을 텐데요, 이번에는 딱 몰입하기 좋은 조건을 잡았던 것 같습니다.

https://en.wikipedia.org/wiki/Flow_(psychology) — 자기 실력에 적당히 도전적인 과제를 잡으면 플로우 상태에 들기 좋다.

게다가 별다른 의견을 듣지 못할 거라 생각했는데, 감사하게도, 여러 분이 자세히 관찰하고 평가하신 의견을 남겨주셨습니다. 댓글 하나가 큰 힘이 되는 거지요. 감사합니다.

개발자 커뮤니티에서 발표

프로젝트를 일단락한 때마침 GDG Korea WebTech라는 모임에서 라이트닝 토크 행사를 한다고 하기에, 게다가 어떤 주제여도 상관없다기에, 이번 프로젝트에 대한 얘기를 들고나가서 발표도 했습니다. 딱히 결론 없는 이야기였음에도, 다른 개발자 분들이 경청해주시고, 함께 프로젝트를 진행한 것처럼 호응해 주셔서 참 즐거운 시간이었습니다. 제 발표뿐 아니라 다른 발표자분들의 발표에도 참가자분들이 긍정적이고 격한 호응을 해주셔서 모임 자체에 대한 즐거움이 컸고, 덕분에 좋은 에너지를 많이 받고 왔습니다. 종종 이런 오프라인 모임에 참석해야겠다는 생각이 듭니다. 지난 프로젝트를 진행한 발표 재료가 있기 때문에 발표할 기회도 있었던 거니 결과적으로 잘 된 일이지요.

프로젝트 후 우울감

그런데 왜?!!!

나름 목표로 했던 뭔가를 마무리 지었으니 기분이 상쾌하거나 기쁠 것 같았는데, 이상하게도 좀 우울했습니다. 그 이유를 잘 모르겠는데, 이렇게 글로 적으면서 스스로 정리해 보려 합니다. 아재가 공개적으로 징징거리자니 민망하지만, 이런 게 다 약이 되지 않겠습니까?

한 달 간의 몰입 도전 실패

첫 기대로는 한 달 여유 시간의 8할 이상을 개발에 매진하는 것이었습니다. 이제껏 살면서 몇 번 정도는 일과의 거의 전부를 개발에 몰입했던 적이 있고, 그럴 때면 몸은 피곤했지만, 끝없이 활기가 솟아나는 기분이 좋았더랬죠. 그간 이런저런 핑계로 그런 기회를 다시 잡지 못했고, 그 핑곗거리들이 해결된다면, 언제든 다시 활력을 되찾으리라 믿었더랍니다.

그런데 이게 웬일입니까. 프로젝트에 매진해야 할 시간에, 자투리 틈만 나면 게임을 틀었고, 프로젝트는 2순위였습니다, 아니 넷플릭스 드라마가 2순위였으니, 프로젝트는 3순위였습니다. 간신히 주말이나 공휴일에만 억지로 프로젝트에 매달렸기에 그나마 결과가 나왔던 것입니다. 내가 즐거워서 몰입하는 그런 개발이 아니라, 억지로 시작해서 힘들여 진행한 프로젝트였습니다. 평소 업무야 의무적으로 할 수도 있지만, 제 개인 프로젝트인데 의무감에 하느라 이게 뭐하는 짓인가 싶었습니다. 공개적으로 떠벌여 놓은 글이 있기에 어떻게든 더 진행해야 한다는 의무감에 말이죠. 그 의무감이 약이자 독이 되었습니다.

스스로가 개발을 잘하지는 못해도, 꽤 재밌어하는 사람이라는 모종의 자긍심이 있었는데, 그게 거짓으로 드러났습니다.

결과물 자체가 기대 이하

사실 결과물의 목표가 애초에 실험적이었기는 했지만, 그래도 뭔가 사람들이 쓸만한 무언가를 만들겠다는 방향성이 있었습니다. 그런데, 정작 만들어 내는 결과물은 그저 혼자만의 실험으로 그치고 말았네요. 뭔가 더 긍정적인 자극과 에너지를 얻었다면 참신한 진행 방향을 찾았을지도 모르겠습니다만, 적어도 아직까지는 여기에서 그칠 것 같습니다. 제 역량 부족을 자각한 거죠. 평소 뭔가 마음먹고 매달리면 잘 만들 수 있을 것 같고, 남이 만들어 놓은 것을 평가하기는 쉬웠습니다만, 내가 뭘 만들자니 별다른 수가 나지 않았습니다. 어쩌면, 이제껏 뭔가를 ‘스스로 만들어 본’ 경험이나 노력이 없었으니 당연한 것인데, 스스로를 과대평가했던 것이고, 그 사실을 직시하게 되어 슬픈 감정이 느껴진 것도 있겠습니다. 초라한 자신이 느껴진 거죠.

가치와 동떨어진 취향

경제 사회에 살면서, 결국 어떤 가치를 가장 잘 평가해 주는 잣대는 ‘돈’일 텐데요, 저의 개발 관심사는 늘 돈과 동떨어져 있는 것 같습니다. 사이드 프로젝트니까 그래도 괜찮다, 아니, 사이드 프로젝트는 그래야만 한다고 자기 최면을 걸면서 시간과 노력을 들이곤 하지요. 그러면서도 마음 한 편에는,

이거 해서 땡전 한 푼 안 벌릴 텐데 왜 이러고 있지?

하는 생각이 따라다녔습니다. 제가 무슨 예술가도 아니고, 그렇게 예술적인 결과물을 만들고 있는 것도 아니면서, 별다른 경제적 가치를 실현하기는커녕 “노리지도” 않고 있으니 거 참 사치스럽습니다.

바닥을 치고

맘먹고 자리에 앉아 정리해 보니, 프로젝트가 끝나고도 우울했던 이유를, 이렇게 세 가지 정도 이유를 꼽아 볼 수 있겠네요. 그래도 징징거려 보니 조금은 기분이 나아집니다. 아마도 바닥을 치고 올라오려나 봅니다. 결국, 개발자에게도 가장 중요한 것은 멘탈 관리인 것 같습니다. 개발 기술이야 자료를 보고 학습하면 되는 건데, 동기 부여나 긍정적 부정적 심리 상태를 잘 다독이는 것이 젤 중요한 일인 걸 너무도 당연해서 잊고 지낼 때가 많나 봅니다. 이번에도 뭔가 자기감정을 잘 관찰하지 못하고 뭔가를 무리하게 진행하며 지나쳐서 문제가 터진 게 아닐까 하는 생각도 듭니다.

자가 치유

자, 이제 잔뜩 징징거려봤으니, 이제 좀 위로해봅시다.

한 달 동안 프로젝트에 매진하지 못해서 실망했다고? 아니 그래도 그동안 주구장창 게임만 한 게 아니라 뭔가 만든 게 어딥니까? 뭐라도 아무도 시키지 않았는데 한 것 자체가 대견한 일이지요. 결과물 자체가 기대 이하이긴 하지만, 애초에 목표가 프로토타이핑이 먼저였던 거죠. 프로토타입 결과가 시원치 않으면 더 이상 진행하지 않으면 되는 겁니다. 본디 그러라고 프로토타이핑하는 거지요. 본격적으로 열심히 만들면 중간에 버리기 아까우니, 쉽게 버리기 좋게 가볍게 간만 보는 거 아니겠어요? 취향이 돈벌이가 안 되는 쪽이라 한심하다고요? 원래 습작이 그런 겁니다. 습작이라는 게 누군가에게 보이거나 돈을 벌기 위한 게 아니라, 스스로 연습하기 위해 만드는 거지요. 전 여전히 부족하므로 지금처럼 습작을 계속하는 게 나쁜 일은 아니며 오히려 바람직한 일입니다. 습작하며 실력을 키워, 괜찮은 작품 좀 만들어 봅시다.

멘탈 관리

앞서 말했듯, 개발자로 일하면서 가장 중요한 것은 기술력이 아니라, 자존감을 비롯한 멘탈 관리가 아닌가 하는 생각이 듭니다. 너무도 당연한 거라 아무도 강조하지 않는지 모르겠지만, 이제껏 개발자랍시고 지내 온 기간을 돌이켜 보면, 어떤 개발 기술이나 지식이나 경험보다, 스스로의 감정 상태를 잘 바라보고 긍정적인 상태를 유지하거나, 전환하는 것이 더 중요했던 것 같습니다.

어쩌면, 이번에 결과물이 기대 이하였기 때문에 우울해졌다고 생각했는데, 정확히 얘기하자면, 스스로를 더 잘할 수 있는 사람이라고 여기다가, 그게 아니라는 걸 바라보게 되어 상실감을 느꼈나봅니다. 하지만, 원래 없던 능력을 과대 포장해서 착각했던 것이므로, 원래 없는 것을 없다고 알게 된 거니 상실은 아닌 거죠. 없다면, 이제부터라도 챙기면 되는 겁니다. 암튼, 이제 이 글로 털어놓으며 징징거리는 건 끝내고, 뻔뻔한 자기 합리화로라도 자존감 좀 챙겨 놓고, 다음 프로젝트 거리를 찾아봐야겠습니다.

여러분도, 멘탈 관리 잘 챙기시면서 지내시길 응원하겠습니다. 서로간에 화이팅입니다.

아, 부끄러워서 공개하지 않으려 했지만, 이번 프로젝트 소스를 깃헙에 공개해 두었으니, 참고해주세요. 부끄러운 소스라 비공개로 놔둘까 했지만, 혹시나 또 누군가 자바스크립트로 한글 관련 처리를 하려면 도움이 될 수 있을지도 모르니까요.

https://github.com/hatemogi/hallatype

긴 글 읽어주셔서 감사합니다.