- 발행일
GA4 이벤트를 웹·Android·iOS 세 갈래로 보냈다 — 웹뷰 브리지
같은 웹 화면이 브라우저에서도 열리고 앱 안의 웹뷰에서도 열렸습니다. 브라우저면 gtag로 보내면 되는데, 웹뷰에서 gtag를 부르면 앱 이벤트와 갈라져 퍼널이 끊겼어요. 이벤트 함수 하나가 Android 인터페이스, iOS 메시지 핸들러, gtag 순서로 갈라 보내게 했고, 구매·환불처럼 서버가 확정하는 이벤트는 서버가 따로 보냈습니다.
같은 웹 화면이 브라우저에서도 열리고 앱 안의 웹뷰에서도 열렸습니다. 브라우저면 gtag로 보내면 되는데, 웹뷰에서 gtag를 부르면 앱 이벤트와 갈라져 퍼널이 끊겼어요. 이벤트 함수 하나가 Android 인터페이스, iOS 메시지 핸들러, gtag 순서로 갈라 보내게 했고, 구매·환불처럼 서버가 확정하는 이벤트는 서버가 따로 보냈습니다.
프로모션은 한국어에만 있는 것도, 세 언어에 다 있는 것도 있었습니다. 프로모션마다 지원 언어 목록을 두고, 지금 언어가 그 안에 없으면 404나 빈 화면이 아니라 "이 언어는 지원하지 않는다"는 모달을 띄우고 닫으면 뒤로 보냈어요. 그 판단과, 같은 화면의 딜 목록이 SWR 무한 스크롤을 어떻게 이어받았는지를 코드로 다시 읽었습니다.
숙박 큐레이션 플랫폼의 번역 리소스는 TypeScript 객체 한 파일 5,091줄이었고, 키의 상당수가 "가격 범위"처럼 한국어 원문이었습니다. 한국어 키는 한국어 리소스를 거의 안 써도 되게 해 주지만, 그 대가로 영어 리소스가 한국어의 2.7배가 됐고 일본어에는 빠진 키가 1,539개였어요. 경력기술서에 적은 "JSON 관리·동적 로딩"은 코드에 없었습니다.
숙박 큐레이션 플랫폼의 고객 웹은 한국어·영어·일본어를 지원했는데, 영어는 주소 경로에 언어 코드가 붙고 일본어는 별도 도메인이었습니다. 경력기술서에는 "URL 경로에 언어 코드를 채택했다"고 적었는데 코드를 다시 보니 절반만 맞는 말이었어요. 왜 일본어만 도메인으로 갈랐는지는 코드에 이유가 남아 있지 않고, 갈린 결과로 생긴 리다이렉트 세 개와 API 도메인 치환 함수만 남아 있습니다.
산업 AI 솔루션 기업에서 관세청 불법 복제품 판독 시스템과 공항 보안 검색 판독 시스템의 프런트엔드를 맡았던 기록입니다. 바닐라 JavaScript 기반 화면을 React SPA로 전환하고, 웹소켓 실시간 판독 화면과 데이터 시각화를 구현했습니다.