[회고록] 2024년

이번 연말엔 크고 작은 사건들이 많아서인지 연말 기분이 안나더라구요. 개인적으로도 크리스마스를 기점으로 많이 바빠지면서 회고를 쓸 생각조차 못하고 25년을 맞이했지요. 지금이라도 2024년을 돌아보면서 기억나는대로 내용을 정리해보려 해요. 물론 그 전에 작년 목표를 이루었나 점검도 해보면서 말이죠.

2023년의 회고 요약하기

2023년에는 이것저것 다양한 활동들을 했어요. 출장, 강의, 동아리, 해커톤 등 오롯이 개발을 공부하는 시간보다는 다양한 활동들을 경험했던 1년이었습니다. 내 기술 스택을 키워나가지 못한 것이 조금 아쉬웠었고, 이를 보완하기 위해 2024년에는 4개의 사이드 프로젝트 배포, 플러터 모르는 부분 공부하기, 강의 활동 및 운동이라는 목표를 세웠었습니다.

목표를 달성했나?

결론부터 말하면 나름의 목표는 달성했습니다! 사실 가장 큰 목표였던 4개의 사이드 프로젝트 배포를 어떻게든 해냈다는 사실이 돌이켜보니 꽤 뿌듯하더라구요. 이에 대한 내용은 아래에서 좀 더 자세히 다뤄보겠습니다.

대신 강의는 아예 하지 못했어요. 폐강이라는 가슴아픈 소식이 있었는데, 지금의 내가 무언가 할 수 있는 일은 아니라고 생각되어 크게 미련 갖지 않았습니다. 중간에 집필 제안도 있었지만 결국은 무산되었어요. 그 무엇보다 아쉬운 것은 플러터 모르는 부분 공부하기를 제대로 하지 못했던 것이에요. 프로젝트를 만드는 것에 집중하다보니 새로운 기술에 대한 공부나, 깊이 있는 공부는 하지 못했습니다.

달성했던 목표는?

2024년에는 앞서 말했던 것처럼 프로젝트 4개 배포라는 목표를 세웠었습니다. 퀄리티가 어쨌든 4개를 만들고 각각 배포까지 잘 해냈습니다. 각 프로젝트마다 개발기록을 작성하고 있으며, 각각에 대한 간단한 소감만 정리해보겠습니다.

1. textcolor-picker

가장 처음으로 시작한 프로젝트입니다. 제일 쉬운 프로젝트를 얼른 배포해보자는 마인드로 진행했었죠. 이 프로젝트는 플러터 기반의 웹 서비스로, 배경색을 입력하면 흰색과 검은색 글자가 그 배경색에 어떻게 보여지는지 보여주는 서비스입니다. 아주 간단하죠? 보통 앱 만들면서 텍스트 색을 검은색으로 할까 흰색으로 할까 고민하게 되는데 이를 위한 서비스입니다. 그치만 생각해보니 핫 리로드 덕분에 바로바로 확인이 가능한만큼 크게 유의미하진 않겠네요. 그래도 그냥 무언가 만들어서 올렸다는 것에 의의를 두었습니다.

2. babo-health

요건 플러터로 만든 모바일 앱입니다. 역시 간단한 기능인데, 헬스를 하다보면 여태 몇세트 했는지 까먹는 경우가 많습니다. 그래서 한 세트 끝날 때마다 누를 수 있는 버튼을 만들어서 세트 수를 기록하도록 만들어보았어요. 여기에 운동 기록 기능까지 추가하여 운동 종료 버튼을 누르면 어떤 운동을 했는지 기록할 수 있게 했고, 이를 로그 형태로도 볼 수 있게끔 하였습니다. 앱을 올리긴 올렸는데 홍보를 안해서 그런지 다운로드 수는 거의 없었고, 이미 해당 기능을 포함한, 훨씬 더 많은 기능의 잘만든 앱이 있는 것을 알았습니다.

