1인 메이커 회고 : 정답, 강박, 유연성
다시 시작하기
모바일 앱을 만들기 위해 맨 처음 개발할 때 시작했던 Flutter 를 다시 집어들었다. 내 목표는 최소한의 기능을 가진 안정적인 제품을 최대한 짧은 시간 내에 빠르게 개발하기 였다. 여러 장점이 있고 간단히 경험이 있었기에 Flutter 를 선택했다.
어떻게 시작할까?
개발은 무작정 시작하는게 아니라 최대한 기존의 좋은 기술, 방법, 패턴을 미리 알아본 뒤 도입하자 였다. 구글링을 하며 찾다보니 "BLOC" 이라는 걸 알게 되었다.
이미 많이 사용되던 패턴, 관심사 분리, 테스트 용이성 등 좋은의견들을 보았다. 그리고 무엇보다 Flutter 를 만든 “구글”이 권장한다는 문구를 본 순간 이게 Flutter 에서 “정답” 이며 사용하기로 결정했다.
도입
약간의 개발 테스트와 함께 짧은 공부를 마쳤고 바로 적용하여 앱을 만들기 시작했다. 일단 만들다보니 관심사가 분리되고 코드도 보기 좋아 참 만족스러웠다. 나보다 뛰어난 그들의 발자취를 따라가다 보니 설렘과 뿌듯함 또한 존재했다.
형편없는 생산성
문제는 생산성이였다. 익숙하지 않은 방법에 대해 사전에 충분한 공부 없이 활용하다 보니 손이 많이 갔고 문제도 많이 생겨났다. 페이지 3개 만드는데 1주일이 걸렸다.
ChatGPT 와 함께 일을 했는데 GPT 는 BLOC 은 잘 못 했고 일일이 코드를 쳐야 했다
뭔가 잘못됐다는걸 깨달았다.
그래도 구글!
그래도 구글이 쓰라잖아! 하는 생각이 들었고 도전적인 생각도 들었다. 이대로 물러서기 싫었고 계속 공부하며 이해하고 익숙해지려 하고 밀고 나갔다. 속도는 조금씩 빨라지고 있고 문제는 잘 해결되고 있었다.
기한은 다가온다
하지만 하루 하루 내가 정한 기일은 찾아왔다. 어느 순간 마음속 한 켠에선 “야! 이거 뭔가 잘 못 됐다 이래선 니가 목표한 기간에 못 맞춘다“ 를 마음 속 누군가가 외치며 빨간색 스위치를 계속 눌러댔다. (아마 직감이라는 녀석 이였던거 같다) 스스로 정한 목표와 약속에 대한 압박감과 계속 눌러대는 직감의 빨간불에 시달리며 개발을 이어나갔다.
이건 아니다
그러다 어느 순간 "이건 아니다" 라는 생각에 하던 걸 멈추고 침대에 누워서 차분히 현재 상황에 대해 분석했다. 지금 작업량도 적은데 내가 여기 너무 매몰될 필요가 없는건 아닐까? 내 목표를 이루기 위해 맞는 선택인가? 혼자 작업하고 있고 그리 앱 규모가 크지도 않으며 확장한다는 것에 대한 보장도 없는데 너무 과하게 유지보수를 생각한건 아닌가? 여기에 더 투자하고 싶지 않은데 더 쉽고 빠르고 확실한 길이 있지 않을까? 등 여러 많은 생각과 의문점을 정리했다.
강박
결론은 “내가 강박에 빠져있구나” 였다. 앱이 커질 시 유지보수를 고려해야 한다는 생각에 집착했다. 사람들이 많이 쓰며 구글도 쓴다 라는 생각에 집착했다. 즉, 목표보단 행위에 집착했다. 시간은 2주나 지났고 내가 개발한 기능은 고작 4개였다. 스스로에게 부끄러웠고 한심했다. 다시 혼자서 더 빠르게 개발하기 좋은 방법을 찾아보기 시작했다.
때려박기
결국 내가 찾은 제일 쉬운 길은 "BLOC" 패턴 버리기 와 “setState” 를 이용해 한 페이지에 때려박기 였다.
뭐? 한 페이지에 때려박기? 어디 가서 개발자 라고 말하기 부끄럽지 않냐? 어느 시각에서 보면 맞는 말이고 예전의 나라도 똑같이 말하며 비난했을 것 이다.
하지만 지금 난 빠르게 결과물을 만들어야 했고, 막상 이 제품이 잘 될지도 모르는데 그렇게 까지 내 자원을 투입하고 싶지 않았다.
그리고 ChatGPT 는 기가 막히게 setState 를 잘 했다.
그렇게 소스 코드를 완전히 갈아치우고 계속 개발했다. 그래도 유지보수는 최소한은 고려해야 한다는 생각에 구조는 최대한 단순히 하려고 했고 적당히 분리하여 재사용을 고려했다.
생산 공장 가동
하루에 최소 한 페이지 씩 찍어내기 시작했다. 앱과 서버 까지 큰 단위의 기능 한 개당 최소 30분 에서 최대 2일이 걸렸으며, 평균적으로는 1~3 시간 정도 걸렸다. 덕분에 앱에서 시간을 단축할 수 있었고 남은 시간에 서버에도 조금 더 신경을 쓸 수 있었다.
결과적으로 내가 정한 기일은 지났다. 하지만 단순한 앱도 아니였고, 처음으로 비즈니스 로직 까지 만드는 앱 개발에 혼자하는 것 치고는 나름 빠르게 앱을 만들 수 있었다. 이정도의 속도와 결과물은 만족스러웠다.
오히려 좋아
"BLOC" 선택에 손해만 본 건 아니였다. 잘 모르는 도구와 패턴을 공부하고 사용하며 문제를 해결하는 과정을 반복했고 익숙해졌다. 새로운 지식, 경험, 이해도를 높히는데 매우 좋은 과정이였다고 생각한다. 그리고 하지 않았다면 이정도의 시간 단축은 힘들었을 수도 있다.
그거 밖에 안 돼?
분명 누군가는 나의 충분한 사전 탐색, 문제 해결력, 실력, 생산성, 코드 퀄리티, 기술 채택 등에 대해 의문, 비난, 비판 등을 할 수 있다. 여러 시각에서 보자면 다 맞는 말이다. 스스로도 부끄럽고 아쉬우며 부족함을 많이 느낀다.
하지만 혼자서 제품 빠르게 만들기 라는 나의 목적에 어느정도는 부합했다고 생각한다. 내가 무리하게 선택한 방법을 억지로 밀고 나가며 시야가 좁아지고 압박감에 파묻혀 기회 비용에 더 이상 매몰되지 않았다. 목표에 맞는 더 좋은 선택을 했고 어느 정도 달성했다.
제품이 더 커져서 유지보수가 중요해지거나, 여러 사람이 작업하게 된다 거나 등의 문제가 생기면, 그때 가서 고려하여 적용하면 된다.
정답
이건 무조건 된다, 이건 어떤 상황이든 되는 방법이다 같은 말들이 있다. 흔히 말하는 “정답” 이라는 것들이다. 나를 포함한 많은 사람들이 "정답"이라고 하는 기존의 성공 방식에 대해 얘기하며 의문을 가지지 않고 그 방법을 따르라고 얘기한다.
하지만 항상 정답인게 존재할 수 있을까? 그건 진리에 가까운 것이라고 생각한다. 그리고 진리는 숨겨져 있어서 내가 못 찾고 있는 것 일수도 있고, 존재하지 않을 수도 있다. 아직 나는 진리를 찾지 못한 어리석은 중생이다.
그래도 누군가 너가 생각하는 정답을 확실히 해돌라고 묻는다면 "유연함" 이 라고 답할 것 이다. 자신과 상황에 맞춰 적절한 방법을 선택하고 실행하며, 잘못됐다면 자신의 실수를 인정하고 개선하는 삶이 나만의 정답이라고 믿는다.