All Posts

All Posts

  • 발행일

    GA4 이벤트를 웹·Android·iOS 세 갈래로 보냈다 — 웹뷰 브리지

    같은 웹 화면이 브라우저에서도 열리고 앱 안의 웹뷰에서도 열렸습니다. 브라우저면 gtag로 보내면 되는데, 웹뷰에서 gtag를 부르면 앱 이벤트와 갈라져 퍼널이 끊겼어요. 이벤트 함수 하나가 Android 인터페이스, iOS 메시지 핸들러, gtag 순서로 갈라 보내게 했고, 구매·환불처럼 서버가 확정하는 이벤트는 서버가 따로 보냈습니다.

  • 발행일

    프로모션마다 지원 언어를 두고, 안 되는 언어면 뒤로 보냈다 — 404 대신 모달과 back

    프로모션은 한국어에만 있는 것도, 세 언어에 다 있는 것도 있었습니다. 프로모션마다 지원 언어 목록을 두고, 지금 언어가 그 안에 없으면 404나 빈 화면이 아니라 "이 언어는 지원하지 않는다"는 모달을 띄우고 닫으면 뒤로 보냈어요. 그 판단과, 같은 화면의 딜 목록이 SWR 무한 스크롤을 어떻게 이어받았는지를 코드로 다시 읽었습니다.

  • 발행일

    번역 키를 한국어 원문으로 썼다 — 5,091줄 리소스 파일의 대가

    숙박 큐레이션 플랫폼의 번역 리소스는 TypeScript 객체 한 파일 5,091줄이었고, 키의 상당수가 "가격 범위"처럼 한국어 원문이었습니다. 한국어 키는 한국어 리소스를 거의 안 써도 되게 해 주지만, 그 대가로 영어 리소스가 한국어의 2.7배가 됐고 일본어에는 빠진 키가 1,539개였어요. 경력기술서에 적은 "JSON 관리·동적 로딩"은 코드에 없었습니다.

  • 발행일

    일본어는 도메인, 영어는 경로 — 언어 축이 둘로 갈린 라우팅

    숙박 큐레이션 플랫폼의 고객 웹은 한국어·영어·일본어를 지원했는데, 영어는 주소 경로에 언어 코드가 붙고 일본어는 별도 도메인이었습니다. 경력기술서에는 "URL 경로에 언어 코드를 채택했다"고 적었는데 코드를 다시 보니 절반만 맞는 말이었어요. 왜 일본어만 도메인으로 갈랐는지는 코드에 이유가 남아 있지 않고, 갈린 결과로 생긴 리다이렉트 세 개와 API 도메인 치환 함수만 남아 있습니다.