[MOBILE-010][실무] 배터리·메모리·데이터 사용 줄이기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[MOBILE-010][실무] 배터리·메모리·데이터 사용 줄이기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 105회 작성일 26-09-05 05:34

본문

[이번 수업]
모바일 앱의 배터리, 메모리, 네트워크 사용량을 같은 시나리오로 측정하고 성능 예산을 넘는 항목부터 개선하는 방법을 배웁니다.

[선수지식]
앱 생명주기, 백그라운드 작업, API 통신과 캐시를 알아야 합니다. 성능 예산은 한 화면이나 작업이 허용할 자원 사용량의 상한입니다.

[학습목표]
- 재현 가능한 측정 시나리오와 기준값을 만듭니다.
- 배터리·메모리·네트워크 병목을 구분합니다.
- 변경 전후 수치를 비교해 회귀를 막습니다.

[핵심개념]
먼저 실제 기기, 운영과 같은 릴리스 빌드, 같은 데이터와 동작 순서를 사용합니다. 앱 첫 실행과 다시 실행, Wi-Fi와 느린 이동통신, 화면 켜짐과 백그라운드를 나눠 측정합니다. 기기 온도, 배터리 상태와 운영체제 버전도 기록합니다. 한 번의 수치보다 여러 번의 중앙값과 큰 변동을 봅니다. 기준 시나리오는 `실행 → 목록 3회 이동 → 상세 열기 → 백그라운드 5분`처럼 누구나 반복할 수 있어야 합니다.

배터리는 CPU 계산뿐 아니라 화면, 위치, 센서, 네트워크와 잦은 깨우기에도 소모됩니다. 즉시 필요하지 않은 작업은 운영체제의 작업 예약 기능에 맡기고 조건이 비슷한 요청을 묶습니다. 고정된 짧은 타이머로 계속 확인하기보다 이벤트와 적절한 갱신 간격을 사용합니다. 플랫폼이 백그라운드 작업을 미루거나 중단할 수 있으므로 마지막 진행 상태를 저장합니다.

메모리는 현재 사용량뿐 아니라 화면을 반복했을 때 계속 증가하는지 봅니다. 화면이 사라진 뒤에도 객체가 참조되면 메모리 누수가 생길 수 있습니다. 큰 이미지는 표시 크기에 맞게 불러오고 캐시는 상한과 제거 규칙을 둡니다. 운영체제가 메모리 부족으로 앱을 종료해도 저장된 상태에서 복구되도록 설계합니다.

네트워크는 전송량과 요청 횟수, 응답 지연을 함께 측정합니다. 필요한 필드만 받고 압축·캐시·페이지 나누기를 적용합니다. 같은 데이터를 화면마다 다시 받지 말고, 실패 재시도는 지수적으로 간격을 늘리고 상한을 둡니다. 오프라인에서는 이전 데이터를 명확히 표시하며 사용자 작업은 중복 전송되지 않게 요청 ID를 사용합니다.

[따라하기]
가상 측정값이 성능 예산을 지키는지 로컬에서 검사합니다. budget.py로 저장하세요.

```python
budgets = {"battery_pct": 2.0, "peak_memory_mb": 180, "network_mb": 8.0}
runs = {
    "before": {"battery_pct": 2.8, "peak_memory_mb": 220, "network_mb": 12.5},
    "after": {"battery_pct": 1.7, "peak_memory_mb": 165, "network_mb": 6.2},
}
for name, metrics in runs.items():
    failed = [key for key, value in metrics.items() if value > budgets[key]]
    state = "PASS" if not failed else "FAIL:" + ",".join(failed)
    print(f"{name} {state}")
```

macOS/Linux는 `python3 budget.py`, Windows PowerShell은 `py budget.py`로 실행합니다. 예상 결과입니다.

```text
before FAIL:battery_pct,peak_memory_mb,network_mb
after PASS
```

개선 전은 세 예산을 모두 넘고 개선 후는 통과합니다. 실제 수치는 플랫폼의 프로파일러와 기기 측정에서 가져오고 단위·시나리오·반복 횟수를 함께 보관합니다. Android는 성능·메모리 도구와 배터리 진단을, iOS는 Instruments와 배터리 지표를 사용할 수 있습니다.

[흔한 실수]
디버그 빌드나 에뮬레이터 수치만 믿거나 서로 다른 기기·데이터를 비교하기 쉽습니다. 평균만 보고 순간 최대 메모리를 놓치지 않습니다. 한 자원을 줄이려다 CPU나 네트워크가 늘지 않았는지도 확인합니다.

[보안 주의]
측정 로그에 토큰, 위치, 개인정보와 전체 응답 본문을 남기지 않습니다. 시험 계정과 가짜 데이터를 사용하고 프로파일 파일 접근을 제한합니다. 인증서 검증을 끄지 않으며 네트워크·배터리 시험은 본인 소유의 로컬·격리 환경에서만 수행합니다.

[직접 해볼 과제]
after의 network_mb를 9.0으로 바꾸고 실패 항목을 확인하세요. 이어서 목록 화면의 요청 횟수와 전송량 예산을 한 줄씩 정하고 측정 시나리오를 작성하세요.

[확인문제]
1. 성능 측정에서 같은 시나리오와 기기를 사용해야 하는 이유는 무엇인가요?
2. 화면을 반복할수록 메모리가 계속 늘면 무엇을 의심해야 하나요?
3. 네트워크 재시도 간격과 횟수에 상한이 필요한 이유는 무엇인가요?

[다음 학습]
IOT-010에서는 엣지 컴퓨팅과 로컬 추론을 다룹니다. MOBILE-011에서는 앱 서명·스토어 심사·배포를 배웁니다.

[공식 참고 자료]
- 백그라운드 작업과 배터리: https://developer.android.com/develop/background-work/background-tasks/optimize-battery
- 메모리 관리 개요: https://developer.android.com/topic/performance/memory-overview
- 네트워크 접근 최적화: https://developer.android.com/develop/connectivity/network-ops/network-access-optimization
- 배터리 사용 분석: https://developer.apple.com/documentation/xcode/analyzing-your-app-s-battery-use

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
1,911
어제
5,103
최대
16,772
전체
772,965
Copyright © 소유하신 도메인. All rights reserved.