디지털 가든

GitHub API 뜯어내기: 로컬 퍼스트 아키텍처 결정

2026-09-13 · 약 4분 · 아키텍처 · 로컬 퍼스트 · 결정 회고

사고 현장

개인 포털 v1에는 아주 “긱스러운” 설계가 있었습니다. 빌드 시점에 GitHub API에 요청해 사용자의 저장소와 스타 수를 페이지에 자동 동기화하는 것. 데이터는 항상 신선하고 수동 관리는 제로.

그러던 어느 날 api.github.com/users/min09577가 404를 반환하기 시작했습니다 — 계정이 플랫폼 리스크 관리에 걸린 것입니다. 빌드는 계속 돌았고, 데이터 소스는 사라졌고, 페이지의 작품 목록은 축소된 샘플 데이터로 떨어졌습니다.

회고: 이 설계에 숨어 있던 세 가지 가정

  1. 계정은 영원히 접근 가능하리라는 가정 — 오답. 리스크 관리, 오판, 지역 문제. 그 어느 하나만으로도 404는 하늘에서 뚝 떨어집니다.
  2. 빌드 머신의 네트워크는 믿을 만하리라는 가정 — 취약함. 빌드 산출물이 네트워크 요청 한 번의 성패에 의존하다니, 엔지니어링으로서 용납할 수 없습니다.
  3. 데이터량이 실시간성에 걸맞으리라는 가정 — 오답. 작품 목록은 몇 달에 한 번 바뀝니다. 그걸 위해 런타임 의존을 들이는 건 위험과 수익이 전혀 맞지 않는 거래죠.

결정: 데이터 로컬화

데이터 소스를 뜯어냈습니다. 저장소와 통계는 전부 config.ts로 로컬 관리하고, 빌드 시점의 외부 요청은 제로가 되었습니다. 즉시 얻은 세 가지 이득:

단, 재접속 플러그는 남겨라

로컬화는 자동화의 영구 포기를 뜻하지 않습니다. 원래의 getGitHubData() 시그니처는 그대로 보존되어 있습니다. 나중에 계정이 복구되면 fetch 로직을 다시 꽂기만 하면 되고, 상위 컴포넌트는 한 줄도 바꿀 필요가 없습니다.

이번 회고의 가장 중요한 교훈입니다: 의존성을 뜯어낼 때는 인터페이스를 제자리에 남겨라. 데이터 소스는 바꿀 수 있어도 계약은 바꾸지 마라.

하나의 판단 기준

앞으로 “빌드 시점에 외부 서비스 요청”이라는 아이디어가 떠오르면, 먼저 이 체에 걸러봅니다:

이 데이터의 변화 빈도가, 끌어들이는 장애 위험에 걸맞는가?

월 단위로 변하는 콘텐츠에는 — 걸맞지 않습니다. 얌전하게 코드베이스에 들어가서, 역사는 git이 관리하게 하세요.

댓글

← 디지털 가든