이 또한 큰 의미를 갖진 않고 앱을 처음 배포해봤다는 것에 의의가 있습니다. 나름 앱 개발 공부를 쭉 해왔지만 실제로 앱을 배포한 적은 한번도 없었어요. 보이저엑스에서 관리했던 앱은 테스트 배포가 된 상태에서 업데이트만 해왔었고, 등록부터 쭉 진행한 적은 없었죠. 이 경험은 굉장히 의미있다고 느꼈는데, 전반적인 앱 생태계의 이해와 배포 절차, 필요한 내용에 대해 이해할 수 있었고 앞으로 어떤 프로젝트를 진행하더라도 배포하는데 있어 두려움은 많이 없겠다는 것을 느꼈습니다.

3. hearthgg

이번 프로젝트는 나름 재밌습니다. 게임 하스스톤의 모드 중 하나인 투기장 랭킹을 검색할 수 있는 웹 사이트입니다. 마찬가지로 플러터로 개발했고, 백엔드는 flask 어플리케이션을 도커 컨테이너 형태로 구성, fly.io에 배포해봤습니다. 나름 여러번 버전 업데이트도 하고 제일 애착이 갔던 프로젝트입니다. 이 프로젝트에서는 MVVM 아키텍처를 좀 더 신경써서 작업했습니다.

직접 백엔드를 구성하고 운영하다보니 요청을 보낼 때 항상 한번에 응답이 제대로 오지 않았었습니다. 아주 간단히 구현한 flask와 거의 무료로 돌린 fly.io의 한계였겠죠. 이 덕분에 RetryClient에 대해 알 수 있었습니다. 또 스타일을 일일이 지정하려다보니 통일감이 없는 모습이 아쉬웠어요. 그래서 ThemeData에 대해 공부하고 일부 적용하는데 성공했습니다.

이외에도 여러가지 문제를 해결해가면서 필요한 공부를 해낼 수 있었습니다. 그럼에도 아쉬운 부분은 플러터 웹의 아쉬운 점입니다. 플러터 웹은 메이저 분야가 아니다보니 지원이 많이 안되고 있습니다. 관련한 자료 찾기도 많이 어렵고, 일반적인 웹 프레임워크에서 간단히 구현하거나 해결방법이 이미 나와있는 CORS와 같은 에러들도 플러터 웹에서는 답답한 문제였습니다. 제일 아쉬운 부분은 1. DOM 요소가 구성되지 않고 단일 요소로만 표현되는 점, 2. 라우팅 관련한 오동작 및 구현이 어려운 점, 3. 관련 플러그인 및 구현체가 제대로 되어있지 않았다는 점 입니다.

이제 서비스 운영은 중단하고 기존까지의 데이터를 아카이브하여 보관 중입니다. 서버비가 은근 웬만한 구독료만큼은 나오네요..

4. from i to me

제일 완성도 높은 프로젝트입니다. 드디어 연말 프로젝트를 하나 성공해내다니.. 참 뿌듯한 순간이었습니다. 아이러니하게도 플러터가 아닌 리액트로 만들었어요. 이 프로젝트는 gpt api를 활용해서 2024년의 내가 2025년의 나에게 쓰는 편지를 작성해주는 서비스에요. 항상 연말, 크리스마스가 되면 트리를 꾸며줘와 같은 계열의 서비스를 만들어보고 싶었어요. 제일 유저를 쉽게 모을 수 있는 이벤트 기간이랄까요? 매년 연말에 여유가 없거나 생각 못하고 넘어간 경우가 많았는데, 처음으로 배포까지 하여 사용자들을 모을 수 있어 재밌었습니다.

