HealthKit 프레임워크는 Apple 건강 생태계의 핵심 구성 요소로, iPhone, Apple Watch 및 타사 기기의 데이터를 안전한 로컬 저장소에 수집합니다. Apple Developer Documentation, 2025에 따르면, 이 플랫폼은 100개 이상의 데이터 유형을 지원합니다 — 신체 활동과 수면부터 실험실 검사 및 심혈관 지표까지. 단일 저장소의 의료 정보는 각 데이터 유형에 대한 세분화된 접근 제어를 통해 애플리케이션 간 원활한 동기화를 보장합니다.
핵심 요점
HealthKit은 2014년 iOS 8과 함께 발표된 Apple의 프레임워크로, 사용자의 건강 및 피트니스 데이터를 중앙에서 관리하기 위해 설계되었습니다. 이 플랫폼은 애플리케이션과 기기가 의료 정보를 쓰고 읽을 수 있는 통합 저장소 역할을 합니다.
타사 솔루션과 달리 HealthKit은 iOS 운영 체제에 직접 내장되어 있어 하드웨어 수준에서 높은 성능과 보안을 보장합니다. 애플리케이션은 서로 직접 접근할 수 없습니다 — 모든 작업은 중앙 HKHealthStore를 통해 이루어집니다.
Apple WWDC 2024에 따르면, 미국 iPhone 사용자의 87% 이상이 HealthKit을 기반으로 하는 내장 건강 앱을 한 번 이상 사용한 적이 있습니다. 생태계에는 피트니스 트래커부터 원격 의료 서비스까지 수천 개의 타사 애플리케이션이 포함되어 있습니다.
HealthKit 아키텍처는 각 데이터 소스에 대해 격리된 컨테이너를 갖춘 다중 레벨 저장소 원칙을 기반으로 구축되었습니다. 하위 레벨에는 하드웨어 AES-256으로 암호화된 SQLite 데이터베이스가 있습니다. 상위 레벨에는 통합 상호 작용 인터페이스인 HKHealthStore가 있습니다.
각 레코드에는 HKSource 소스, HKDevice 기기, 날짜, 시간 및 iCloud 동기화 플래그와 같은 메타데이터가 포함됩니다. 시스템은 동일한 소스의 중복 레코드를 자동으로 중복 제거하여 데이터 왜곡을 방지합니다.
데이터는 유형별로 그룹화됩니다 — 수치 지표의 경우 HKQuantityType(심박수, 걸음 수, 칼로리), 범주형 이벤트의 경우 HKCategoryType(수면, 증상, 월경 주기). 이 구조는 HKSampleQuery 또는 HKStatisticsQuery를 통해 모든 매개변수 조합을 유연하게 쿼리할 수 있게 합니다.
HealthKit은 100개 이상의 표준화된 데이터 유형을 지원하며, 신체 활동, 영양, 수면, 심혈관계, 생식 건강, 실험실 결과 및 활력 징후 범주로 나뉩니다. 각 유형에는 HKUnit 측정 단위와 액세스 수준이 있습니다.
개발자는 HKCorrelation을 통해 사용자 지정 상관 관계를 만들 수도 있습니다 — 관련 측정값의 그룹입니다. 예를 들어, 식사 기록에는 칼로리, 단백질, 지방 및 탄수화물이 단일 객체로 포함될 수 있습니다. 포도당 수치와 같은 순차적 측정에는 HKSeriesSample이 사용됩니다.
HealthKit 작업은 프레임워크를 가져올 때 자동으로 생성되는 싱글톤인 HKHealthStore를 정의하는 것으로 시작됩니다. 스토어를 통해 애플리케이션은 플랫폼이 기기에서 사용 가능한지 확인합니다. iPad 및 iPod touch에서는 지원되지 않을 수 있기 때문입니다. 또한 HealthKit은 Mac Catalyst에서 사용할 수 없습니다 — macOS에는 별도의 구현이 필요합니다.
import HealthKit
let healthStore = HKHealthStore()
let stepType = HKQuantityType
.quantityType(forIdentifier: .stepCount)
let heartRateType = HKQuantityType
.quantityType(forIdentifier: .heartRate)
let typesToRead: Set = [stepType, heartRateType]
HealthKit은 비동기 게시-구독 모델을 사용하여 데이터 소스와 애플리케이션 간의 중개자 역할을 합니다. 소스 애플리케이션은 HKHealthStore를 통해 데이터를 쓰고, 구독 애플리케이션은 백그라운드에서 실행되는 HKObserverQuery를 통해 새 레코드 알림을 받습니다.
이 프레임워크는 iCloud를 통한 백그라운드 동기화를 지원합니다. 사용자가 로그인한 경우 HealthKit은 자동으로 실시간으로 모든 Apple 기기에 데이터를 배포합니다. 네트워크가 없으면 변경 사항이 로컬에 버퍼링되고 데이터 손실 없이 연결이 복원될 때 동기화됩니다.
Apple에 따르면 iPhone과 Apple Watch 간의 동기화 지연은 활동 데이터의 경우 30초 미만입니다. 다른 유형 — 수면, 영양, 실험실 결과 — 의 경우 배터리 절약을 위해 최대 15분 간격으로 일정에 따라 동기화가 이루어집니다.
HKHealthStore는 모든 작업이 수행되는 중앙 싱글톤입니다. saveObject를 통한 저장, execute를 통한 읽기, deleteObject를 통한 삭제 등입니다. 각 작업은 비동기식이며 클로저를 통해 결과를 반환하므로 적절한 오류 처리가 필요합니다.
쿼리는 여러 유형으로 나뉩니다: HKSampleQuery는 기준에 따라 레코드를 검색하고, HKStatisticsQuery는 집계 데이터(합계, 평균, 최소, 최대)용, HKObserverQuery는 실시간 변경 추적용입니다. 정기적인 백그라운드 업데이트에는 HKHeartbeatSeriesQuery가 사용됩니다.
let type = HKQuantityType
.quantityType(forIdentifier: .stepCount)
let now = Date()
let start = Calendar.current
.date(
byAdding: .day,
value: -7,
to: now
)
let predicate = HKQuery
.predicateForSamples(
withStart: start,
end: now,
options: .strictStartDate
)
let query = HKSampleQuery(
sampleType: type,
predicate: predicate,
limit: 100
) { _, samples, _ in
for sample in samples as [HKQuantitySample] {
print(sample.quantity)
}
}
healthStore.execute(query)
HealthKit 통합은 Xcode에서 HealthKit 기능을 활성화하고 프로젝트에 entitlement을 추가하는 것으로 시작됩니다. 그런 다음 애플리케이션은 requestAuthorization 호출을 통해 특정 데이터 유형에 대한 접근 권한을 요청합니다. 중요: HealthKit은 시뮬레이터에서 사용할 수 없으며 iOS가 설치된 물리적 기기가 필요합니다.
통합 프로세스는 세 단계로 구성됩니다: 데이터 유형 정의, 권한 부여 요청 및 읽기 및 쓰기 작업 수행. 각 단계는 비동기식이며 오류를 처리해야 합니다 — 사용자는 토글이 있는 시스템 대화 상자에서 모든 데이터 유형에 대한 액세스를 거부할 수 있습니다.
Apple 연구에 따르면 HealthKit 통합이 있는 애플리케이션은 사용자 참여도가 40% 더 높습니다. 성공의 핵심 요소는 권한 부여 요청 설명에서 앱이 특정 건강 데이터가 필요한 이유를 설명하는 것입니다.
권한 부여 요청은 첫 실행 시 한 번 수행됩니다. 애플리케이션은 읽기용과 쓰기용으로 두 가지 유형 세트를 지정합니다. 사용자는 각 데이터 유형에 대한 토글이 있는 시스템 대화 상자를 보고 불필요한 범주를 거부하면서 선택적으로 액세스 권한을 부여할 수 있습니다.
let typesToWrite: Set = [
HKQuantityType
.quantityType(
forIdentifier: .dietaryEnergyConsumed
)
]
let typesToRead: Set = [
HKQuantityType
.quantityType(
forIdentifier: .stepCount
)
]
healthStore.requestAuthorization(
toShare: typesToWrite,
read: typesToRead
) { success, error in
if success {
print("인증 완료")
}
}
HealthKit은 하드웨어 암호화, 애플리케이션 샌드박싱 및 세분화된 권한을 포함하는 다중 계층 보안 모델을 구현합니다. 모든 건강 데이터는 기기에서 암호화되어 저장되며, 한 번 요청되는 사용자의 별도 동의 없이 iCloud로 전송되지 않습니다.
핵심 기능은 Intent 메커니즘입니다. 애플리케이션은 데이터에 대한 지속적인 백그라운드 액세스 권한이 없습니다. 각 읽기 또는 쓰기 요청은 운영 체제에 의해 확인되며, 사용자는 앱을 다시 설치할 필요 없이 설정 — 개인정보 보호 — 건강을 통해 언제든지 권한을 취소할 수 있습니다.
Apple은 App Store Review Guidelines에서 HealthKit 사용을 엄격하게 규제합니다. 애플리케이션은 명시적 동의 없이 HealthKit 데이터를 제3자에게 전송하거나, 광고 또는 타겟팅에 사용하거나, 명시된 기능에 필요한 기간보다 더 오래 저장할 수 없습니다.
HealthKit에는 여러 제한 사항이 있습니다: 기기의 최대 데이터베이스 크기는 1GB, 단일 쿼리의 레코드 수 제한은 1000개, 동일한 데이터 유형 간 최소 간격은 1초입니다. 프레임워크는 또한 백그라운드 업데이트를 제한합니다 — 하루에 60회 이상의 HKObserverQuery 트리거는 허용되지 않습니다.
이러한 제한은 성능으로 상쇄됩니다: 1000개 레코드 읽기는 평균 50–100밀리초, 단일 레코드 쓰기는 10밀리초 미만이 소요됩니다. 대량의 데이터의 경우 개별 레코드를 가져오는 대신 사전 집계와 함께 HKStatisticsCollectionQuery를 사용하는 것이 좋습니다. HealthKit은 쿼리를 비동기적으로 처리하므로 애플리케이션은 HKHealthStore의 데이터를 기다리는 동안 차단되지 않습니다.
자주 묻는 질문
HealthKit은 iPhone, iPad, iPod touch를 포함한 iOS 8 이상의 모든 기기에서 지원됩니다. Apple Watch는 페어링된 iPhone을 통해 자동으로 데이터를 전송합니다. 타사 기기 — 피트니스 밴드, 체중계, 혈압계 — 는 해당 애플리케이션이 있으면 HealthKit API를 통해 데이터를 쓸 수 있습니다.
네. 건강 앱에서 “건강 데이터 내보내기” 기능을 통해 모든 데이터를 XML 형식으로 내보낼 수 있습니다. 개발자는 HKSampleQuery를 통해 허용된 모든 유형을 프로그래밍 방식으로 읽고 자체 형식으로 내보낼 수 있습니다. 명시적 사용자 동의 없이 건강 데이터를 타사 서버로 전송할 수 없습니다.
사용자는 건강 앱 또는 데이터를 기록한 소스 애플리케이션을 통해 데이터를 삭제할 수 있습니다. 삭제 후 데이터는 복구할 수 없습니다 — HealthKit에는 휴지통이 없습니다. 삭제 작업은 되돌릴 수 없으므로 애플리케이션은 deleteObject를 실행하기 전에 확인을 요청하는 것이 좋습니다.
HealthKit은 사용자 건강 데이터의 저장 및 공유를 위해 설계된 반면, ResearchKit은 의학 연구를 수행하기 위한 프레임워크입니다. ResearchKit은 HealthKit을 데이터 소스 중 하나로 사용하지만, 연구 데이터 수집을 위한 사전 동의, 설문지 및 활성 작업 모듈을 추가합니다.
네. HealthKit을 사용하는 애플리케이션은 App Store Review Guidelines, 섹션 5.1.1 — 의료 및 건강 데이터를 준수해야 합니다. 앱 내 데이터 사용에 대한 명시적 설명, 개인정보 보호정책, 데이터의 광고 사용 금지 및 네트워크 전송 시 암호화가 필요합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.