본문 바로가기

개발 노트30

[React Native] profile별 controller/model을 분리해서 공통 코드량을 줄이는 방법 React Native 통합 앱에서 profile이 늘어나면 화면보다 먼저 복잡해지는 부분이 데이터 처리입니다. 어떤 앱은 관광지 목록을 보여주고, 어떤 앱은 산행 코스를 보여주며, 또 다른 앱은 파일 기반 데이터를 보여줄 수 있습니다. 화면 구조는 비슷해 보여도 원본 데이터 필드와 상세 화면에서 필요한 값은 조금씩 다릅니다.이때 모든 화면에서 profile별 조건문을 직접 작성하면 공통 코드가 오히려 더 복잡해질 수 있습니다. 화면 컴포넌트가 각 profile의 원본 필드를 모두 알고 있으면 새 profile을 추가할 때마다 화면 코드가 커지고, 작은 수정도 다른 profile에 영향을 줄 가능성이 생깁니다.그래서 profile별 controller와 model normalizer를 분리해 원본 데이터.. 2026. 5. 21.
[React Native] route registry로 profile별 화면을 연결하는 방법 React Native 통합 앱에서 여러 profile을 관리하다 보면 화면 라우팅이 가장 빨리 복잡해집니다. 어떤 profile은 지도 화면으로 시작하고, 어떤 profile은 목록 화면이 중심이며, 또 다른 profile은 설정이나 안내 화면만 필요할 수 있습니다.이 차이를 화면 코드 곳곳의 조건문으로 처리하면 새 profile을 추가할 때마다 회귀 오류가 생기기 쉽습니다. 화면 컴포넌트 안에 profile별 조건이 계속 늘어나면 어떤 화면이 어떤 앱에서 열려야 하는지 추적하기 어려워집니다.route registry는 profile group별로 사용할 수 있는 화면과 시작 화면을 한곳에서 관리하는 방식입니다. 라우팅 정책을 registry로 모아두면 화면 코드는 자신에게 전달된 props와 데이터에.. 2026. 5. 21.
[UI Test] GitHub Actions UI 테스트 실패 로그를 읽고 원인을 좁히는 순서 GitHub Actions에서 UI 테스트가 실패하면 로그가 너무 길어서 어디부터 봐야 할지 막막할 수 있습니다. 특히 Android 프로젝트에서는 Gradle 빌드 실패, androidTest 컴파일 실패, 에뮬레이터 실행 실패, 실제 테스트 assertion 실패가 한 로그 안에 섞여 보일 수 있습니다.이럴 때는 로그를 처음부터 끝까지 모두 읽기보다 실패 유형을 먼저 나누는 편이 좋습니다. 테스트가 실제로 실행된 뒤 실패한 것인지, 아니면 테스트까지 가지 못하고 빌드나 환경 준비 단계에서 멈춘 것인지 구분해야 합니다.막상 CI 로그를 정리해보면 마지막 줄보다 첫 번째 의미 있는 에러가 더 중요한 경우가 많습니다. 이 글에서는 GitHub Actions에서 Android UI 테스트 실패 로그를 볼 때.. 2026. 5. 21.
[Android Release] 여러 개의 Android 앱을 Play Store에 관리할 때 필요한 release matrix Android 앱이 하나일 때는 배포 체크리스트가 비교적 단순합니다. 빌드가 정상적으로 되고, 서명 설정이 맞고, Play Store에 올릴 버전 정보만 확인하면 되는 경우가 많습니다.그런데 앱이 여러 개로 늘어나면 이야기가 조금 달라집니다. packageName, applicationId, Firebase 설정, keystore, 배포 track, release note, Data Safety 항목이 서로 뒤섞이기 쉽습니다. 이런 상태에서 급하게 배포하면 다른 앱의 설정 파일을 넣거나, 잘못된 track에 업로드하는 실수가 생길 수 있습니다.release matrix는 앱별 배포 정보를 한 표로 관리하는 방식입니다. 단순 문서처럼 보이지만, 여러 앱을 운영할 때는 배포 사고를 줄이는 기준표가 됩니다.운.. 2026. 5. 21.
[Android Intent] 외부 앱 실행 실패 시 Play Store로 보내는 fallback 설계 Android 앱에서 지도앱, 전화앱, 브라우저, Play Store 같은 외부 앱을 실행해야 하는 경우가 있습니다. 길찾기 버튼을 누르면 지도앱을 열고, 고객센터 번호를 누르면 전화앱을 열고, 외부 링크는 브라우저로 연결하는 식입니다.이때 해당 앱이 설치되어 있다는 가정을 하면 안 됩니다. 사용자의 기기에는 카카오맵이 없을 수도 있고, 특정 브라우저가 비활성화되어 있을 수도 있습니다. Play Store 앱이 없는 환경도 있을 수 있습니다.그래서 외부 Intent를 실행하기 전에는 처리 가능한 앱이 있는지 확인하고, 실패했을 때 어떤 fallback을 보여줄지 정해야 합니다. 외부 앱 연동은 버튼 하나처럼 보이지만, 실제로는 설치 여부, 스킴 검증, 사용자 안내까지 함께 설계해야 하는 기능입니다.이 글.. 2026. 5. 21.
[앱 운영] Remote Config를 앱 긴급 공지와 기능 차단 장치로 쓰는 방법 앱을 운영하다 보면 새 버전을 바로 배포하지 않고도 공지 문구를 바꾸거나 특정 기능을 잠시 숨겨야 하는 상황이 생길 수 있습니다. 예를 들어 외부 API 장애가 발생했을 때 해당 메뉴를 임시로 숨기거나, 점검 안내 화면을 앱 첫 화면에 보여줘야 할 수 있습니다.이때 Remote Config를 사용하면 서버 배포나 앱 심사 없이 앱의 일부 동작을 조정할 수 있습니다. 공지 노출 여부, 안내 문구, 기능 차단 목록처럼 자주 바뀌는 값을 원격에서 관리할 수 있기 때문입니다.다만 Remote Config를 단순히 원격에서 값을 바꾸는 기능으로만 보면 위험합니다. 기본값이 없거나, fetch 실패 시 fallback이 없거나, 기능 차단 문구가 애매하면 사용자는 앱이 고장났다고 느낄 수 있습니다.기능을 켜고 끄는.. 2026. 5. 21.