마디 보드 개발 여정

마디 보드 개발 여정

마디 개발 7개월 간의 기록

2022년 9월 21일 기획부터 2023년 4월 6일 출시까지의 기록을 남깁니다.

계기

전 직장 동료 결혼식에서 만난 전 직장 동료와 짝짜꿍이 맞아 마이크로컨트롤러 개발 보드를 만들기로 했다. 개발 보드 자체만으로는 사업성이 있을 것 같지 않았지만, 계획하고 있던 IoT 향 클라우드 서비스와 연동해 부가가치를 만들 수 있을 것 같았다. 무엇보다 나만의 조그만 보드가 갖고 싶었다. 나의 개발 프레임워크를, 나의 세계를 구축하고 싶었다.

대개발시대의 마이크로컨트롤러 개발환경을 제조사와 특정 플랫폼으로부터 독립시키고, 각종 케이블과 디버거를 주렁주렁 달고 다녀야 하는 개발 보드의 연결성을 개선하고자 했다.

처음 짐작으로는 개발도 금방하고 비용도 얼마 들지 않을 것 같았다. 넉넉잡아 1월이면 출시할 수 있을 것 같았다. 우리는 실무 경험이 풍부한 경력자니까. 여느 애송이가 그렇듯 사업타당성 따위는 깊이 생각하지 않았다. 투자비용 낮은 손쉬운 일이라 생각했고 해보고 싶었던 일이니, 부담없이 시작했다.

기획, 프로젝트의 시작

매주 일요일 정기 미팅을 갖기로 하고, 7개월간 24회의 정기미팅과 2회의 비정기 미팅을 했다. 미팅은 평균 1시간 정도 걸렸다.

하드웨어 스타트업은 일반적인 SaaS 기반의 소프트웨어 개발과는 다른 과정을 거친다. 하드웨어 설계와 제조뿐만 아니라 자재관리와 같은 비가시적 비용이 발생한다. 더불어 실제 애플리케이션을 구현하기 전에 개발 인프라 구축에 많은 시간을 소비하게 된다. 여기에는 개발 툴과 프로세스, 그리고 기술 스택을 포함한다. 마이크로컨트롤러 기반 펌웨어 개발은 리눅스 디바이스 드라이버를 작성하거나 고급언어에서 프레임워크를 사용해 개발하는 것처럼 잘 짜인 틀 위에서 코드를 작성하는 것이 아니기 때문이다.

해결할 문제를 정의한 뒤 모듈화된 개발 보드와 애플리케이션에 집중할 수 있는 펌웨어 프레임워크를 제공하는 것으로 방향을 잡았다.

컴파일러의 현대화된 옵션을 활용해 define 전처리를 모아둔 헤더로 구성된 설정 파일 조작 필요성을 제거할 계획이었다. KConfig 설정 데이터베이스나 디바이스 트리와 같은 장치 디스크립터 사용도 피할 생각이었다. 그러기 위해서는 장치의 사용 여부가 컴파일 타임에 결정되어야 했다. 진입 장벽이 있는 링커 스크립트 조작 필요성도 제거하기로 했다. 사용자 편의성 면에서도 링커 스크립트는 몇 가지 유용한 트릭을 제공할 수 있었지만, 호환성을 헤치기 때문에 다른 방식으로 우회하기로 했다. “사용자는 애플리케이션 개발에만 집중한다” 가 첫 번째 기치였다.

MCU 제조사에 따라 달라지는 툴(IDE 포함)도 통일할 계획이었다. ARM 코어는 이미 멀티 플랫폼 개발환경을 쉽게 구축할 수 있었고, 윈도우즈를 사용하지 않던 나에게 WSL 소식은 이 프로젝트에 희망을, 국내 사용자 유입을 보장해주는 것 같았다(타겟보드와 연결하는 과정이 번거로워 결국 WSL 대신 MSYS 플랫폼을 선택했다).

대부분 해결 방안을 손에 쥐고 시작했지만, 몇몇 문제는 방법을 찾아야 했다. 예컨대, 프로젝트를 빌드할 때 타겟 보드를 선택할 방안이 없었다. Visual Studio Code 의 확장 프로그램을 개발하는 방법이 있었지만, 여력이 없었고 잘할 자신도 없었다(뒤에 CMake Preset 기능을 사용하는 방법으로 우회했다). 자체 개발한 디버거를 연결한 경우 타겟보드의 USB 기능을 사용할 수 없는 문제도 있었다(존의 아이디어로 USB 허브를 추가해 해결했다).