또 한편으로 gpt를 사용한 서비스를 만들고 싶었어요. 요즘에 gpt를 활용한 서비스들이 많이 생기고 있고, 확실히 그 결과물이 노력 대비 더 잘 나오는 경향이 있더라구요. 무엇보다 사용자들에게 신기한 경험을 제공할 수 있다는게 재밌는 포인트였습니다. 서비스에 gpt를 적용해보면서 프롬프트를 잘 짜서 입력하는 게 중요하다는 것을 느꼈습니다. 이것을 서비스로 내놓으려면 일정한 퀄리티가 보장이 되어야 하고, gpt와 같은 llm은 이것을 보장하는게 꽤 어려웠어요. 우선은 적당한 수준의 결과물을 내놓는 프롬프트를 적용하여 백엔드를 구축했는데, 이 과정에서 파인튜닝과 RAG와 같이 llm을 더욱 잘 쓸 수 있는 방법에 대해 고민하고 관심 갖게 되는 계기가 되었습니다.

기술적으로 또 재밌었던 점은 모든 백엔드 기능을 Firebase로 구현했다는 것입니다. 기존에 플러터를 활용해 개발할 때에도 Firestore나 Hosting, Authentication 정도는 사용해봤는데, Functions와 Storage까지 활용하면 더 그럴듯한 백엔드를 구축할 수 있겠더라구요. 특히 Functions는 이전에 AWS Lambda로 잠깐 경험해봤던 MSA와 같은 Function 기반의 서버리스 아키텍처를 간단히 구현할 수 있어 재밌었습니다. 적어도 혼자 개발하는 입장에서는 활용하기 아주 좋을 것 같았어요.

현재까지 실 사용자 수는 30명 정도인 것 같아요. 나름 혼자 만든 서비스 중에서는 제일 많은 사용자 수를 기록하였지만, 기대보단 결과가 약간 아쉽긴 하네요. 홍보를 좀 더 적극적으로 했어야 했나 싶기도 하면서, 7개의 질문에 답변하는 과정에서 유저의 이탈이 많이 발생했을 것 같아요. 이 부분을 Google Analytics로 확인했어야 했는데, 빠르게 올리느라 이벤트 등록을 안해놓았어요.

실제 사용자를 대상으로 한 서비스를 운영하다보니 여러가지 필요한 것들을 깨닫게 되었습니다. 첫번째로는 SPA와 Client Side Rendering의 한계에 대해 알게 되었어요. og-tag와 같은 것으로 사용자들에게 더 좋은 경험을 제공하려면 각 페이지마다 tag를 설정할 수 있어야 했는데, React와 같은 SPA, 그것도 CSR 방식의 페이지는 불가능 했기 때문입니다. 여태까지 SSR이 왜 필요한지 정확히 이해하지 못한 부분도 있었는데, 이래서 필요하겠구나 싶었네요. 두번째로는 에러가 발생했을 때 빠른 대응이 필요하다고 느꼈어요. 언제 어떤 에러가 발생할 지 모르니 노트북을 챙기게 되는 습관이 있었는데, 이래서 모니터링할 수 있게끔 로그 수집 및 체계를 구성하는 거구나 이해할 수 있었습니다. 역시 뭐든 만들어봐야 이걸 왜 하는지 알게되네요.

그 외 했던 개발 관련 일들?

이제 머지 않은 취업 시기를 대비하여, 코딩테스트 준비도 조금씩 하고 있습니다. 우선 1차 목표로 가장 난이도가 쉬운 프로그래머스에 있는 문제를 모두 풀어보는 방향으로 진행해봤습니다. 1년동안 410문제를 풀었고, 135문제 정도 남았네요. 프로그래머스를 졸업하면 leetcode 와 같이 해외 페이지 문제들을 해결해보려고 합니다.

고민

문득 취업에 대한 고민과 걱정이 많아진 시기가 왔었습니다. 나름 길을 잘 잡고 가고 있었다고 생각했는데, 시간이 너무 흘렀나 목표를 잠시 잊고 흔들렸던 것 같아요. 가장 큰 걱정은 내가 지금 이 상태로, 이렇게 준비해서 목표한 곳에 취업할 수 있을까? 하는 생각이었습니다. 어느샌가 신입으로 취업해도 괜찮다는 다짐은 잊고 너무 먼 목표를 생각하며 달리다보니, 더욱 막막했던 것이죠. 3km만 뛰면 완주인데 하프 마라톤을 준비한 느낌이랄까요?

