Published

- 17 min read

코드의 중심에서 제품을 외치다

img of 코드의 중심에서 제품을 외치다

코드의 중심에서 제품을 외치다

  1. 나는 우리 회사의 비지니스 가치를 웹 UI로써 풀어내는 사람이다, 세상의 문제를 우리 Video Management System으로 해결한다.
  2. 나는 RTSP 비디오 스트림을 HLS, LL-HLS, DASH, WebRTC, WebSocket으로 변환하여 웹에서 비디오를 재생할 수 있게 하는 서버를 개발했다.
  3. 나는 웹에서 디코딩할 수 없는 코덱을 디코딩하는 웹 어셈블리 디코더를 개발했다.
  4. 나는 웹에서 yuv 바이너리를 wgsl언어로 작성한 쉐이더 기반으로 GPU에서 렌더링하는 자사 플레이어를 개발했다.
  5. 나는 코드에 정도가 있다면 그 끝에는 진리가 있을것이라 믿었었다.

가치관의 변화

바로 위의 5번항목과 관련이 있다. 말로 표현하기는 살짝 힘들다. 그러나 분명히 나는 죽었고 다시 태어났다.
아래 항목들로 인해 내 가치관이 하루아침에 변한것은 아니다. 그러나 영향을 끼친 일련의 과정들 중 손에 꼽는 사건들이다.

  1. 유튜브에서 시청했던 일련의 영상들: “단순한 개발자”, “샘올트만의 1인 유니콘기업” .etc
  2. 최근 등장했던 Vibe Coding 기조와 Kiro, Speckit을 통한 SDD로 프로그래밍한 경험
  3. 내 후임이 입사하고 우리회사에서 프론트 개발자로써 성장할 수 있는 한계치를 판단한 후 그것을 만족하자마자 연내에 바로 이직을 한 사례
  4. 회사 제품의 UI를 개선한 경험
  5. 삼군김치찌개에서 삼겹살과 김치찌개 그리고 소주를 마시며 친구와 나누었던 소프트웨어, 제품, 그리고 영업과 인생의 관계에 대한 일련의 대화

엄청 많은 이야기를 생략했지만 요약하자면,

  1. 나는 제품을 위한 소프트웨어를 만들고 있지 않았다. 나는 소프트웨어를 위한 소프트웨어를 만들고 있었다.
  2. 소프트웨어와 개발자는 단순해야 한다.
  3. 나는 연구원이다. 다른 말로는, SI WebAPP 개발자들을 고객으로 하는 영업맨이다.

인생은 영업이다

그렇다면 해당 관점으로 보아 인생에서 중요한 것은 무엇인가?

  1. 내 타겟 고객층이 누구인가를 분명히 아는 것.
  2. 그 타겟이 무엇을 필요로 하는가를 아는 것.

iNEX Design System 라이브러리를 개발하는 나의 타겟과 그 타겟이 원하는 것이 무엇인가?

  1. 내 웹 라이브러리를 이용하는, 사내의 다른 SI WebAPP 개발자들이다.
  2. 그 타겟 고객은 무엇을 필요로 하는가? 사용방법에 대한 친절한 문서 or Turorials.

회사에서는 이미 개발자들에게 Cursor IDE와 Codex를 팀계정으로 제공해주고 있다. 그렇다면 Cursor IDE와 Codex가 대신 내 라이브러리를 사용자에게 대신 설명하고 예제 코드를 생성해줄 수 있도록 만들면 된다. 그래서 @ids/mcp 를 만들고 배포했다.

mcp-example

결과는 만족스러웠다. 배포를 하자마자 Cloud 웹서비스 제품을 만드는 부서에서 관심을 보였고 사내 발표를 해달라는 요청이 들어왔다. 올해 내 목표 중 2개 정도를 손안대고 코풀 수 있는 기회가 되었다. 올해 목표는 아래부분에서 다루겠다.

개발자는 단순해야 한다

한마디로 요약하자면 필요할 때 배워라. 내 아이디어를 구현할 수 있는 최소한의 MVP만 개발해라. 그리고 새로운 기술 혹은 새로운 트랜드 필요없다. 내가 가장 익숙한걸로 사용해라. 그리고 필요할때 하나하나 붙여가는거고 그 과정에서 변화에 유연한 코드를 자연스럽게 생각하게 된다. 이런 이야기. 식상할 수 있으나 난 몸으로 배웠다.

uxlint라는 프로그램은 AI를 통해 UX리뷰 보고서 자동 작성해주는 프로그램이고 처음 개발할때는 UI가 없었다. 그냥 CLI 툴이었고 AI SDK 이런것도 안쓰고 그냥 Web API 직접 호출해서 쓰게 만들었다. 오직 Anthropic Provider만 지원했다.

