260227 TIL

Eungae's avatar
Feb 27, 2026
260227 TIL

TIL - 2026-02-27

오늘 새롭게 알게 된 것

  • Flutter 웹페이지 다국어 라우팅 구조: public/ko/, public/en/, public/ja/ 디렉토리 분리 방식으로 정적 HTML 다국어를 구현하고, AppConstants의 정책 URL을 locale 파라미터를 받는 메서드로 변경하면 앱 내에서 사용자 언어에 맞는 정책 페이지를 자연스럽게 열 수 있다.

  • Firestore arrayContains 쿼리와 contentIds 배열 설계: 장소(Place)에 단일 contentId 대신 contentIds 배열을 두고, Cloud Function에서 중복 장소를 검사해 기존 장소에 contentId를 추가하는 방식으로 변경하면 1:N 관계를 깔끔하게 처리할 수 있다. Firestore의 arrayContains는 배열 필드 검색에 매우 효율적이다.

  • Flutter Slidable 패키지 활용: 기존 스와이프-삭제 제스처를 flutter_slidable 버튼 방식으로 교체하면 사용자가 실수로 삭제하는 것을 방지하면서도 직관적인 UX를 유지할 수 있다. "다시 묻지 않기" 토글과 함께 삭제 확인 다이얼로그 인프라를 구축했다.

  • 태그 유틸리티 방어적 필터링: 삭제된 태그가 UI에 계속 노출되는 버그는 태그 ID 불일치에서 비롯되었다. tag_utils.dart에 중앙 집중식 유틸 함수를 만들고 ID 통일 + 방어적 필터링을 적용하면 이런 유형의 버그를 근본적으로 차단할 수 있다.

오늘 해결한 문제나 고민

  • 설정/동의 화면 정책 링크 무반응 버그: ai_consent_screensettings_screen에서 정책 링크 클릭 시 아무 반응이 없던 문제를 수정했다. 하드코딩된 URL을 AppConstants 참조로 통일하고, locale 기반 동적 URL 생성으로 전환했다.

  • 탭 간 카테고리 필터 공유 문제: 홈 화면 탭 간에 카테고리 필터 상태가 공유되어 다른 탭의 콘텐츠 목록까지 필터링되는 오류를 수정했다. 각 탭이 독립적인 필터 상태를 가지도록 분리했다.

  • 폐기 문서 대량 정리: docs/ 8개 + docs_olds/ 11개, 총 19개 폐기 문서와 불필요한 이미지 22개를 삭제했다. 프로젝트 히스토리가 길어질수록 문서 부채가 쌓이는데, 주기적 정리가 중요하다는 것을 체감했다.

  • 콘텐츠 삭제 시 장소 참조 정합성: contentIds 배열 전환 후, 콘텐츠 삭제 시 해당 장소의 contentIds에서 해당 ID를 제거하고, 빈 배열이 되면 장소도 삭제할지 사용자에게 확인하는 다이얼로그를 추가했다.

  • 이용약관/개인정보처리방침 실제 코드 불일치: 기술명세에 구체적 API명이 남아 있거나 보유기간이 실제 코드와 다른 부분을 발견하여 일반화 및 정합성 수정을 진행했다.

내일의 핵심 목표

  • Phase 82 계획 수립 및 신규 피처 개발 착수

  • 다국어 웹페이지 실제 배포 후 각 언어별 정상 동작 검증

  • contentIds 배열 기반 마이그레이션 완료 여부 최종 확인 및 엣지 케이스 테스트

Share article

나새끼메이커