모바일 애플리케이션의 만보계(보수계)는 가속도계와 자이로스코프의 데이터를 기반으로 사용자의 걸음 수를 계산하는 소프트웨어-하드웨어 메커니즘입니다. 최신 스마트폰은 기계 학습 알고리즘을 센서와 결합하여 걷기, 달리기 및 기타 신체 활동을 정확하게 감지합니다. Apple HealthKit Documentation, 2025에 따르면, 최신 기기에서 정상 걷기 시 걸음 수 계산 정확도는 95~97%에 도달합니다.
핵심 사항
만보계는 모바일 애플리케이션에서 스마트폰에 내장된 모션 센서의 데이터를 기반으로 사용자의 걸음 수를 결정하는 기능입니다. 과거의 기계식 만보계와 달리, 모바일 만보계는 미세전자기계 센서(MEMS)와 디지털 신호 처리 알고리즘을 사용하여 정확한 이동량을 계산합니다. 현대적 구현은 걸음 수를 세는 것뿐만 아니라 활동을 분류합니다: 걷기, 달리기, 계단 오르기.
만보계의 모바일 기기 통합은 2013년 iPhone 5s의 M7 모션 코프로세서 도입으로 가능해졌으며, 이 코프로세서는 최소 전력 소비로 센서 데이터를 지속적으로 수집했습니다. 오늘날 모든 최신 스마트폰에는 센서 허브 수준에서 걸음 수 계산을 위한 하드웨어 지원이 있습니다. 이는 메인 프로세서를 깨우지 않고 관성 센서 데이터를 처리하는 전용 칩입니다.
스마트폰의 걸음 수 계산은 세 개의 수직 축(X, Y, Z)을 따라 기기의 가속도를 측정하는 가속도계 신호 분석을 기반으로 합니다. 걸을 때 각 걸음은 특징적인 가속도 패턴을 만듭니다. 다리를 들 때 위쪽 피크, 착지할 때 아래쪽 피크입니다. 걸음 수(케이던스)는 걷기의 경우 100~130걸음/분, 달리기의 경우 150~180걸음/분이며, 가속도 진폭은 2~6m/s²입니다.
가속도계의 원시 신호에는 노이즈와 고주파 간섭이 포함되어 있으므로, 처리의 첫 단계는 차단 주파수 3~5Hz의 저역 통과 필터링입니다. 필터링 후 가속도 벡터 a = sqrt(x² + y² + z²)가 계산되어 기기 방향과 관계없이 운동 관련 가속도를 분리합니다. 그런 다음 알고리즘은 신호에서 국소 최대값을 감지합니다 — 각 최대값이 한 걸음에 해당합니다.
오탐지를 줄이기 위해(예: 교통 수단에서의 진동), 추가 기준이 적용됩니다: 최소 걸음 진폭(일반적으로 >1.2m/s²), 걸음 간 최소 간격(걷기의 경우 300~400ms), 자기상관을 통한 신호 주기성 확인. 피크 간 시간 간격이 불규칙하면 시퀀스는 무작위 움직임으로 표시되고 걸음으로 계산되지 않습니다.
기본 걸음 감지 알고리즘은 임계값 감지 방법을 사용합니다. 시스템은 가속도계 신호가 설정된 임계값을 초과한 후 휴식 수준으로 돌아오는 순간을 찾습니다. 각각의 이러한 이벤트는 잠재적 걸음으로 간주됩니다. 두 가지 접근 방식이 있습니다: 피크 감지와 제로 크로싱. 피크 감지는 신호의 최대값을 포착하고, 제로 크로싱은 신호가 평균값을 교차하는 순간을 감지하며, 이는 걸음 진폭에 덜 의존적입니다.
최신 걸음 수 계산 알고리즘은 사용자의 걷기 스타일에 자동으로 적응하는 적응형 임계값을 사용합니다. 시스템은 지난 2~3초 동안의 신호 분산을 분석하고 제곱 평균 제곱근(RMS)에 계수를 곱하여 동적 임계값을 계산합니다. 이를 통해 활동 유형 간 교차 보정 없이 느린 산책과 격렬한 달리기 모두에서 정확한 걸음 수 계산이 가능합니다.
최신 만보계 구현은 피크 감지뿐만 아니라 움직임 패턴 분류를 위한 기계 학습도 사용합니다. 신경망 모델은 평평한 표면 걷기, 계단 오르기, 달리기, 교통 수단 이용 등 다양한 시나리오에서 수천 시간의 실제 움직임 기록으로 훈련됩니다. 입력 특징에는 가속도계와 자이로스코프 시계열이 포함되며, 출력은 현재 신호 세그먼트가 인간의 이동에 해당할 확률입니다.
Google Activity Recognition 연구에 따르면, 합성곱 신경망(CNN) 기반 모델은 벤치마크 데이터셋에서 98%의 걷기 인식 정확도를 달성합니다. Apple 기기에서는 100,000명 이상의 자원봉사자 데이터로 훈련된 활동 분류 모델과 함께 Core ML이 사용됩니다. 최적화된 모델은 기기에서 직접 실행되어(on-device inference) 즉시 처리를 보장하고 사용자 개인정보를 보호합니다.
import CoreMotion
class PedometerObserver {
private let pedometer = CMPedometer()
func startTracking() {
guard CMPedometer.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, error in
guard let data = data else { return }
let steps = data.numberOfSteps.intValue
let distance = data.distance?.doubleValue
let floorsAscended = data.floorsAscended?.intValue
// 걸음 수로 UI 업데이트
DispatchQueue.main.async {
// self.stepsLabel.text = "\(steps) 걸음"
}
}
}
func stopTracking() {
pedometer.stopUpdates()
}
}
iOS에서 만보계에 접근하려면 Core Motion 프레임워크의 CMPedometer 클래스가 사용됩니다. CMPedometer는 걸음 수뿐만 아니라 이동 거리, 층 수(오르기), 보행 속도 및 활동 시간도 제공합니다. 데이터는 실시간(startUpdates)과 과거의 임의 기간(queryPedometerData) 모두에서 사용할 수 있습니다. 모션 코프로세서(M 시리즈)는 하드웨어 수준에서 센서 데이터를 처리하여 소프트웨어 처리와 비교해 전력 소비를 80% 줄입니다.
Android에서 만보계 기능은 두 가지 하드웨어 센서를 통해 구현됩니다: TYPE_STEP_COUNTER(부팅 이후 누적 걸음 수 카운터)와 TYPE_STEP_DETECTOR(각 걸음마다 이벤트 생성). TYPE_STEP_COUNTER는 보정이 필요 없으며 프로세서 전력을 소비하지 않습니다 — 데이터는 센서 허브 수준에서 하드웨어 업데이트됩니다. 누적된 일일 걸음 통계에 접근하려면 DataType.TYPE_STEP_COUNT_DELTA 레코드와 함께 Google Fit API가 사용됩니다.
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
class StepCounter(
private val sensorManager: SensorManager
) : SensorEventListener {
private var totalSteps = 0
private var previousSteps = -1
fun startListening() {
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
sensor?.let {
sensorManager.registerListener(this, it, SensorManager.SENSOR_DELAY_NORMAL)
}
}
override fun onSensorChanged(event: SensorEvent) {
if (previousSteps < 0) {
previousSteps = event.values[0].toInt()
}
val currentSteps = event.values[0].toInt()
totalSteps = currentSteps - previousSteps
}
fun getStepCount(): Int = totalSteps
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
}
만보계의 정확도는 여러 요인에 따라 달라집니다: 스마트폰 위치(손, 주머니, 가방), 활동 유형(걷기, 달리기, 계단 오르기), 센서 품질입니다. 스마트폰을 바지 주머니에 넣으면 정확도가 93~97%에 도달하고, 가방이나 백팩에서는 70~85%로 떨어집니다. 사용자의 걷기 스타일도 정확도에 영향을 미칩니다. 낮은 가속도 진폭의 끄는 걸음은 안정적인 걸음보다 더 많은 오류를 발생시킵니다.
모바일 만보계의 주요 한계로는 매우 느린 움직임(시속 1.5km 미만)에서 걸음 수 계산 불가, 교통 수단 이용으로 인한 오탐지, 저속 달리기(조깅) 시 정확도 감소, 대화 중 제스처의 영향 등이 있습니다. 오류를 최소화하기 위해 최신 애플리케이션은 센서(가속도계 + 자이로스코프 + 기압계)의 조합과 아티팩트 필터링을 위한 기계 학습을 사용합니다. 기압계는 예를 들어 계단 오르기와 고도 변화를 감지하여 엘리베이터에서의 잘못된 걸음을 제외하는 데 도움을 줍니다.
자주 묻는 질문
휴대폰의 만보계는 가속도계를 사용하여 각 걸음마다 가속도를 기록합니다. 알고리즘은 세 축의 가속도 피크를 분석하고 노이즈를 필터링하여 걸음 수를 결정합니다. 최신 모델은 정확도 향상과 활동 분류를 위해 자이로스코프와 기계 학습도 사용합니다.
스마트폰을 바지 주머니에 넣었을 때, 정상 걷기 시 정확도는 95~97%에 도달합니다. 가방이나 백팩에서는 정확도가 70~85%로 떨어집니다. 걷기 스타일과 표면 유형도 정확도에 영향을 미칩니다 — 고르지 않은 지형은 최대 10~15%의 오차를 발생시킬 수 있습니다.
네, 만보계는 인터넷 연결 없이도 완전히 오프라인으로 작동합니다. 모든 계산은 내장 센서를 사용하여 기기에서 수행됩니다. 인터넷은 피트니스 앱의 클라우드 서비스와 데이터를 동기화하거나 경로 지도를 표시하는 데만 필요할 수 있습니다.
다른 앱들은 센서 데이터 처리, 감지 임계값 및 필터링 방법에 다른 알고리즘을 사용합니다. 일부 앱은 원시 가속도계 데이터를 기반으로 걸음 수를 계산하는 반면, 다른 앱은 시스템 API(TYPE_STEP_COUNTER)를 사용하며, 계산 차이는 10~15%에 이를 수 있습니다.
Android에서 만보계에 접근하려면 Sensor API를 통해 TYPE_STEP_COUNTER 센서를 사용하세요 — 이 센서는 마지막 재부팅 이후의 누적 걸음 수를 제공합니다. 특정 날짜의 걸음 수에 접근하려면 TYPE_STEP_COUNT_DELTA 데이터 유형과 함께 Google Fit API를 통합하세요.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.