롤러코스터
올해 초에는 이름도 거창한 Tech Lead Manager라는 직함을 갖게 되었다. 그러니까.. 필요할 때에는 관리 일도 하고, 필요할 때에는 개발도 직접 (꽤 큰 비중을) 하라는 얘기다. 그러니까 개발이랑 관리를 둘 다 잘 해야 하고, 어느 쪽에 더 많은 노력을 기울여야 할 지 잘 알아야 할 수 있는 일이다.
처음엔 포부가 컸다. 내가 잘 할 수 있으리라 생각했다. 이미 기존에 이 포지션의 대리로 1분기를 지냈다. 이를 잘 수행했기에 회사에서 신뢰를 준 것이라고 봤다. 적은 연차에, 큰 기회가 왔고 잘 살려서 성과를 내야겠다고 생각했다. 그래서 마치 출사표처럼, 나의 관리자로서의 목표 를 비롯해 이런 저런 글들을 썼다. 아직도 그 때 쓴 글들에 담긴 생각들은 유효하다.
하지만 웬걸. 1달이 안 되어 대규모 인력축소가 있었다. 1주 전에 내가 독려하고 응원하고, 함께 성장할 계획을 짜나갔던 사람들에게 퇴사를 종용 또는 안내하게 되었다. 스트레스를 아주 많이 받았다. 무력감을 많이 느꼈다.
스트레스를 잊기 위해, 그리고 실질적으로 닥친 위기를 극복하기 위해 과로를 했다. 어수선한 분위기를 달래기 위해 면담도 많이 했고, 퇴직한 개발자들의 빈자리를 채우기 위해 개발도 많이했다.
그 외에도 스트레스를 받을 이유가 더 많아졌다. 특히 힘든 것은 주니어 개발자일 때와 달리, 그 내용을 공유할 수 있는 범위에 더 많은 한계가 생긴다는 점이다. 아무튼 공개채널에 말하긴 어렵지만 이러저러한 이유로 스트레스를 많이 받았다.
3분기 쯤에는 번아웃이 왔다. 다행히 번아웃의 초기증상을 어느 정도 인지하고 있어서 심해지기 전에 인지하고 대처할 수 있었다. 의사들이 뻔히 하라는 일들을 하기 시작했다. 일을 줄였고, 규칙적으로 식사하고 충분히 수면하고, 숨이 차는 운동을 하고, 자극적이지 않고 색깔이 많은 음식을 먹었다. 내가 힘든 부분을 CTO님과 아내에게 털어놓았다. 1~2개월여만에 상태는 크게 호전되었다. 지금은 회사도 내 상태도 많이 개선되었다. 지금만 같으면 정말 즐겁게 일할 수 있겠다고 생각한다. 응원을 해준 구성원들과 CTO님, 그리고 아내 덕이다.
iOS 개발자를 넘어서
여러모로 힘든 와중에 Gen AI의 빠른 발전은 좋은 자극이 되었다. 뉴럴넷을 이해하고, LangChain을 깔고, 간단한 RAG를 만들어가는 과정은 오랜만에 순수한 놀라움과 즐거움으로 몰입할 수 있는 코딩거리가 되었다. 내년에는 기필코 이를 활용한 기능을 회사 내에서든 외에서든 출시해야겠다고 생각한다.
특히 GPT-4 를 마음껏 쓸 수 있게 된 이상, 다른 분야의 개발을 배우는 일을 늦출 필요가 없다고 생각했다. Go기반의 서버개발과 TypeScript+React 개발, Kotlin Multiplatform Mobile 등을 찍먹했다.
Kotlin
KMP의 경우 중요 비지니스로직을 작성하는 플랫폼으로 기대를 걸었으나, 참조타입을 기반으로 동작하는 Java플랫폼의 특성상, 모던 어플리케이션의 공통로직을 작성하도록 하기에는 어렵다는 인상을 받았다. 공통모듈을 하나의 언어로 만들어야 한다면, 가급적 값타입을 중심으로 작성되었을 때 유지보수 및 테스트가능성이 올라갈 것으로 봤다. 특히 안드로이드와 iOS진영 모두에서 결국 Redux 중심의 디자인패턴이 득세를 하는 상황에서는 더욱 그렇다고 봤다. 이런 면에서는 오히려 Go로 공통로직을 작성하는 것이 더 이득이겠다 생각했다. 하지만 유저의 인터랙션을 직접 받게되는, 특히 하나의 바이너리로 그 모든 기능을 작동시켜야 하는 네이티브 앱은, main에서 모든 로직이 시작하고 각 엔드포인트별로 바이너리를 각각 만들 수 있는 백앤드에 비해 일반적으로 더 많은 추상화가 필요했다. 그런 면에서 Go 같이 추상화를 미루려는 언어와는 결이 맞지 않는다.... 등등의 생각과 시행착오를 겪었다. 결국
Kotlin진영에서 프로젝트 발할라를 완성하는 것, 또는 Swift가 큰 오버헤드 없이 Android에서 동작할 수 있게 되기를 기다려야 한다는 결론에 다다랐다. C#, Xamarin을 활용하는 방안도 있겠으나 직원교육이라는 비용을 정당화시킬만큼의 임팩트를 기대하기는 어렵다고 봤다.
KMP에서 더 큰 가능성을 발견했더라면 이 시행착오들이 결실을 이룰 수도 있었을텐데 하는 아쉬움이 남는다.
Go
Go는 배우기 참 좋은 언어다. 언어의 스펙 자체가 작고, 프로젝트를 셋업하고 테스트코드를 돌리기까지의 과정이 매우 짧다. https://go.dev 등에서 제공하는 튜토리얼, 문서, 가이드 등이 방대하고 이해하기 쉽게 되어있다. Go 이전에, 좋은 문서란 어떤 문서인가 라는 레벨에서 좋은 공부가 되었다.
회사에서 Go 기반의 서버코드가 많아 많은 코드를 읽을 수 있었다. 지하철에서 뉴스를 보듯이 회사 코드를 읽었다. 곧 공통되는 패턴을 발견 할 수 있었고, 가독성은 더 높아졌다.
회사에서 간단한 서버측 버그를 수정하고, 사소한 기능들을 추가했다.
Go의 기본스펙과 컨벤션, Proverb등을 Anki카드로 만들어 수시로 외웠다. Go로 풀타임 개발을 할 일이 적었던 만큼, 배웠던 내용을 빠르게 망각했기 때문이다. 다행히 이 전략은 효과가 좋았다. 내년에는 풀타임으로 Go 서버 개발을 할 수 있겠다는 자신감을 얻었다.
React / TypeScript
내년 1분기에 런칭을 목표로 하는 작은 사이드프로젝트를 만들고, Figma에서 생성해주는 코드들을 최대한 활용해서 각 컴퍼넌트를 만들고 각 컴퍼넌트로 화면을 구성하여 앱을 만들어보고 있다. 생각보다 높은 생산성이 나왔다. 앞으로는 디자인 시안만 보여주면 곧 AI가 각 화면의 구현을 작성 할 수 있다고 본다. 이 때 1~2년 안에 해결되기 어려울 것으로 보는 것은 반응형, 내지는 접근성이다. 따라서 이와 관련한 css, html 스펙을 이해하는 것이 제일 효율 좋은 투자로 보여 공부했다.
2024년 목표
내년에는 삶의 색깔을 더 다양하게 칠할 수 있도록, 정량적 목표를 세웠다.
실천목표
•
1000개의 제텔카스텐 카드
•
52편의 시 작성
•
52개의 유튜브 영상 제작
•
24개의 서평 작성
•
4번의 하남시민예술회관 이용
•
2개의 개인 앱 출시
이 목표달성의 핵심은 1000개의 제텔카스텐 카드라고 본다. 이 카드들을 활용해, 컨텐츠를 쉽고 적은 비용으로 만드는 것이 핵심 전략이다.
결과목표
이를 통해 최종적으로 달성하고자 하는 목표는 다음과 같다.
•
출시하는 앱 별로 MAU 1만 달성
•
유튜브 채널 1만명의 구독자 획득
•
뱅샐 MAU 2배 성장
나는 전략적, 체계적으로 움직인다면 충분히 달성가능한 목표라고 생각한다. 지금의 이 포부를 내년 연말에 어떻게 회고할지 궁금하다.