번역 한 줄 바꾸는 데 개발자를 거쳐야 했다 — 다국어 관리를 시트로 옮긴 이야기
4개 언어 서비스에서 번역이 바뀔 때마다 개발자가 JSON을 수기로 고치던 병목을, i18n SaaS 대신 '운영팀이 이미 쓰는 구글 시트'를 소스로 삼아 없앤 과정. 진짜 어려운 건 번역이 아니라 렌더링 변수였다.
4개 언어 서비스에서 번역이 바뀔 때마다 개발자가 JSON을 수기로 고치던 병목을, i18n SaaS 대신 '운영팀이 이미 쓰는 구글 시트'를 소스로 삼아 없앤 과정. 진짜 어려운 건 번역이 아니라 렌더링 변수였다.
하이브리드 앱의 웹뷰와 네이티브 앱이 로그인 토큰·멤버십 정보를 서로 다르게 들고 있었다. React Native 표준 브릿지를 쓸 수 없는 순수 네이티브 앱 환경에서, iOS·Android 각각 다른 웹뷰 API로 양방향 동기화를 구현한 과정.
액세스 토큰이 만료되는 순간 화면이 동시에 부른 API들이 전부 401을 받고, 각자 토큰 리프레시를 호출하면서 중복 갱신·무효화 충돌로 로그아웃이 튀었다. '리프레시는 한 번만, 나머지는 기다렸다 재시도'하는 인터셉터 큐로 무중단 인증을 만든 과정.
운영자 권한이 5단계로 나뉜 어드민에서, 컴포넌트마다 권한 분기를 심는 방식은 화면이 늘어날수록 누락 위험이 커졌다. 권한 판정을 화면이 아니라 라우팅 단위로 옮겨 진입 시점에 한 번만 확인하도록 재정의한 과정.