들어가며..
기존에 개발 중이던 Android Application 과제에 참여하게 되면서 작성된 내용을 이해해야 하는 상황이 되었다. 일반적으로는 빌드를 해보고, 실행을 해보는 "모의 설치" [1]와 비슷한 절차를 해보았다. 개발 환경을 구축하고 소스를 받아서 빌드를 해보, 소스 코드를 살펴 보았다. 예전에 알고 있던 Android Application과 구조도 많이 달라져 정리해 본다. 특히, LLM과 분석에 대해서 이야기 해볼 때, 여러가지 힌트를 얻어서 기존 Android Application Project를 이해하는데 도움이 될 것으로 보여 정리해 본다.
분석 절차
1. 런타임 동작 분석
- 로그 분석: Logcat을 활용하여 주요 이벤트와 동작 흐름을 분석.
- 트레이스 프로파일링: Android Profiler를 사용하여 CPU, 메모리, 네트워크 사용 패턴을 확인.
- StrictMode 활성화: 백그라운드에서 발생하는 블로킹 작업이나 리소스 누수를 감지.
2. 의존성 및 모듈 구조 분석
- Gradle의 dependencies 확인 (./gradlew dependencies 실행).
- Android Studio의 Project Structure를 이용하여 모듈 간의 의존성 파악.
- Dagger/Hilt, Koin 등의 의존성 주입(Dependency Injection) 구조가 있다면 플로우 확인.
3. UI 및 네비게이션 흐름 분석
- Navigation Component를 사용하고 있다면 nav_graph.xml 분석.
- Espresso 또는 UI Automator를 이용하여 주요 UI 플로우 자동화 테스트 실행.
- FragmentTransaction, ViewModel, LiveData의 동작 방식 확인.
4. 네트워크 통신 분석
- OkHttp 로그 인터셉터 추가하여 API 호출 확인.
- Charles, Postman, Wireshark를 사용해 실제 API 요청과 응답을 캡처.
- Retrofit, Volley, Ktor 등의 네트워크 라이브러리 사용 여부 확인.
5. 데이터 저장 방식 분석
- Room, SharedPreferences, DataStore, Realm 등의 사용 여부 확인.
- adb shell 명령어를 통해 DB 상태 확인 (adb shell sqlite3 /data/data/your.package.name/databases/your_db_name.db).
6. 멀티스레딩 및 백그라운드 작업 확인
- WorkManager, JobScheduler, RxJava, Kotlin Coroutines 사용 여부 분석.
- 주요 백그라운드 태스크 실행 여부와 성능 영향 파악.
7. 앱 보안 및 권한 점검
- AndroidManifest.xml에서 불필요한 권한이 있는지 확인.
- 앱의 내부 데이터 보호 방식 (EncrytedSharedPreferences, SQLCipher 등) 점검.
- ProGuard 또는 R8 난독화 설정 확인.
8. 빌드 및 배포 프로세스 확인
- CI/CD 파이프라인 (GitHub Actions, Jenkins, Bitrise) 연동 여부 분석.
- Fastlane 또는 Gradle Task를 활용한 빌드 자동화 방식 점검.
정리
위 항목들을 실행하면서 애플리케이션의 구조적 특징과 문제점을 파악할 수 있을 것이다. 특히, 1차적으로 1, 2번은 쉽게 진행하였고 3번을 통해서 전체 프로젝트의 파일들과 역할들을 이해하게 되면서 전체적인 구조의 그림이 보이기 시작했다. 항후 진행 하면서 관련된 배경 지식등을 학습하게 된 내용도 추가 정리해 보자.
참고 문헌
[1] 객체 지향 리엔지니어링 패턴: 3장 첫 번째 접근, https://technical-leader.tistory.com/139
'Android Programming' 카테고리의 다른 글
ViewModel에서 Factory 사용 여부 비교 (0) | 2025.03.25 |
---|---|
Modern Anroid Application의 UI 구조 이해 (0) | 2025.03.18 |
Waydroid 설정하기 (0) | 2022.04.15 |