모바일 분석에서 세션이란 사용자가 앱과 지속적으로 상호작용하는 시간 기간으로, 시간적으로 제한됩니다. 이 메트릭스는 리텐션, 엔게이지먼트 및 LTV 계산의 기초가 됩니다. Adjust, 2025에 따르면, 앱에서 중앙값 세션 길이는 4–7분이지만, 카테고리에 따라 큰 편차가 있습니다. 세션 메트릭스를 이해하는 것은 사용자 경험 품질을 평가하는 데 중요합니다.
주요 포인트
세션은 사용자가 앱과 적극적으로 상호작용하는 시간 기간입니다. 세션은 앱을 열았을 때(또는 백그라운드에서 돌아왔을 때) 시작되고, 활동이 없는 기간 후에나 닫아서 종료됩니다.
다양한 분석 플랫폼은 세션 경계를 다른 방식으로 정의합니다. Firebase Analytics는 30분의 비활동 후에 세션이 완료되었다고 간주하고, AppsFlyer는 60분 후에, Amplitude는 5분 후에 또는 session_end 이벤트에 세션을 완료합니다. 통일된 기준은 없습니다.
세션 기반 메트릭스는 리텐션율 (Retention Rate), 엔게이지먼트 깊이 (Stickiness Ratio) 그리고 사용 빈도 (Session Frequency) 별 사용자 분포를 계산하는 기초입니다. 옵바른 세션 정의 없이는 모든 파생 메트릭스가 부정확합니다.
Mixpanel (2024)에 따르면, Session Duration을 15% 개선한 앱은 분기 내에 LTV가 22% 증가했습니다. 이는 앱 내 시간과 수익 창출 간의 직접적인 상관 관계입니다.
세션 측정은 앱 라이프사이클 이벤트를 기반으로 합니다: 열기 (session_start) 및 닫기 (session_end)입니다. 그 사이에 모든 사용자 작업이 기록됩니다.
// Android용 기본 세션 추적기
class SessionTracker {
private var sessionStart: Long = 0L
private val SESSION_TIMEOUT = 30 * 60 * 1000L
fun onAppOpened() {
sessionStart = System.currentTimeMillis()
Analytics.logEvent("session_start")
}
fun onAppClosed() {
val duration = System.currentTimeMillis() - sessionStart
Analytics.logEvent("session_end") {
param("duration_ms", duration)
}
}
fun isNewSession(lastActive: Long): Boolean {
return (System.currentTimeMillis() - lastActive) > SESSION_TIMEOUT
}
}
코드는 시스템 콜백을 통해 세션의 시작과 종료를 추적합니다. SESSION_TIMEOUT 파라미터(30분)는 백그라운드에서 돌아오는 것이 새 세션인지 이전 세션의 계속인지를 결정합니다.
| 플랫폼 | 세션 타임아웃 | 결정 방법 |
|---|---|---|
| Firebase Analytics | 30분 | 자동, 커스터마이징 불가 |
| Amplitude | 5분 (기본) | SDK를 통해 설정 가능 |
| AppsFlyer | 60분 | 고정 간격 |
| Mixpanel | 30분 | minimumSessionDuration 옵션을 통해 설정 가능 |
| Adjust | 60분 | 자동, 라이프사이클과 연계 |
타임아웃의 선택은 메트릭스에 영향을 미칩니다: 빴른 타임아웃(5분)은 더 많은 세션을 만들고, 긴 것(60분)은 상호작용을 합침니다. 중요한 것은 규칙을 설정하고 기간을 비교할 때 그것을 바꾸지 않는 것입니다.
세션 분석은 네 가지 기본 메트릭스에 의존합니다. 각각은 사용자 행동의 특정 측면을 드러냅니다.
세션 기간은 사용자가 방문당 앱에서 보내는 평균 시간입니다. 뉴스 앱의 경우 2–4분, 게임의 경우 8–15분, 스트리밍 서비스의 경우 20분 이상입니다. Session Duration이 감소하면 콘텐츠나 성능에 문제가 있음을 나타냅니다.
세션 간격은 이전 세션의 종료와 다음 세션의 시작 사이의 시간입니다. 빴른 간격 (분 또는 시간)은 높은 엔게이지먼트를 나타냅니다. 긴 간격 (날)은 낮은 관심이나 앱이 거의 필요하지 않은 실용적인 사용 시나리오를 나타냅니다.
기간(날, 주, 월)별 사용자 당 세션 수는 스틱키니스의 지표입니다. 계산식: DAU / MAU (일단 활성 사용자 / 월간 활성 사용자). 20% 이상이면 좋은 것으로, 50% 이상이면 대부분의 앱 카테고리에서 우수한 것으로 간주됩니다.
세션 깊이는 하나의 세션에서 화면 또는 작업의 수입니다. 사용자가 앱의 기능을 어떤 깊이로 탐색하는지를 보여줍니다. 긴 기간에 비해 깊이가 낮으면 네비게이션 문제를 나타냅니다.
앱 라이프사이클의 플랫폼 차이는 세션 정의에 직접적으로 영향을 미칩니다. iOS와 Android는 백그라운드 상태와 알림을 다른 방식으로 처리합니다.
Android에서는 첫 번째 Activity의 onStart()가 호출될 때 세션이 시작되고, 마지막 Activity의 onStop()에서 종료됩니다. 그러나 시스템이 백그라운드에서 프로세스를 종료시킬 수 있어 세션이 가차적으로 종료될 수 있습니다. 신뢰할 수 있는 추적을 위해서는 Application.ActivityLifecycleCallbacks을 사용할 것을 권장합니다.
class AnalyticsApp : Application() {
private var activityReferences = 0
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
override fun onActivityStarted(act: Activity) {
if (++activityReferences == 1) {
Analytics.trackSessionStart()
}
}
override fun onActivityStopped(act: Activity) {
if (--activityReferences == 0) {
Analytics.trackSessionEnd()
}
}
})
}
}
activityReferences 카운터는 사용자가 적어도 하나의 화면을 보고 있는지 결정합니다. 0이 되면 앱이 백그라운드로 넘어가고 세션이 종료됩니다.
iOS에서 세션은 applicationDidBecomeActive 및 applicationDidEnterBackground 메소드와 연결됩니다. 푸쉬 알림을 탭하면 세션 수가 인공적으로 부풀할 수 있으므로 분석에서 이를 고려해야 합니다.
Swift 예시:
import UIKit
class AppDelegate: UIResponder, UIApplicationDelegate {
func applicationDidBecomeActive(_ application: UIApplication) {
Analytics.trackSessionStart()
}
func applicationDidEnterBackground(_ application: UIApplication) {
Analytics.trackSessionEnd()
}
}
참고: iOS에서 앱 전환 (App Switcher)은 세션을 종료하지 않습니다 — 깊은 백그라운드로 넘어가거나 닫기 위해 스와이프할 때만 세션이 종료됩니다.
세션 분석은 단순 카운트 그 이상입니다. 세그멘테이션과 코호트 분석을 통해 집계된 데이터에서는 볼 수 없는 엔게이지먼트 패턴이 드러난니다.
사용자를 설치 주차별로 그룹화하고 첫 7일 동안의 평균 세션 수를 확인하세요. 가장 최근의 설치 코호트의 Sessions Per User가 이전처럼 낮다면, 온보딩 또는 트래픽 품질이 악화되고 있음을 나타냅니다.
세션 메트릭스의 이상 값은 문제의 조기 지표입니다. 릴리스 후 단순 세션(5초 미만)이 갑자기 증가하면 시작 버그를 나타냅니다. 하루에 Session Duration이 30% 감소하면 서버 장애 또는 API 변경을 나타낼 수 있습니다. 임계값을 사용한 모니터링을 설정하세요: 평균 Session Duration이 7일 이동 평균에서 2 표준 편차 이상 감소하면 경고를 발생시킬 수 있습니다.
세션 보고서에서 앱 버전별 세그멘테이션을 사용하세요. 버전 3.2.0은 세션 기간이 4분이지만, 버전 3.2.1은 2분입니다. 원인은 온보딩 변경입니다. 버전을 롤백하면 메트릭스가 복구됩니다. 버전 세그멘테이션 없이는 평균 감소를 볼 수 있지만 근본 원인을 찾을 수 없습니다.
파워 사용자 (1일 5+ 세션) — 핵심 청중입니다. 캐주얼 사용자 (주당 1–2 세션) — 재활성화 대상 그룹입니다. 슈면 사용자 (30일간 0 세션) — 리타겟팅 또는 푸쉬 해지 후보입니다.
각 세그멘트에 대해 별도의 메트릭스를 계산하세요: 파워 사용자의 Session Duration은 사용 깊이를 나타내고, 캐주얼 사용자에게는 진입 장벽을 나타냅니다. Amplitude (2024)에 따르면, 세션 세그멘트별로 콘텐츠를 개인화하는 앱은 월 평균 Session Duration이 18% 증가합니다.
리텐션은 세션을 통해 계산됩니다: N일차에 사용자가 리텐션되는 것은 그날 적어도 하나의 세션이 있었는지에 따락니다. 그러나 서로 다른 제품은 서로 다른 정의가 필요합니다. 소셜 네트워크의 경우, 세션은 1초일 수 있습니다. 스트리밍 서비스의 경우 15분이 될 수 있습니다.
품질 지표로 언인스톨-세션을 사용하세요: 업데이트 후 단순 세션(10초 미만)이 증가하면, 사용자가 필요한 기능을 찾지 못하고 있다는 것입니다. 이것은 언인스톨이 증가하기 전의 조기 UX 문제 신호입니다.
세션을 트래픽 손처와 연결하세요: 유료 채널의 사용자는 더 많은 세션과 긴 Session Duration을 가져야 합니다. 오건닉 트래픽이 유료 트래픽보다 40% 높은 Session Duration을 보인다면, 타겟팅 품질에 문제가 있는 것입니다. 세션 기인은 획득 예산을 최적화하는 데 도움이 됩니다.
자주 묻는 질문
평균 세션 기간은 카테고리에 따라 다릅니다: 게임 — 8–15분, 소셜 미디어 — 5–10분, 유틸리티 — 1–3분. 줄기가 더 중요합니다: Session Duration이 한 달에 20% 감소하면 UX 오디트가 필요합니다.
많은 분석 SDK는 최소화 시 종료 이벤트를 발생시키지 않고 타임아웃을 기다립니다. 사용자가 앱을 1분 동안 최소화하고 돌아오면 하나의 세션으로 계산됩니다. 타임아웃(30–60분) 이후에만 새 세션이 시작됩니다.
N일차의 사용자 리텐션은 그날 적어도 한 번의 세션이 있었던 설치자의 비율로 계산됩니다. 세션이 옵바르게 추적되지 않으면 리텐션이 일홍적으로 낮거나 높게 평가됩니다.
네, 백그라운드 활동(음악 재생, 네비게이션, 동기화)은 앱을 활성 상태로 유지할 수 있습니다. 포그라운드 세션(사용자가 화면을 보는 것)과 프로세서 세션(UI 없이 백그라운드 작업)을 구분하는 것이 좋습니다.
구독 서비스(스트리밍, 피트니스, 교육)의 경우 5–10분의 타임아웃을 권장합니다. 사용자는 짧은 휘식 후 돌아오는 경우가 많으므로, Session Duration을 왜곡하지 않도록 각 휘식을 새 세션으로 계산해야 합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.