객관적으로 지금 제 능력은 신입1년차 정도인 것 같아요. 이 사실을 인지하는게 꽤나 부끄럽고 고통스럽지만 어쩌겠습니까. 깊이 있는 공부를 해오지 못한 제 탓이겠죠. 그럼에도 제 생각엔, 어딜 가도 신입1년차로 충분히 가능한 능력은 가지고 있다고 생각합니다. 단지 그간 투자한 시간 대비 성장이 많이 이루어지지 않았을 뿐. 아래에서 마치며 정리하겠지만, 남은 1년반 가량의 시간을 2~3년차 정도의 기술적 깊이를 가진 사람으로 성장할 수 있도록 노력하려고 합니다. 이제 더이상 새로운 서비스를 만들거나, 강의와 같은 부가적인 활동에 힘을 쓰지 않고 좀 더 고통스러운 시간을 보내보려고 해요.

유난히 대학생 때부터 그런 시간을 어려워하고 피해왔어요. 다른 친구들이 다 정공법으로 공부하며 과제하고, 아예 막막한 분야를 공부해가는 과정을 거칠 때, 저는 순간순간 잘하고 재밌는 것들만 해왔어요. 사실은 하기 싫은 공부를 하고 고통스러운 과제를 해내는 그 시간들이 앞으로의 삶의 태도에 큰 영향을 미치는데 말이죠. 그러다보니 졸업을 하고 개발 공부를 할 때에도 조금이라도 어렵거나 잘 모르는 내용에는 관심을 갖지 않고 당장 할 수 있는 것들만 쫒아 왔어요. 대학원을 가지 않은 이유에 이것이 전혀 없었나 하면 그것도 아니라는게 제법 부끄러운 일이네요. 올해 세운 목표들 중에는 오픈소스 분석 및 기여가 있어요. 당장의 결과물이 나오는 분야가 전혀 아니고, 아주 지루하며 고통스러운 일입니다. 이것을 통해 개인적인 실력의 성장과 더불어 개발 공부를 대하는 태도를 바꿔보고 싶습니다.

2025년 목표

앞선 고민들을 한참 하면서 남은 시간을 어떻게 보낼까, 2025년을 어떻게 보낼까 많은 고민을 해왔습니다. 이를 통해 정리한 가장 큰 목표는 오픈소스 분석 및 기여입니다. 누구나 알고 있지만 쉽게 하지 못하는 일은 정석적인 공부입니다. 앞서 제가 그것을 피해왔고, 그러기에 제 실력의 성장이 더뎠다고 했지만 그게 나만의 일은 아닐 것입니다. 언제나 그렇듯 정공법은 어려운 법이죠. 제 주변에는 너무 잘하는 분들이 많아서 더 자존감이 낮아졌을 수 있겠지만.. 하여간 제일 어렵지만 제일 효과가 좋은 방법이라고 생각해요.

가장 친숙한 플러터 분야의 여러 패키지와 같은 오픈소스들을 분석하려고 합니다. 이때 얻고 싶은 것들은,

  1. 잘하는 플러터 개발자들이 작성한 코드 스타일, 개념, 방법론, 파일 구조 익히기
  2. 모르는 플러터 개념 채우기
  3. 플러터에 기여하기 위한 실질적인 수준 체감하기
  4. 코드 읽는 속도 올리기

최대한 많은 프로젝트들을 리뷰하면서 내용들을 정리하고, 그들이 어떻게 생각하고 작성하는지 최대한 배워보려고 합니다. 그동안 잘 몰랐던 플러터의 빈 개념들을 채우는 것도 함께 할 수 있을 것입니다. 이렇게 오픈소스들을 많이 보고 익히면서 최종적으로는,

  1. 가능한 큰 규모의 프로젝트(GetX, Bloc, Flutter …)에 PR 올리기
  2. 내 오픈소스 프로젝트 시작하기(sqflite-helper, auth-helper, flutter web …)