함께 한 사람들

John Hye K

‘존’은 회로와 아트웍을, ‘헤’는 감사勘査와 채찍을, ‘나’는 프레임워크 개발과 나머지 자질구레한 일을 맡았다.

누구나 그럴싸한 계획은 있다

국내 인구의 90% 이상이 사용한다는 카카오 서비스가 SK C&C 판교 데이터센터 화재로 다운되는 등의 사건사고가 많았던 10월은 바쁘게 지나갔다. 나는 프레임워크 골격을 잡고, 존은 보드 아트웍 작업을 했다.

AWS IoT Core 를 사용해 테스트 서버를 세팅하고, 웹앱을 준비했다. 웹앱은 몇몇 외주업체를 컨택해봤는데, 비용도 비용이지만 ELF와 DWARF 쪽은 결국 직접 구현해야 할 것 같아 더 진행하지 못했다.

사이즈 이슈가 있어서 프로토타입 폼팩터와 SoC를 변경했고, 11월 2주 차에 계획되어 있던 보드 샘플이 연기됐다. 가볍게 검토해야 할 일, 사소하게 결정해야 할 일이 산발적으로 발생했고 이 가볍고 사소한 일들의 심오함에 사로잡혀 나는 정작 중요하다 생각하는 일에 집중하지 못했다. 아무것도 아닌 듯 했지만 모든 역할을 해야 했고, 별것 아닌 듯 했지만 알고자 하면 그 방대함에 기가 죽었다. 그 사이 코엑스에서 가든파이브로, 가든파이브에서 가락동으로 사무실을 이전했다.

좋아하는 일이었지만, 닭장 같은 공간에서 유난히 생명력을 발하는 대출납입 문자 알림에서 벗어나고 싶었다. 일정 관리가 필요했다. 업무량을 소화가능한 수준으로 줄이기 위해 병행하던 다른 프로젝트를 중지하고 마디 보드 개발에만 집중하기로 했다.

첫 샘플

3종 보드 중 1종의 첫 샘플이 나왔다. 존은 한우로, 헤와 나는 치킨으로, 국방부에서는 고체추진로켓 발사로 주요 마일스톤 달성을 축하했다.

보드 이름을 ‘마디’ 로 정하고 쇼핑몰을 제작했다. 사업자도 등록하고 재고 관리 프로그램도 구축했다. 비용을 최소화하기 위해 무료 툴과 무료 플랜을 적극 활용했다. $0.5이면 월 주문 1,000개까지는 커버할 수 있겠다는 계산이 나왔다.

PG사에 내야 할 가입비와 수수료 때문에 잠깐 고민했다. VAN에 바로 연결하면 어떨까? 뭘 몰라 삽질하다 결국 PG사에 가입하게 된다하더라도 공부해두면 나중에 쓸모가 있지 않을까라는 생각이 들었다. 해외 판매도 고려하고 있었으니 국내 PG사에 내는 돈이 영 탐탁잖았다. 하지만 나는 게을렀고, 귀찮지 않을 만큼 영리하지 않으니 생각에서 멈췄다.

안테나 성능이 안나와서 존은 파이형 CLC 필터를 조정했다.

첫 샘플의 기쁨과는 별개로, 출시일을 2월 15일로 연기했다.

디버거용 MCU를 선정하기 위해 국내 유통사로부터 MCU 샘플을 받았다. 그 과정이 다소 번거로워서 다음부터는 해외 대형 사이트에서 낱개로 구매하는 방식을 취했다.

2차 샘플

2월 3일 2차 샘플이 도착했다. 계획했던 3종 보드 샘플이 모두 나왔지만, 걱정이 많았다. 스펙이나 사용자 가이드와 같은 문서 작업도 필요했고, 포장/배송도 준비되어 있지 않았다. 새로운 태스크를 현재 컨텍스트에서 실행할 방법을 찾아야 했다(링커스크립트를 건드리지 않고 main 이전에 스케줄러를 시작하자니 닭이 먼저냐 알이 먼저냐 하는 문제가 생겼다). 디버거 개발은 이미 연기한 상태였다.

