Performance Test는 작업 부하 아래에서 모바일 애플리케이션의 속도, 응답성 및 안정성을 측정하는 과정입니다. 로직의 정확성을 검사하는 기능 테스트와 달리, 성능 테스트는 애플리케이션이 실제 환경에서 얼마나 빠르고 부드럽게 작동하는지 평가합니다. Google Research(2024)에 따르면, 53%의 사용자가 실행 시간이 3초 이상 걸리면 애플리케이션을 떠납니다. 성능 테스트는 릴리스 전에 병목 현상을 파악하고 수령된 품질 기준을 충족하도록 보장합니다.
주요 요점
Performance Test는 애플리케이션이 얼마나 빠르고 효율적으로 작업을 수행하는지 결정하는 비기능 테스트의 일종입니다. 단위 테스트나 UI 테스트와 달리, Performance Test는 정량적 특성(응답 시간, CPU 부하, RAM 소비, 배터리 사용)을 측정합니다. Sauce Labs 보고서(2025)에 따르면, 68%의 모바일 개발 팀이 정규 테스트 사이클에 Performance Test를 포함시키고, 41%가 CI에서 이를 자동화합니다.
Performance Test의 주요 목적은 애플리케이션이 문서에 명시된 성능 요구사항을 충족하는지 확인하는 것입니다. 화면 실행 시간이 500밀리초를 초과하거나 애플리케이션이 평균 기기에서 200MB 이상의 RAM을 소비하면, 이는 최적화가 필요하다는 신호입니다. 기준선 성능은 첫 안정 릴리스에서 설정되고, 주요 업데이트마다 검토됩니다.
Performance Test는 시뮬레이터가 아닌 실제 기기에서 수행됩니다. 에밀레이션은 CPU, GPU 및 네트워크 자원 사용에 대한 정확한 그림을 제공하지 못하기 때문입니다. Apple WWDC(2024)에 따르면, 시뮬레이터에서의 테스트는 실제 기기와 비교할 때 15–30% 높은 결과를 보여줍니다. 실제 기기만이 성능 데이터의 유일한 신뢰할 수 있는 출처로 남아있습니다.
Performance Test 수행 빈도는 개발 사이클에 따라 달라집니다. Google Android Performance 권고사항(2024)에 따르면, 기준 성능 측정은 모든 pull request에서 수해야 하고, 완전 스위트는 각 릴리스 전에 수해야 합니다. 이러한 측정의 자동화를 통해 초기 단계에서 성능 홀수 감지가 가능합니다.
모바일 개발에서는 Performance Test 시나리오의 90%를 다루는 5가지 주요 메트릭스가 있습니다. 실행 시간(cold start 및 warm start)은 각 릴리스에서 처음으로 확인하는 메트릭스입니다. Google Play Console(2024)은 임계값에 따라 실행 시간을 기록합니다: cold start는 5초 미만, warm start는 1.5초 미만이어야 합니다. 이러한 임계값을 초과하면 앱스토어 평가에 직접적인 영향을 미칩니다.
Cold start는 아이콘을 탭하는 순간부터 애플리케이션의 첫 프레임이 나타날 때까지 측정됩니다. iOS는 지연 초기화를 위해 `dispatch_async`를 사용하여 시각적인 실행 시간을 줄임니다. Android cold start는 프로세스 생성, Application 초기화 및 Activity 실행을 포함합니다. Google Performance(2024)에 따르면, cold start가 100밀리초 지연될 때마다 이커머스 애플리케이션에서 Conversion Rate이 1.2% 감소합니다.
FPS(Frames Per Second)는 애니메이션 및 리스트 스크롤 중의 프레임 레이트입니다. 부드러운 인터페이스는 안정적인 60 FPS가 필요합니다. Android Studio Profiler와 Xcode GPU Report는 무거운 작업(이미지 로딩, JSON 파싱, 복잡한 레이아웃 렌더링) 중 FPS 감소를 보여줍니다. 30 FPS 이하로 감소하면 사용자가 떨리는 것으로 인식하고, Adjust(2025)에 따르면 Retention Rate가 22% 감소합니다.
RAM 소비는 세 번째로 중요한 메트릭스입니다. 메모리 누수는 장기 세션에서 성능 저하의 주요 원인입니다. Instruments Allocations와 Android Memory Profiler는 Swift의 순환 참조와 Android에서 해방되지 않은 Activity를 감지하는 데 도움이 됩니다. 배터리 소비는 테스트 중간에 간과하기 쉬운 메트릭스입니다. Apple Developer(2024)에 따르면, 에너지 소비가 높은 애플리케이션은 iOS에서 백그라운드에서 제한됩니다. Xcode의 Energy Log는 세션마다 애플리케이션의 와티지 프로파일을 기록합니다.
| 메트릭스 | 임계값 | 도구 |
|---|---|---|
| Cold start | < 5초 | Xcode Organizer, Google Vitals |
| FPS | ≥ 55 안정 | Xcode GPU Report, Android Profiler |
| RAM | < 200 MB | Instruments, Memory Profiler |
| APK/IPA | < 150 MB | Xcode Build, Gradle APK Analyzer |
부하 테스트(Load Test)는 예상되는 동시 사용자 수 아래에서의 애플리케이션 동작을 검증합니다. 모바일 백엔드의 경우, 이는 1000–10000개의 동시 API 요청을 시뮬레이트하는 것을 의미합니다. 서버 측은 기준값에서 20% 이상 응답 시간이 증가하지 않고 극대 부하를 처리할 수 있어야 합니다. k6 벤치마크(2024)에 따르면, 일반적인 Load Test 구성에는 5분에 0에서 1000 VUs(가상 사용자)까지의 램프가 포함됩니다.
스트레스 테스트(Stress Test)는 애플리케이션의 브레이크 포인트—시스템이 요청에 응답하지 못하거나 격수할 수 없이 성능이 저하되는 순간—을 파악합니다. Load Test와 달리, Stress Test는 시스템을 일반적인 한계 이상으로 부하를 가합니다. 브레이크 포인트는 응답 시간이 10초 초과, 5XX 오류율이 5% 초과, 또는 RAM 소비가 사용 가능한 메모리의 90%에 도달하는 것 중 하나를 기준으로 기록됩니다.
불류 테스트(Volume Test)는 대량의 데이터를 다뢰 때의 애플리케이션 동작을 평가합니다. 모바일 맥락에서는 로컬 데이터베이스의 수천 개 레코드, 수십 기가바이트의 캐시, 또는 수백만 개의 push 알림으로 테스트하는 것이 포함됩니다. Android의 SQLite와 iOS의 Core Data는 100,000개 이상의 레코드에서 다른 성능을 보여줍니다.
Xcode Instruments는 iOS 애플리케이션을 프로파일링하는 주요 도구입니다. Time Profiler는 가장 많은 CPU를 소비하는 메소드를 보여주고, Allocations는 메모리 할당 및 해제를 추적합니다. Instruments는 긴 세션(최대 30분)에서의 레코딩과 빌드 간 비교를 위한 트레이스 내보냄을 지원합니다. Instruments 내의 Activity Monitor는 실시간으로 시스템 전체 부하를 보여줍니다.
Android Studio Profiler는 Android에 타고 들어있는 프로파일러입니다. CPU, 메모리, 네트워크 및 에너지 프로파일러를 하나의 인터페이스에 통합합니다. Android Profiler의 특징은 대화형 세션 지원입니다: 개발자가 애플리케이션에서 작업을 수행하면 메트릭스가 그리고 반응하는 것을 확인할 수 있습니다. Google I/O(2024)에 따르면, Profiler는 .perf 포멧으로의 레코딩을 지원하며, CI에서 기준선과 비교할 수 있습니다.
Charles Proxy와 Proxyman은 네트워크 트래픽을 분석하는 도구입니다. 각 HTTP 요청의 시간, 응답 크기 및 헤더를 보여줍니다. Performance Test에서는 500밀리초 이상 걸리는 요청—캐싱 또는 최적화 후보—을 캡처하는 것이 중요합니다. Charles는 3G, Edge 및 LTE와 같은 느린 네트워크를 시뮬레이트하는 스로틀 모드를 지원합니다. Proxyman은 고유의 Swift 아키텍처를 가진 macOS용 가밌한 대체이며입니다.
import XCTest
class PerformanceTests: XCTestCase {
func testLaunchPerformance() {
measure(metrics: [XCTClockMetric(),
XCTMemoryMetric()]) {
XCUIApplication().launch()
}
}
func testScrollPerformance() {
let app = XCUIApplication()
app.launch()
let tableView = app.tables["list"]
measure {
tableView.swipeUp()
tableView.swipeDown()
}
}
}
Performance Test를 CI/CD에 통합하는 것은 2025–2026년의 업계 표준입니다. 성능 파이프라인은 세 단계를 포함합니다: pre-commit(Pull Request에서 빠른 측정), nightly(완전 테스트 스위트), 그리고 pre-release(즐수 기기에서 기준선과 비교). Bitrise와 GitHub Actions은 Xcode Instruments CLI와 Gradle Profiler 실행을 지원합니다.
GitHub Actions(2024)은 `xcodebuild test-without-building`을 사용하는 iOS Performance Test용 공식 템플릿을 발표했습니다. 이 템플릿은 GitHub 기기 중 하나에서 테스트를 실행하고 보고서를 아티팩트로 게재합니다. 기준선은 리포지토리의 JSON 파일에 저장됩니다. 임계값이 10% 초과되면 파이프라인이 오류로 실패합니다. 이 접근 방식은 각 빌드를 수동으로 확인할 필요 없이 성능 저하를 막아줍니다.
CI에서의 모바일 Performance Test 문제점은 다른 기기에서 결과가 안정적이지 못하다는 점입니다. Apple Silicon(M1–M4)과 Intel Xeon은 서로 다른 실행 시간을 보여줍니다. 해결 책은 절대값 대신 기준선에 대한 백분율 비율을 사용하는 것입니다. 테스트가 기준선보다 15% 더 오래 걸리면, 해당 빌드는 검토가 필요하다고 표시됩니다.
iOS의 XCTest Performance는 `measure(metrics:)` 메서드를 사용하여 코드 블록을 10번 실행하고 통계값(평균, 중앙값, 표준 편차)을 반환합니다. 데이터베이스 성능 테스트의 경우, XCTest는 피크 RAM 소비를 캡처하는 XCTMemoryMetric을 편리하게 사용합니다. 임계값은 테스트 완료 후 `XCTPerformanceReport`를 통해 설정됩니다.
Android Macrobenchmark는 Google의 라이브러리로 애플리케이션 레벨에서 성능을 측정합니다. Macrobenchmark는 사용자 시나리오(Activity 시작, RecyclerView 스크롤, WebView 열기)를 실행하고 실행 시간을 측정합니다. Baseline Profile은 Android 컴파일러가 사전에 최적화하는 클래스와 메서드의 집합입니다. Google Play는 Baseline Profile을 사용하여 첫 실행을 30% 가속합니다.
@RunWith(AndroidJUnit4::class)
class StartupBenchmark {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startup() {
benchmarkRule.measureRepeated(
packageName = "com.example.app",
metrics = listOf(StartupTimingMetric()),
iterations = 5
) {
pressHome()
startActivityAndWait()
}
}
}
두 접근 방식 — XCTest Performance와 Android Macrobenchmark — 모두 같은 개념을 사용합니다. 그것은 평균을 내는 반복 측정과 임계값에 대한 비교입니다. 성능은 하나의 숫자로 축소할 수 없습니다. 각 릴리스에는 최근 5개 빌드의 메트릭스 추세가 포함된 성능 보고서가 따라야 합니다. 이러한 보고서를 통해 팀은 사용자가 발견하기 전에 성능 저하를 파악할 수 있습니다.
자주 묻는 질문
Performance Test는 Load Test, Stress Test, Volume Test 등의 다양한 유형을 포함하는 넓은 범주입니다. Load Test는 예상 부하 아래에서의 시스템 동작을 검증하는 Performance Test의 특수 사례입니다. 모든 Load Test는 Performance Test이지만, 그 역은 성립하지 않습니다.
기저 측정(cold start, FPS, RAM) — 모든 pull request에서. 완전 Performance Test 스위트 — 각 릴리스 전에. 야간 실행 — 일일 빌드를 하는 프로젝트의 경우. Google은 Macrobenchmark를 하루 적어도 한 번 실행하도록 권장합니다.
세 가지 메트릭스가 중요합니다: cold start 시간(5초 이내), 스크롤 중 FPS(최소 55 FPS), 그리고 피크 RAM 소비(200MB 이하)입니다. Google Play Console과 App Store Connect는 이 메트릭스를 자동으로 추적합니다.
네, Performance Test는 Xcode CLI(`xcodebuild test`) 및 Gradle(`gradle connectedCheck`)를 통해 완전히 자동화됩니다. k6와 Gatling 같은 도구는 백엔드의 부하 테스트를 자동화합니다. CI/CD 통합을 통해 인간 개입 없이 Performance Test를 실행할 수 있습니다.
Baseline은 새 빌드의 결과를 비교하는 참조 성능 측정치입니다. Baseline은 첫 안정 릴리스에서 설정되고 JSON 또는 XML로 저장됩니다. 새 빌드가 baseline을 10% 초과하면 CI 파이프라인이 홀수를 알립니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.