OkHttp Authenticator에서 runBlocking 없이 토큰 갱신하기
·
Android
안드로이드 개발에서 멀티플랫폼을 사용하지 않는 이상, 대부분의 네트워크 통신은 Retrofit을 기반으로 합니다. 저도 예외는 아닌데요ㅎㅎ 잘 아시다시피 Retrofit은 내부적으로 OkHttp 위에서 동작하고, 토큰 기반 인증 로직을 구현하려면 결국 OkHttp의 특성을 직접 다루게 됩니다.특히 리프레시 토큰을 이용한 토큰 재발급 과정은 단순히 “새 토큰 받아오기”가 아니라 여러 요청이 동시에 들어오는 상황에서의 동시성 문제까지 함께 고민해야 해서 생각보다 까다로운데요... 동시성은 어느 언어든 개발자를 괴롭히네요... 😅이 글은 제가 OkHttp + Retrofit + Coroutines 조합을 사용하면서, Authenticator 안에 runBlocking을 섞어 쓰던 구조를 어떻게 리팩토링했는지..
Credential Manager로 로그인이 안돼요. 이유는 몰라요
·
Android
안녕하세요👋🏻 오랜만에 트러블 슈팅을 가져왔어요ㅎㅎ프로덕션 환경에서 Google 로그인을 사용하던 중 특정 사용자 기기에서 로그인 버튼을 눌러도 아무 UI가 보이지 않는 문제가 제보됐어요. 앱은 멈추지 않았고 크래시도 발생하지 않았으며 에러 로그도 남지 않았어요. 사용자 입장에서는 “아무 반응 없음”으로 보이는 상황이었어요.이 문제는 QA 환경에서는 재현되지 않았고 개발자 기기에서도 동일한 문제가 나타나지 않았어요. 소수의 기기에서만 발생했고 100여명의 안드로이드 유저중에 제보를 받은건 단 2건이었어요🥲원인을 찾기 위해 Credential Manager의 내부 동작 방식을 여러모로 뜯어봤는데요!이 글은 그 과정을 정리한 기록이에요. 저와 같은 현상을 겪으셨다면 스트레스 받지 마시고 해결하시길..1..
[Android] 앱을 배포해 봅시다.
·
Android
열심히 Develop 에서 코드를 짜고 QA까지 통과했다면 릴리즈를 위해서 AAB 를 추출해야겠죠?앞으로 CI/CD로 자동화까지 고려하고 있지만, 기본적인 워크 플로우를 알고있어야 자동화에 문제가 생겨도 핸들링이 가능할테니 차근차근 따라옵시다.1. release/version branch1.1 브랜치 만들기먼저 릴리즈를 위한 커밋을 하기 위해서 develop에서 release/버전명 (예: release/1.0.0) 브랜치를 생성해줍시다.이렇게 만들었다면 브랜치를 이동해주세요!1.2 Baseline Profile 생성하기최신 코드에 맞춰서 Baseline Profile도 업데이트 해줘야 앱 성능에 도움이 됩니다.먼저 빌드 변형(Build Variant)을 release로 변경해줍니다. 그 후에 Andro..
[Android Compose] 골치덩어리 EdgeToEdge를 잘 써보자.
·
Android/Compose
시작은 불편함에서..Android 15부터 Edge-to-Edge가 기본으로 적용되면서, 이제 앱의 콘텐츠가 시스템 바 아래까지 확장되는 것이 표준이 되었어요. 덕분에 개발자들은 더 넓은 화면을 자유롭게 사용할 수 있게 되었습니다. 하지만 동시에 디자인에 맞춰 상태 바(Status Bar)의 색상을 화면과 자연스럽게 연결해야 하는 과제가 생겼어요😅저도 이 작업을 진행하면서 고민이 많았어요. 이전에는 systemuicontroller 같은 라이브러리를 사용하면 간단히 해결됐지만 Android 16(Tiramisu)부터 Deprecated 되었고, 더 근본적인 문제가 있었어요.LaunchedEffect나 DisposableEffect 안에서 시스템 바 색상을 변경하는 코드를 호출해야 했는데, 이 방식은 스..
[Android] Baseline Profile 적용기 feat. Fake 주입 실패
·
Android
안녕하세요, 오늘은 UX개선 방법중 하나인 Baseline Profile에 대해서 얘기해보려고합니다. 앱 성능 최적화는 언제나 중요한 과제인것 같아요. Lazy를 사용해서 렌더링 최적화를 하고 메모리 사용을 개선하는 등등 부드러운 UX를 제공하기 위해 저도 안드로이드 개발자로서 노력하고 있습니다.그중에서 특히 사용자가 가장 먼저 마주하는 앱 시작 속도는 전체적인 앱 경험에 큰 영향을 끼치죠. 당장 저도 로딩이 길면 화가납니다그래서 안드로이드 진영에서 성능을 최적화 할 방법중 Baseline Profile 을 도입했어요. 오늘은 Baseline Profile을 적용하면서 있었던 일을 공유해보려 합니다ㅎㅎBaseline Profile이 뭔데?Baseline Profile은 앱 설치 시 또는 백그라운드에서 자..
[Android Compose] AboutLibraries로 오픈소스 라이선스 화면을 만들기
·
Android/Compose
앱을 출시하기 전 꼭 포함해야 하는 화면 중 하나가 바로 '오픈소스 라이선스' 명시입니다. 일반적으로 가장 먼저 떠올리는 방법은 Google에서 제공하는 play-services-oss-licenses-plugin 사용하는 방식이겠죠. 저도 공식 지원인 플러그인을 적용했습니다.하지만 막상 구현하고 보니 화면이 제대로 표시되지 않았어요. 세팅하는 과정에서 뭔가 잘못했나? 싶어서 여러번 봤지만 특별하게 잘못된 부분은 없었습니다..// app/build.gradle.ktsplugins { id("com.google.android.gms.oss-licenses-plugin")}// ... dependencies// Activity 코드startActivity(Intent(this, OssLicensesMe..