안녕하세요 주코입니다.저는 8월 초 "Pool" 이라는 사이드 프로젝트 팀의 Android 개발 파트로 합류하게 되었습니다.오늘 포스팅에선 팀에 합류 하면서 멀티 모듈을 도입하게 된 계기와 약간의 팁(?) 그리고 저의 이야기들을 적어 보려 합니다. 우선 멀티 모듈을 도입하기전, 제가 이해하고 있는 멀티 모듈의 개념과 장단점을 말씀드리고자 합니다.멀티모듈 (Multi-Module)모듈(Module) 이란?특정 기능을 수행하는 독립적인 단위로, 복잡한 시스템을 작은 부분으로 분할하여 관리하고 재사용하기 위한 개념이다. 멀티모듈(Multi-Module) 이란?하나의 프로젝트를 여러 개의 독립적인 모듈로 나누어 관리하는 프로젝트 구조를 말한다. 멀티모듈의 장점1. 협업 시 충돌 가능성이 낮다.단일 모듈에서는 ..
안녕하세요. 주코입니다.최근, 개인 프로젝트에서 더 많은 사용자를 위해 minSDK를 26에서 24로 다운그레이드하면서, AAPT: error: elements require a sdk version of at least 26. 즉, AAPT 에러를 마주하게 되면서 해결법과 그 이유를 설명하려고 합니다.아마, 해당 에러를 마주하신 분들께서 해결법을 찾기위해 여러 레퍼런스를 둘러보면 확실한 해결법이 아닌, 그저 "minSDK버전을 26으로 올려라" 라는 글들을 많이 마주쳤을 거라 예상합니다. 저희 방법으로 해당 문제를 원활하게 해결하셨으면 좋겠습니다 :D 에러 원인해당 에러의 원인은 간단합니다.AAPT(Android Asset Packaging Tool)는 AndroidStudio 및 Android Gr..
안녕하세요 주코입니다.최근, 예전부터 HashMap을 잘 다루고 싶었지만, 흉내는 낼 뿐 잘 사용하지 못했었습니다. 그러다 최근, 시간 복잡도 문제들을 만나며 중요도를 알게 되었고, 정확하게 그리고 딥하게 학습하고 기록하고자 이렇게 글을 쓰게 되었습니다. 해시맵 (HashMap) 이란?해시(hash) 기법을 사용해 맵(map)으로 데이터를 저장하기 위한 자료구조입니다.즉, 키(key)와 값(value)의 쌍으로 데이터를 저장하는 해시 기반 컬렉션입니다.평균 시간 복잡도는 O(1)을 가지고 있으며, 최악의 경우 O(log n)의 시간복잡도를 갖습니다.그렇다면 해시는 무엇이고 맵은 무엇일까?해시 (Hash) 란?해시(hash)는 입력 데이터를 고정된 길이의 고유한 값(해시값)으로 변환하는 과정을 의미합니다...
안녕하세요 주코입니다.최근 팀 프로젝트에서 Google OAuth를 개발하던중 RefreshToken을 갱신할때 Hilt의 dependency cycle (순환참조) 에러가 발생하였습니다. 머리를 골골 싸메다가 꽤 괘찮은 해결법을 찾게되어 이렇게 글을 올리게 되었습니다. 원인Hilt을 통해 Network Module를 설정하고 RefreshToken을 갱신하기위해 Authenticator에서 API와 통신하고있는 DataSource를 주입하고 있었습니다.이때, dependency cycle이 발생하였습니다. ( 원인, 예시코드 )@Module@InstallIn(SingletonComponent::class)object NetworkModule { private val logging = HttpLog..
안녕하세요 주코입니다. 오늘은 개인 앱 개발도중 Room의 AutoMigrations을 설정하다가 오류가 발생하였는데, 치명적이라고 생각하여 해당 에러에 대한 생각과 해결방법을 알려드리기 위해 이렇게 글을 쓰게 되었습니다. 에러 발생 원인저는 Ksp를 사용하고 있습니다. 정확히 어느 시점에 해당 에러가 발생한 지 정확한 원인은 찾기 어려웠습니다. 다만 추측은 가능했습니다.@Database( version = 1, entities = [WorkPlaceEntity::class], exportSchema = false,// autoMigrations = [AutoMigration(from = 1, to = 2)])@TypeConverters(WorkPlaceConverters::clas..
오랜만에 인사드립니다. 주코입니다!요즘은 Naver에서 개최한 Dan24 행사를 참여한 후 여러 가지 인사이트를 얻고 계속해서 MultiModule과 Compose를 중심으로 학습하고 있었습니다!최근 Firebase로 이메일과 비밀번호로 로그인을 구현하고 있었습니다.저는 FirebaseAuth에 대한 모든 에러핸들링에 대해 사용자에게 SnackBar로 로그인 실패에 대한 이유를 보여주고 싶었습니다.일부로 Firebase Authentication에 없는 계정으로 로그인을 시도해도, 비밀번호를 틀려도 계속 ERROR_INVALID_CREDENTIAL라고 에러가 뜨는 것이었습니다. 에러 발생 화면테스트용 이메일과 비밀번호는 test@naver.com / 12341234 이였습니다. 이렇게 설정을 하고 일부로..
최근 스파르타코딩 부트캠프가 끝나고 cs공부와 알고리즘, 그리고 FastCampus 강의를 들으면서 학습을 이어 가고 있었는데요. FastCampus의 강의 중 part1 - chaper9를 수강하다가 Android 버전에 따른 문제가 발생하였습니다.이 강의는 Android 12를 타깃하고 있어 Media Player와 Notification의 설정을 Android 버전에 따라 추가 작업을 해줘야 하는 것이 있어, 혹시나 해당 강의를 듣고 있는 분들께 도움을 드리고자 글을 쓰게 되었습니다! 해당 강의를 들으면서 코드를 따라 쳐본다면 java.lang.SecurityException: Permission Denial: startForeground from pid=12550, uid=10191 require..
안녕하세요. 주코입니다. 최근, 팀프로젝트중 비정상적인 firebase 읽기 수가 포착되어 원인을 파악하다가 Endless Scroll에 문제가 있음을 캐치했고 어떻게 해결 하고 개선 하였는지 포스팅 하려고 합니다.---Firestore 무료 요금제저희는 프로젝트 상황 상 Firestore의 무료 요금제를 사용하였습니다.위와 같이 무료 요금제는 일일 읽기가 5만회로 제한적이였습니다. 문제 상황저희 프로젝트는 반려견 산책 트래킹 앱으로 산책 기록을 사용자가 확인할 수 있도록 설계 하였습니다.때문에, 만약 사용자가 산택을 500번, 1000번 등 산책을 많이 하게 되면 모든 산책 기록을 view에 띄워 주기 때문에 한번에 많은 데이터를 보여줄 시 앱 성능 저하가 발생 할 수 있었습니다. 저희는 이를 개선 하..