그러다 필요에 의해 Anthropic 말고 OpenAPI 호환 프로바이더 등 다양한 프로바이더 지원을 추가해줬고 그 때문에 Anthropic에 맞춘 하드코딩을 버리고 AI Provider를 추상화하는 과정을 했다. 그러면서 자연스럽게 Vercel의 AI SDK를 사용하면 추상화와 테스트가 쉬워지는 구나 & 그래서 이 라이브러리를 사용하는 것이구나를 배웠다. 나는 왜 Vercel AI SDK를 사용하는지에 대한 명확한 이유를 보유하고 있다.

그러다가 CI 환경에서 실행하는 사례를 파악했고 사용자는 각 배포마다 report 기록과 개선과정을 보유해야 해야 해서 UXLint 클라우드 서비스를 만들었고 그 과정에서 Supabase를 배웠다. 또한, 내 코드를 관리하기 위해 HomeLab에 Gitea 서버, Drone CI 서버, Kube 클러스터를 구축했다.

그러다보니 로그인 과정 & Github의 정보를 가져오는 것이 최대 난관이었고 자연스럽게 OAuth 2.0과 PKCE 과정을 공부하고 구현했다.

모든 일에는 순서가 있고 그 순서를 따르면 기억에도 남고 왜 이 기술이 필요한지를 자연스럽게 이해하게 된다.

2025년 세웠던 목표

작년에 세웠던 목표는 다음과 같다. 아래에서 설명하겠지만 ROI나 OKRs를 모르는 상태에서 만든 목표라 문제가 있다. 그러나, 당시에 작성된 기록이 이것밖에 없다.

  1. 오픈소스 기여량 늘리기
  2. 서비스 배포하기
  3. 자산전체 수익률 5% 이상 달성하기

결과 & 목표의 문제점

  1. 기여량은 분명 늘었다. 지금 기억하기로 작년에 10개 이상 풀리퀘스트를 올렸고 보통 RTSP 클라이언트 라이브러리나 VSCode Extension의 로직 수정이었다. 그 중 받아들여진 건 5개가 안되었던걸로 기억하는데 그 이유는 유명한 라이브러리가 아니고 Maintainer가 활발하게 수정중인 레포지터리가 아니었기 때문이었다.
  2. 회사에서는 GIS 기반의 Live 영상 시청 서비스, ClipArchive 서비스, 녹화기 관리 대시보드 서비스를 배포했고 개인적으로는 uxlint, openapi-converter, bruno2openapi를 만들었다.
    1. 그 과정에서 Jenkins CI/CD 파이프라인을 만들게 되었다. 우리 파트의 웹개발은 내가 모든 것을 만든다. 코어 라이브러리부터 SI WebAPP까지 내가 혼자 하기 때문에 내 무소불위의 권력에 태클을 걸어줄, 피도 눈물도 없는 시스템이 필요했다. 일단 단위 테스트 & 시각 회귀 테스트 & 자동 배포 정도 하고 있다.
    2. 개인 프로젝트 진행하며 Home Lab을 구성하게 되었다.
      • NVR, Onvif compatible
      • IP Camera
      • Headscale VPN control server
      • DNS server
      • Drone CI server
      • Gitea Server
      • K3S Control Plane Server and Agent Servers for my toy projects
  3. 비교군이 없어서(자산을 기록하며 관리하기 시작한지가 2025년 중순이라서) 정확한 수치는 모르겠는데 5%로는 차고 넘치게 달성했다, 그리고 왜 그 당시에 5%를 기준으로 잡았는지가 이해가 가지 않아서 딱히 의미는 없는 것 같다.

정량적으로 계산할 수 있는 기준이 없고 이 목표에 대한 결과와 목적이 작성되어 있지 않다는 점이 문제이다. 또, 행동으로 옮기는 분명한 act가 명시되어 있지 않다. 해당 문제를 수정하여 올해 목표를 세웠다.

바이브 코딩, 개인적으로 느낀 것들

특이할 만한 사항들이 있다. 내 동년배들이 요즘 다 하는 Vibe Coding 기조. 내가 이걸 보면서 가장 먼저 생각난 것은 내 사업. 난 언젠가 내 이름달고 사업을 할 계획인데 SDD는 정말 매력적인 방법론이었다. 실제로 SDD 방법론을 이용한 spec-kit 라이브러리로 AWS 클라우드에 몇 개의 서비스를 배포해보기도 했다. 그러면서