보드 브링업 과정에서 아무런 문제가 없어야 출시 일정에 겨우겨우 맞출 수 있을 것 같았다. 하지만, 샘플 불량률이 19%로 SMT 업체 변경은 불가피했다. 양산 테스트 프로그램을 작성하면서 ADC 전압분배회로 저항치 문제도 발견됐다.

지금까지 결과를 토대로 다시 일정을 추산해보니 4월 초에나 출시가 가능할 거라는 계산이 나왔다. 신상에 변화가 있기도 했던 터라 심적으로 후달리기 시작했다. 확 체감되는 물가와 환율, 그리고 가라앉는 경기에 더 쫓기는 기분이 들었다. 위축됐고, 자신감이 사라졌다. 불안했다. 헤는 흔들리는 나를 감지하고 사실과 환상을 분리할 수 있도록 대화를 이끌었다. 이 기간에 이룬 작은 성취는 사실이었고, 이 프로젝트의 가치와 성패는 하나의 가능성이자 환상이었다. 성공한 사람들의 얘기는 언제나 결과론적이다. 내가 잘할 수 있는 일을 열심히 하는 게 최선이었다.

출시일에 맞춰 계획했던 영덕 여행을 헤와 함께 2박3일로 다녀왔다. 여담으로 영덕에서 만난 어떤 슈퍼 아주머니의 말에 의하면 영덕대게가 맛있는 이유는 영덕대게가 곱게? 자랐기 때문이라고 한다.

3차 샘플

업체를 변경하고 처음 받은 샘플이자 3차 샘플이기도 한 보드의 불량률은 4.2%였다. 많이 낮아졌지만, 여전히 만족하기 어려운 수치였다. 불량률 1%를 목표로 잡은 한편, 불량률도 비용에 포함해야 한다는 걸 깨달았다.

대부분의 불량은 BGA 타입의 충전IC 솔더링이었다.

문서로는 설명에 한계가 있었고 스샷 찍는 데 드는 품으로 영상을 제작해보자는 생각에 유튜브 채널을 개설하고 개발환경 구축 영상을 찍었다. 첫 영상은 촬영부터 편집까지 시간이 오래 걸렸다. 계속 할 수 있을까 물음표가 가득했지만, 두번째 영상부터는 다소 수월해졌다.

인수받은 하드웨어 자료를 GPL 라이센스로 공개하고, USB PID를 신청했다.

외부 디버거 연결을 위한 어댑터 보드는 USB 커넥터 불량이 많아 생산을 포기했다. 디버거 MCU를 선정했고, 마디 보드용 Flexypin 보드 샘플을 받았다.

FTA 협정관세 품목인지, 세율이 얼마인지 확인하기 위해 HS Code 를 관세청에 문의했다.

예제 프로그램을 개발하면서 CppUTest undef 빌드 오류와 CoreMQTT keepalive 버그를 패치했다. LVGL는 라이브러리의 CMake 파일을 직접 건드리지 않고는 이식하기가 어려워서 개선이 필요해보였지만, 작업할 동력은 없었다.

예제를 개발하면서 주요 모듈 인터페이스 설계를 다시 했다. 포트 레이어 인터페이스를 런타임에 넘기는 방식 대신 컴파일 타임에 링크되는 방식으로 변경했다.

출시

4월 3일 판매용 보드가 도착했고, 4월 6일 출시 준비가 끝났다. 해외 판매는 5월로 계획하고 있고, 국내는 몇몇 커뮤니티에 차례로 소개할 예정이다.

그리고

자재수급까지의 기간, 관리해야하는 부품의 수, 발주에서 배송까지의 기간, 환율정도까지만 해도 신경쓸 거리가 많았다. 포장과 발송, 주문관리, 배송관리까지 생각하면 혼자할 일은 아니다 싶다. 대량 생산이 아니다보니 지금 가격으로는 이윤이 남지 않는다. 인건비는 포함하지도 않았다.

마디 개발 보드 단독으로는 한계가 있는 것 같고, 여러 예제를 지속적으로 제공하는 한편, 초기에 계획했던 IoT 향 플랫폼과 연동이 필요하다.

좋았던 점

  • 오픈소스 기여
  • 전체 사이클 경험

아쉬웠던 점

  • 늘어진 일정
  • 의사소통
  • 일감 관리
  • 부품 및 업체 선정
  • 비지니스 모델