이렇게 오픈소스 쪽으로 기여하는 것이 가장 큰 목표입니다. 너무 그동안은 혼자만의 세상에서 내가 최고인줄 알고 살았다면, 이제 세상에 나와서 남들이 하는 것을 보며 배우고, 나의 것을 공유하는 활동을 올해 가장 메인으로 진행하겠습니다. 물론 시간 대비 ‘보여지는’ 결과는 적겠지만, 이제 더이상 그것이 중요치 않다는 것을 알고 있는 만큼 절대 흔들리지 않고 목표 달성을 위해 정진해보겠습니다.

이런 류의 목표와 공부는 어떻게 보면 처음하는 것 같은데, 이런 일들은 루틴화할 수록 더 좋을 것 같아요. 지루한 일들을 꾸준히 하려면 습관으로 만드는게 가장 쉬운 방법이라고들 하죠. 삶의 규칙을 만들면서 거르는 날 없이 꾸준히 할 수 있도록 세부적으로 잘 진행해보겠습니다.

그 외 부가적인 목표로는,

  1. 코딩테스트(프로그래머스 졸업, leetcode로 넘어가기)
  2. 영어공부(gpt 음성기능 활용)
  3. RAG 공부(랭체인 활용 구현, 에이전트화)
  4. Jetpack Compose, Swift UI 찍먹

이 중에서 1, 2번 항목은 루틴에 추가하여 가능한 매일 꾸준히 해야하는 일입니다. 취업에 꽤 직접적으로 영향이 있는 분야들인만큼 메인 목표급으로 중요하게 다뤄야 할 것 같아요.

RAG에 대해서는 최근에 관심이 많아져서, 회사에서 연구 시간을 할애하여 투자하면 좋을 것 같습니다. 마침 함께 연구할 친구도 있어서 적절히 너무 깊진 않게, 그래도 유의미한 결과를 1년동안 만들어보고 싶어요.

플러터를 한참 공부했지만 오히려 반대로 네이티브에 대한 갈증이 계속 있었어요. 네이티브를 잘 알아야 플러터를 더 잘할 수 있을 것 같다는 생각도 자주 들었어요. 그동안 네이티브에서 제일 거부감이 들었던 것은 xml와 같은 명령형 UI 방식이었는데 이것을 요즘엔 선언형 UI 방식으로 바꾸고 있더라구요. 플러터가 이런 현대적인 방식을 채택했기 때문에 특히 더 호감을 가졌었던 것 같아요. 안드로이드에서는 Android Jetpack Compose, iOS에서는 Swift UI를 통해 이를 제공하는데, 간단히 익혀보면 네이티브를 좀 더 쉽게 공부할 수 있을 것 같아 간단히 알아봐볼까 싶습니다. 시간이 남는다면 말이죠.

마치며

1년을 돌아보는 시간은 언제나 괴롭기만 했었는데, 올해엔 나름 뿌듯한 부분도 있어서 기뻤습니다. 그럼에도 아쉬운 것을 보면, 후회 없는 시간을 보낸다는게 얼마나 어려운 일인지 다시금 느낍니다. 남들과 비교하려니 더 어려운 것 같아요. 다들 다른 상황 속에서 각자의 시간을 보내는 것인데 보여지는 일부의 결과물만 놓고 비교한다는게 말이 안되지만 그럼에도 조금은 우울해지는 부분이 있네요.

그럼에도 올해의 비교대상은 작년의 나로만 두고 살아야겠습니다. 매일 매일을 후회 없이 지내다보면 1년을 돌아봤을 때 분명 유의미한 시간이었다고, 일말의 아쉬움도 없다고 느낄 수 있지 않을까 기대해봅니다.

Author

TaeBbong Kwon

Posted on

2024-12-31

Updated on

2025-12-31

Licensed under

Comments