- Published on
2025년 상반기 개발 회고
- Authors
- Name
- shleecloud
들어가며
작년부터 이야기하던 사업에 2025년 1월부터 본격적으로 합류해서 일을 시작했다. 개발자는 나 혼자. 정신없는 나날을 보냈고 블로그도 그렇게 방치됐다. 회사 생활에 대해 이야기를 하고 싶지만 그러기가 쉽지 않다. 민감한 내용일 수 있고 상황에 따라 달라지기도 하기 때문이다. 그러므로 오직 개발에 대한 내용으로 회고 글을 쓰고자 한다.
해왔던 일들
AI 서포트
반복되는 작업을 프롬프트로 만들기
1인 개발 환경에서 가장 중요한 것은 효율성과 생산성이다. 어떻게든 반복되는 작업을 줄여야 한다. 내가 택한 방식은 작업 단위로 프롬프트를 생성해두면서 생산성을 끌어올렸다. 반복적으로 일어나는 작업 프롬프트를 복사해서 사용하는 방식이다. (지금은 Cursor에서 따로 지원한다.)
예를 들어, 풀스택 환경이니까 백엔드에서 만든 API 코드를 참조하여 프론트엔드에서 호출 API를 생성하고 타입을 선언하라는 프롬프트 폼을 미리 만들어뒀다. 이어서 Tanstack Query
를 씌우는 프롬프트, 컴포넌트에 적용하는 프롬프트 등 반복되는 작업을 작게 쪼개서 프롬프트를 저장해뒀다.
AI는 한 번에 많은 동작을 할 수 없다. 기억 용량이 부족하고 작업이 길어지면 결과물이 엉망으로 나온다. 요즘은 많이 개선됐지만 올해 초만 해도 한 번에 한 작업만 할 수 있었다.
프롬프트는 소스코드만큼 소중하다
요즘 드는 생각이다. 이 소스코드를 만들기 위한 프롬프트는 어쩌면 소스코드만큼 소중하지 않을까? 예를 들어, A라는 기능을 작성하기 위한 프롬프트를 저장해두면 A1 이라는 비슷한 기능을 만들 때 그 프롬프트를 다시 사용하면 된다.
마치 소스코드를 컴파일하고 바이너리 파일로 만들듯이, 프롬프트가 AI 시대의 소스코드이고 그 결과물인 소스코드가 바이너리 파일이 될 것이다.
앞으로는 프롬프트를 관리하는 기술이 중요하게 될 것이다. 지금도 이미 Task Master
라는 이름으로 목표 달성을 위해서 프롬프트를 나누기 시작했다.
## 리팩토링
나의 개발 철학은 확장성이다. 지금 당장은 모든 기능을 개발할 수는 없지만 추후에 새로운 비즈니스 로직이 추가하기 쉽게 만드는 걸 목표로 만든다. 1인 개발이니 생산성을 극한으로 높여야 했다.
- NodeJS/Express 기반으로 무질서하게 작성된 레거시 코드를
NestJS
,Prisma ORM
기반으로 다시 만들었다. -TypeScript
를 모든 코드에 도입해서 타입 안정성을 높였다. - 프론트는React18
기반으로Tanstack Query
,Tanstack Table
를 적극 활용했다. (SSR 안 쓰면 NextJS 쓸 이유가 없다) - 이 시기에
Headless UI
가 유행해서 Shadcn UI를 써보다가Radis UI
를 접하게 됐다. - 스타일은 tailwind도 고려했으나 10년 뒤를 생각하면서
emotion(styled-components)
손을 들어줬다.
요즘은 이런 코드나 라이브러리 선택은 어느 정도 안정화 된 것 같다. 요즘은 어떤 라이브러리가 더 좋네 하는 병림픽은 어느 정도 정리된 것 같으니. AI 시대가 열리게 생겼는데 지금 라이브러리가 중요하겠냐고. 하지만 이런 개선 작업은 즐겁다. 피곤하지만 제일 재밌는 부분이다.
PWA
React18 기반 웹을 고객의 스마트폰에 설치하도록 만들고 싶었다. 자연스럽게 접하게 된 PWA (Progressive Web App)
웹을 앱으로 설치할 수 있다니! 유저 경험이 압도적으로 나아질 것이다! 그렇게 개발 시작하고 느낀 감상은.. PWA.. 정말 거지 같다!!! 특히 환경마다 다르게 동작하는 부분이 정말 화나게 만든다.
대표적으로 DragDown
. 화면을 아래로 끌어내려서 새로고침 하는 기능은 안드로이드에선 기본 지원이지만 아이폰에선 지원하지 않는다. DragDown 이벤트를 따로 만들어서 처리해 줘야 한다.
사용자가 PWA 설치까지 가는 과정이 힘들다. 브라우저로 먼저 접속해서 홈 화면에 설치하려면 직접 브라우저 메뉴에서 들어가야 한다. 하지만 브라우저마다 환경이 달라서, Safari와 Chrome 동작이 다르다. Chrome도 Brave가 또 다르고 안드로이드 폰 중에선 자체 인터넷 앱이 다르다. 이 문제를 그나마 해결하는 프로젝트 add-to-homescreen 덕분에 조금 편했다. 하지만 삼성 인터넷이나 네이버 등 모든 브라우저를 호환하지는 않는다.
아무튼 쉽게 접근하지 마시라. 사람들이 잘 안 하는 데는 다 이유가 있다.
윈도우 개발
올해 상반기에 도전했던 일중에 하나는 윈도우 에이전트 개발이었다. 나는 웹 환경의 개발만 해봤지 윈도우 앱을 만들어본 경험은 없다. 그러다가 사업에서 윈도우 PC를 원격으로 종료하는 앱이 필요하게 됐다. 기능을 나열해 보면,
- MQTT 통신
- 시스템 종료
- 백그라운드 자동 업데이트
로직 자체는 어렵지 않다. 클라이언트는 무한히 늘어날 것이니까 통신 방식은 MQTT를 택하고 AWS IoT Core
플랫폼을 활용했다. 시스템 종료는 cmd
를 활용하면 됐다. 문제는 실행과 자동 업데이트다.
이 과정에서 바이브 코딩이 큰 도움을 줬다. 배경지식이 없는 플랫폼의 개발을 하면서 막막한 부분을 시원하게 해결해 줬다. 어떤 요소가 필요한지 물어보고 만들어진 코드를 기반으로 어떤 기능을 하는지 물어보거나 빠지거나 더 추가할 기능이 있는지 물어봤다.
Electron 기반 윈도우 에이전트 개발
나는 Javascript 기반의 개발에 익숙해서 곧바로 접근하기 쉬운 Electron을 선택했다. 이건 추후에 잘못된 선택이 된다. 클라이언트 중에는 이미 지원이 중단된 Windows7 도 있었고, Electorn은 Windows7을 지원하지 않아서 C++ 환경으로 다시 만드는 대참사가 벌어지게 된다.
하지만 일상 업무를 처리하면서 10일
이라는 촉박한 개발 시간에 맞추기엔 어쩔 수 없는 선택이기도 했다. 설치 용량이 크고 메모리를 많이 차지하는 점도 단점이다. 대신 실행 안정성은 C++ 대비 뛰어났다.
C++ 기반 윈도우 에이전트 개발
뒤이어서 Windows7 지원을 위한 C++ 기반 윈도우 에이전트 개발을 시작했다. 서버 코드는 그대로고 타겟이 되는 형상이 있으니 쉬울 것 같았지만 전혀 다른 언어와 플랫폼의 차이 때문에 훨씬 오래 걸리고 힘들었다.
이전보다 더 많은 바이브 코딩을 진행했다. 하지만 AI에 질문해서 넘어갈 수 없는 부분은 직접 찾아야 될 때가 있는데 자료를 찾아도 너무 오래되거나 많지 않은 부분이 고통스러웠다.
### 바이브 코딩의 부작용, 디버깅 지옥
MQTT 통신 부분에서 디버깅 지옥이 시작됐다. 소스코드를 대부분 AI에 맡겨버려서 어떤 부분에서 문제가 생기는지 파악하지 못했다. 내가 C++ 언어와 환경에 익숙하지 않은 부분도 한몫했다.
에러 메시지만 단순하게 던져주면 엉뚱한 부분을 고치라고 하거나 질문 루프가 돌았다. 다른 해결책을 돌려가면서 내면서 루프를 만든다. 토큰만 무한하게 써버리고 문제는 해결되지 않았다.
결국 Line by Line으로 코드를 분석하고 현상을 종합하면서 문제를 찾아냈다. 재연결 코드를 동시에 여러 군데에서 호출해서 재연결 경합이 이루어지고 있었다. 재연결 상태를 공통 변수로 관리하고 한 번만 재연결 하도록 하여 해결했다. 이런 전체 상황을 종합하는 능력은 AI에 모두 맡기기에는 아직 무리다.
외주 개발 관리
새로운 서비스를 런칭하는 미션이 떨어졌다. 하지만 내가 다 만들기에는 (아무리 바이브 코딩을 한다고 해도) 한계가 있었다. 코드의 양이 엄청 많고 일상 업무도 하면서 다른 프로젝트도 동시에 진행하고 있었다. 기술 스택은 기존 서비스와 비슷하고 이런 구조가 일종의 탬플릿처럼 동작하게 돼서 외주를 맡기기로 했다.
진행 방식은 마일스톤을 만들고 주 단위로 오프라인 미팅을 하면서 진행 상황을 체크하고 코드를 리뷰하는 방식으로 진행했다. 자연스럽게 PM 역할을 맡았다. 느낀 점은.. 외주 개발도 쉽지 않다.
- QA가 엉성하다. 직접 꼼꼼하게 살펴보지 않기 때문에 빈틈이 많이 보이고 일정이 늘어난다.
- 마지막으로 갈수록, 기간이 늘어질수록 코드 퀄리티는 떨어진다. 빨리 끝내고 털어버리고자 하는 심리가 반영된다.
- 코드 확장성이 떨어진다. 돈은 정해져있으니 기간을 맞추려면 어쩔 수 없다.
기간과 돈이 정해져있다는 한계점에서 문제가 생긴다. 특히 QA에서 버그를 찾으면서 기간이 늘어날수록 미안한 마음이 커지게 됐다. 그렇게 많이 받고 시작하지 않았는데 예상했던 기간보다 2달이 더 늦어지게 되니 거의 본전도 못 찾으셨으리라. SI는 할 짓이 못된다.
기술 특허
우리 회사는 자금 대출을 위해 특허 신청이 필요한 상황이었다. 그렇게 특허를 공부하면서 처음 알았다. 제품을 시장에 런칭하기 전에 특허를 신청해야 하는 것을. 특히 개발자들은 특허의 중요성을 잘 모른다. 오픈소스를 밥 먹듯이 활용하니 당연히 특허를 신청할 필요가 없다고 생각하는 경우가 많다.
특허를 내지 않고 제품을 출시하면 특허권을 보호받을 수 없다. 이미 세상에 제품이 나왔기 때문에 뒤늦게 특허를 신청해도 받아들여지지 않는다. (지적재산권과 다른 이야기다) 그래서 변리사분들이 얘기하는 바로는 제품을 내기 전에 특허를 먼저 신청하라고 하신다. 하지만! 특허 내는 게 정말 어렵다.
특허법에서 신규성과 진보성은 특허를 받기 위한 필수적인 요건입니다. 신규성은 출원 전에 이미 공개되지 않은 새로운 발명이어야 함을 의미하며, 진보성은 기존 기술에서 쉽게 발명할 수 없는 정도의 기술적 진보성을 가져야 함을 의미합니다.
특허를 출원하고 등록까지 최소 6개월 정도 소요된다. 스타트업은 6개월 기다리다가 굶어죽는다. 그렇게 6개월 기다렸는데 특허 등록에 실패한다? 그럼 기껏 출원한 소중한 특허가 세상에 공개된다. 특허에 신규성이 없으면 특허를 받을 수 없다. 그러면 이전에 출원했던 내용에 비교해서 신규성과 진보성을 확보하지 않으면 특허를 받을 수 없다. 그러면 또 6개월 기다려야 된다. 무한 루프.
그리고 특허를 이용해서 공격과 방어까지 신경 써야 되니 더 어려워진다. 자세하게 쓰면 쓸수록 특허를 보호하는 방어력이 낮아져서 특허를 출원하는 의미가 없어진다. 하지만 특허를 모호하게 쓰는 건 정말 어렵다. 특허 준비하다가 머리 터질뻔했다. 다행히 특허 없이 기술 담보 대출을 받게 돼서 중간에 우선순위가 쭉 떨어졌지만 언젠가 해야 되는 숙제로 남아있다.
멘탈 관리
프로젝트로 할 일이 많은데 일상적인 다른 개선 작업도 겹치면서 업무량이 2배가 됐다. 그렇게 시작한 야근과 주말 근무로 일과 삶의 경계가 무너졌다. 아침 7시 30분에 시작해서 저녁 10시까지 작업을 하다가 잠에 들고 다시 아침 7시 30분에 작업을 시작하는 생활을 했다. 야근하는 게 뭔가 더 일을 잘? 열심히? 하는 것처럼 느껴졌다. 그게 나를 좀먹었다.
잠깐 야근하거나 주말 근무하는 거면 끝난다는 희망이 있어서 괜찮다. 하지만 거의 한 달을 내내 그렇게 사니까 이걸 왜 이렇게까지 해야 되는가 싶더라. 그 시기에 목적의식과 집중력이 많이 떨어졌다. 그러면서 악순환이 시작된 것 같았다. 심할 때는 하루 종일 작업을 했는데 돌아보니 2시간 집중해서 한 것보다 더 나은 결과를 내지 못했다.
지금 돌아보면 약간의 번아웃이었던 것 같다. 그 이후로 한 일주일 정도 코드를 꼴도 보기 싫어졌던 때가 있었다. 그 이후 주말에 쉬기로 결정하고 조금 나아졌다. 그냥 뇌를 비우고 쉬었다. 심지어 음악도 안 들었다.
번아웃이 무서운 게 나도 모르게 온다는 점 같다. 혼자서 개발하다 보니 나도 모르게 오버해서 하게 되고 자연스럽게 번아웃이 오게 되는 것 같다. 롱런해야지. 아직 갈 길이 멀다. 멀리 가려면 쉼도 중요하다.
마치며
두서없이 쭉 나열했는데 길게도 썼다. 기술적인 내용만 이 정도구나. 사실 여기에 쓰지 못한 내용도 많다. R&D나 프로젝트 관리, 커뮤니케이션, 문서 작성도 개발만큼 했다. 제일 무서운 것은 번아웃. 차라리 짧게 일하고 칼같이 퇴근하는 게 낫다. 근데 그게 마음처럼 되면 스타트업이 아니지. 그럼에도 관리해야 된다.
하반기 목표
어떻게 될지는 모르겠지만 간단하게 나열해 본다. 일단 회사 일이 제일 중요하다. 회사 일을 고도화하면서 배우는 것이 중요하다. 예를 들어 Claude Code
를 활용해서 나만의 작은 개발팀을 만든다거나. 이게 제일 궁금하다. 회사일 외적으로는 나만의 앱을 내고 싶다. 아직 포기하지 않았다. 요즘 다시 마음의 여유가 생겨서 책도 보고 React Native
강의도 듣고 있다.
하반기에 목표를 잘 이룰 수 있을까? 솔직히 모르겠다. 나의 의지치에 따라 달렸다. 물론 회사 일이 제일 중요하지만 억지로 시간을 낼 거다. 회사일만 하면 개인적인 성장이 멈추는 것 같다. 나는 새로운 도전을 안 하면 더 지친다. 정확히는 열심히 사는 의미를 잃어버린다. 그러니까 하반기도 멘탈 잡고 열심히 해보자고.