그래서

  • 사업이라는 말이 거창해서 피해왔는데, 그럴게 아니라 그 크기만큼 숙고하고 면밀히 살펴 전략적으로 움직일 필요가 있겠다
  • 각자의 역할을 명확히 하고 서로 그 경계를 인식해야 한다. 모호한 의사와 막연한 기대는 일은 물론 관계를 망칠 수 있겠다
  • “매체가 내용을 규정한다”고 우리가 사용하는 수단에 대한 이해가 얼마간은 필요해 보였고, 그 이해를 바탕으로 상호 응답성을 유지하면서 상대방의 요구를 해소할 수 있어야겠다
  • 일은 역할로 시작해 책임으로 끝난다
  • 일감 및 일정관리는 시야와 역량을 나타내는 척도가 아닌가 싶었다

마지막으로 실속없이 말만 바빴던 나를 반성하며 인용 하나:

비효율적인 리더는 실질적인 일의 진척보다 일이 진행되고 있음을 인식하는 것에 집중하는 경향이 있다. 하지만 움직인다고 무조건 일이 진척되는 것은 아니며 바쁘다는 건 대체로 결과에 대한 빈약한 변명이다.

효과적인 조직의 목표는 시작한 작업의 비율이나 활동 수준이 아니라 완료한 작업의 비율, 처리량을 최대화하는 것이어야 한다. 리더는 처리량을 극대화하기 위해 여유가 필요하다는 점을 인정해야 한다[DeMarco, 2002] - 애자일 조직은 이렇게 일합니다, 스티브 매코널 247 쪽

타임라인

  • 9월 21일: 마디 보드 기획 시작
    • 9월 24일 전직장 동료 결혼식에서 방향성을 얘기하고, 기획 문서를 공유
  • 9월 26일: 프로토타입 첫 작업 시작. 매주 일요일 19시 정기 미팅 시작
  • 10월 27일: 존 계약서 초안 작성
  • 11월 1일: 기술 블로그 구축
  • 11월 3일: 개발자 문서 사이트 구축
  • 11월 4일: 슬랙 워크스페이스 생성
  • 11월 6일: 마디 보드 폼팩터 확정
  • 11월 13일: 보드 MCU 확정
  • 11월 14일: 코엑스에서 가든파이브로 사무실 이전
  • 11월 17일: 가든파이브에서 문정동으로 사무실 이전
    • 보드 샘플 일정 연기(11월 2주차에 ESP32, nRF52 보드 나올 예정이었음)
  • 11월 20일: 충전회로 확정
  • 11월 21일: 홈페이지 구축
  • 11월 29일: 디버거에 USB 허브 추가 아이디어
  • 12월 2일: 사업자 등록
  • 12월 9일: 재고 관리 프로그램 구축
  • 12월 28일: 보드 1차 샘플
    • ESP32 only
  • 1월 8일: 안테나 필터 교체
  • 1월 16일: WIX로 쇼핑몰 제작
  • 1월 24일: 마디 보드 이름 결정
  • 1월 31일: 외부 디버거 어댑터 보드 샘플
  • 2월 3일: 보드 2차 샘플
    • 3종 보드, 불량률 19%
  • 2월 5일: PCB & SMT 업체 변경
  • 2월 5일: ADC 전압분배회로 저항 변경
  • 2월 6일: 출시 일정 연기(2월 15일 -> 4월 5일)
  • 2월 14일: 유튜브 채널 개설
  • 2월 19일: 존 계약서 변경
  • 2월 22일: 곱게 자란 영덕 대게, 돌아오는 길 열차 연기 자욱
  • 2월 28일: WIX 에서 Hugo로 전환
    • 클라우드플래어 워커와 KV 활용
  • 3월 6일: 보드 3차 샘플
    • 불량율 4.2%
  • 3월 7일: PG사 계약
  • 3월 7일: 포장재 구매
    • 종이 테이프와 종이 박스, 정전기 봉투
  • 3월 8일: 배송방법
    • 일반 우편을 사용하고 싶은데 분실의 경우 대비가 안돼고 배송 조회가 안됨
  • 3월 8일: 통신 판매업 신고
  • 3월 9일: 디버거 MCU 확정
  • 3월 20일: Flexypin 보드와 커넥터 샘플
  • 3월 24일: 하드웨어 개발 자료 공개 GPL
  • 4월 3일: 보드 1차 양산
    • 불량율 5.6%
  • 4월 5일: 명함 주문
  • 4월 6일: 출시와 함께 첫 판매 달성
    • 클라우드 플래어로 사이트 이전