AI에게 모든 것을 다 맡기기에는 아직까지 모델의 성능이 좋지 않아서 무리이나 한가지 분명한 것은 생산성이 눈에 띄게 좋아졌다는 것이다. 특히, Context7과 Serena MCP 사용하며 크게 도움을 받았다.

내가 시니어라는 것은 아니다, 그러나 적어도 주니어 개발자를 바닥부터 가르쳐본 입장으로써는 검증안된 주니어보다 차라리 이런 툴(기술지원 or 현장대응 업무 쪽 RAG 구축, Code Rabbit 같은 AI기반 코드리뷰 등) 활용에 대한 회사의 지원이 많아졌으면 한다.

반대로 우려의 생각도 있다. 바로,

생각의 외주

AGENT 사용은 도파민이 넘친다. 즉각적으로 반응이 온다. 처음에는 완벽한 아키텍처를 내가 설계한 후 AGENT에게 설명한 후 AGENT가 만든 코드를 라인 바이 라인으로 읽으며 검토하지만, 도파민에 푹 절여지다보면 코드를 생성하는 모습을 그저 입벌리고 지켜보고만 있을 때도 있다.

이전부터 내 동료에게, 그리고 나 자신에게 항상 말하지만 내 필살기는 기본기와 도메인 지식에 있다. 기본기는 그동안 WebAPP 개발하며 경험적으로 깨우친 변경에 유연한 컴포넌트 구조에 대한 노하우, 고객이 원하는 UI/UX를 깨우치는 능력, 객체지향과 추상화, 소프트 스킬들 등에 있고 도메인 지식은 역시 비디오 재생.

내 필살기를 AI에게 외주로 맡기면 안된다.

그리고 여담인데, 코딩하거나 자료찾을때 음악듣지 말자. 퇴근하고 내 개인프로젝트할때 음악들으면서 했었는데 집중과 관련된 책읽다보니까 알게 된건데 그거 되게 대표적인 distraction였음.

생각의 외주를 막기 위해 무엇을?

내가 개발자가 되고 나서는, 책을 통한 학습을 일절 끊어냈었다. 오로지 영어 원문으로 된 공식문서 & Github의 원본 소스만 읽었고 한국어로 된 기술서적들을 의도적으로 꺼려했다.

올해는 생각이 바뀌었다. AI 대소동으로 인한 생각의 외주, 휴먼 논리의 아성이 무너지는 지금 이 순간, 내 생각에 인간의 이성을 대표할 논리의 아성은 독서라고 생각한다. 내가 아직까지 정말 부끄럽게도 개발자딱지를 달고 있으면서도 영어 읽는 속도가 많이 느리다. 그래서 올해까지만 한국어로 된 책을 포함하여 독서를 하기로 했다.

2026년의 목표

North Star Objective

외부와 내부에서 모두 인지되는 프론트엔드 기술 리더로 성장한다.


Objective 1. 외부 개발자 커뮤니티에서 기술적 존재감을 확보한다

  • KR1. GitHub 팔로워 30명 이상 달성
  • KR2. gyeongho.dev를 WebGPU/WebGL2 기반으로 바꾸고 및 GitHub star 10개 이상 획득
  • KR3. WebAssembly 기반 웹 게임 1개 배포 및 10명 이상의 사용자에게 피드백 받기
  • KR4. 외부 오픈소스 프로젝트에 머지된 PR 5개 이상

Initiatives (참고)

  • WebGPU 개인 웹사이트 설계 및 구현
  • WGSL 튜토리얼 사이트 학습
  • WASM 관련으로 미리 구매해뒀던 서적 및 레퍼런스 학습
  • lossless-cut 프로젝트 이슈 최소 3건 해결

Objective 2. 회사 내부에서 프론트엔드 UI/UX 기술 리더로 인식된다

  • KR1. Refine Clip Archive user experience to remarkable Quality
  • KR2. Redesign iNEX Design System Library for visual excellence
    • KR1: WCAG 2.2 권고사항 만족시키기
    • KR2: ARIA 권고사항 만족시키기
  • KR3. iNEX Design System Library를 다른 팀에서 사용하게 만들기
    • KR1: CI/CD 파이프라인 완벽하게 다듬기
    • KR2: 나 이외의 다른 개발자로부터 Storybook 보여주고 피드백 받기
  • KR4. 후배 웹개발자들을 위한 문서 작성하기
    • KR1: 비디오/이미지 이해에 도움되는 자료들을 찾고 한국어로 번역하기
    • KR2: iNEX Design System 개발할 후배들을 위해 문서 작성하기

Initiatives (참고)

Censored


Objective 3. Censored

KR1. Censored KR2. Censored

Initiatives (참고)

Censored