MicrocosmWorks๋””์ง€ํ„ธ ์ฝ”์Šค๋ชจ์Šค ํ˜์‹  ๋ฐ ์„ค๊ณ„
์†Œ๊ฐœ์—ฐ๋ฝ์ฒ˜
MicrocosmWorks๋””์ง€ํ„ธ ์ฝ”์Šค๋ชจ์Šค๋ฅผ ํ˜์‹ ํ•˜๊ณ  ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค

์ค‘์š”ํ•œ IT ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ , ๋ณด์•ˆ์— ์—ด์ •์ ์ด๋ฉฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ˜์‹ ์ ์ธ IT ์ธํ”„๋ผ๋ฅผ ํ†ตํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ์„ฑ์žฅ์„ ๋•์Šต๋‹ˆ๋‹ค.

[email protected]
+91 7011868196
New Delhi, India

AI ์„ฑ์žฅ ํ—ˆ๋ธŒ

AI ํ—ˆ๋ธŒ์Šคํƒ€ํŠธ์—… ํ˜์‹ ๊ธฐ์—… ๊ฐ€์†๊ธฐ

์†”๋ฃจ์…˜

๋ชจ๋“  ์†”๋ฃจ์…˜์›ฐ๋‹ˆ์Šค ๋ฐ ํ”ผํŠธ๋‹ˆ์Šค ์•ฑAI ๋น„๋””์˜ค ํ”Œ๋žซํผAI ์—์ด์ „ํŠธ ๊ฐœ๋ฐœ

์ž์›

ํ†ต์ฐฐ๋ ฅ์‚ฐ์—… ๊ฐ€์ด๋“œ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ฒญ์‚ฌ์ง„์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์‚ฌ๋ก€ ์—ฐ๊ตฌ

ํšŒ์‚ฌ

ํšŒ์‚ฌ ์†Œ๊ฐœ์—ฐ๋ฝ์ฒ˜์šฐ๋ฆฌ์˜ ์ž‘์—…

์„œ๋น„์Šค

๋””์ง€ํ„ธ ์ปจ์„คํŒ…ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผSaaS ๊ฐœ๋ฐœAI ๊ฐœ๋ฐœ๋น„๋””์˜ค ๊ธฐ์ˆ 
ERP ๊ฐœ๋ฐœZoho ๋งž์ถคํ™”Odoo ๊ฐœ๋ฐœSalesforce ํ†ตํ•ฉ๋งž์ถคํ˜• CRM ๊ฐœ๋ฐœ
QuickBooks ํ†ตํ•ฉIoT ์†”๋ฃจ์…˜๋ธ”๋ก์ฒด์ธ ๊ฐœ๋ฐœ
์‚ฌ์ด๋ฒ„ ๋ณด์•ˆ ์ปจ์„คํŒ…IT ์ง€์› - L3

ยฉ 2026 MicrocosmWorks. ๋ชจ๋“  ๊ถŒ๋ฆฌ ๋ณด์œ .

๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ๋ฐฉ์นจ์„œ๋น„์Šค ์•ฝ๊ด€
ํ†ต์ฐฐ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
SaaS Applications

Apple Health ๋ฐ Health Connect ๋™๊ธฐํ™”

Apple HealthKit๊ณผ Android Health Connect๋Š” ๊ฑฐ์˜ ์•„๋ฌด๊ฒƒ๋„ ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” ๋‹ค๋ฅธ ์ฝ๊ธฐ ๋ชจ๋ธ, ๊ถŒํ•œ ์ฒด๊ณ„ ๋ฐ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋ฐฐํ„ฐ๋ฆฌ ์†Œ๋ชจ๋‚˜ ์ค‘๋ณต ๊ธฐ๊ธฐ์—์„œ ๊ฑธ์Œ ์ˆ˜๋ฅผ ์ด์ค‘ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ , ์ด๋“ค์„ ์ค‘๋ณต ์ œ๊ฑฐ๋˜๊ณ  ์‹œ๊ฐ„๋Œ€๊ฐ€ ๋ณด์ •๋œ ๋‹จ์ผ ์ผ์ผ ๊ฑด๊ฐ• ํ”„๋กœํ•„๋กœ ์ •๊ทœํ™”ํ•˜๋Š” 3๋‹จ๊ณ„ ๋™๊ธฐํ™” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Mayank Joshi.webpMayank Chandra Joshi
โ€ข
August 12, 2026
โ€ข
์ˆ˜์ •์ผ August 29, 2026
โ€ข
4 min read
Health data synchronization architecture connecting Apple HealthKit and Android Health Connect to a unified health profile with on-device normalization.
4 min read

๊ฑธ์Œ ์ˆ˜, ๊ฑฐ๋ฆฌ, ์นผ๋กœ๋ฆฌ, ์‹ฌ๋ฐ•์ˆ˜, ์ˆ˜๋ฉด์€ ๊ฑด๊ฐ• ๋ฐ ์˜์–‘ ์•ฑ์— ์˜ํ•ด ์‚ฌ์šฉ์ž์˜ ํ”Œ๋žซํผ(Android์˜ Android Health Connect, iOS์˜ Apple HealthKit)์—์„œ ๊ฐ€์ ธ์™€์ ธ์•ผ ํ•˜๋ฉฐ โ€” ํ•˜๋‚˜์˜ ๊น”๋”ํ•˜๊ณ  ์ค‘๋ณต ์ œ๊ฑฐ๋œ ์ผ์ผ ํ”„๋กœํ•„๋กœ ์ œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ API ๊ฐ„์—๋Š” ์œ ์‚ฌ์ ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค: ๋ณ„๋„์˜ ์ฝ๊ธฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜, ๋‹ค๋ฅธ ๊ถŒํ•œ ๋ถ€์—ฌ ์ฒด๊ณ„, ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ. ์ €ํฌ๋Š” ์ด๋“ค์„ ํ•˜๋‚˜์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๋ชจ๋ฐ”์ผ ๋™๊ธฐํ™” ๋ ˆ์ด์–ด๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋‹น๋ฉด ๊ณผ์ œ

  • ์–ด๋–ค ๊ฒƒ๋„ ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๋‘ ๊ฐœ์˜ ๋„ค์ดํ‹ฐ๋ธŒ API. Apple HealthKit์€ ์ฝœ๋ฐฑ์„ ํ†ตํ•ด ์ผ๋ณ„ ์ง‘๊ณ„๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ ; Health Connect๋Š” ํ’๋ถ€ํ•œ ์†Œ์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์›์‹œ์ ์ด๊ณ  ํŽ˜์ด์ง€๋กœ ๋‚˜๋‰œ ์ƒ˜ํ”Œ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ฐœ๋…์ด์ง€๋งŒ ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ˜•ํƒœ โ€” ๊ทธ๋ฆฌ๊ณ  ์•ฑ์€ ๋‘˜ ๋‹ค ํ•˜๋‚˜์˜ ์Šคํ‚ค๋งˆ๋กœ ์ •๊ทœํ™”ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ค‘ ๊ณ„์‚ฐ์ด ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. ํœด๋Œ€ํฐ, ์Šค๋งˆํŠธ์›Œ์น˜, ํƒ€์‚ฌ ์•ฑ ๋ชจ๋‘ ๋™์ผํ•œ 8,000 ๊ฑธ์Œ์„ ๋ณด๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ํ•ฉ์‚ฐํ•˜๋ฉด ๋ชจ๋“  ์ง€ํ‘œ๊ฐ€ ๊ณผ์žฅ๋ฉ๋‹ˆ๋‹ค. ์•ฑ์€ ์ค‘๋ณต๋˜๋Š” ์†Œ์Šค๋ฅผ ์ธ์‹ํ•˜๊ณ  ๊ฐ ์‹ค์ œ ํ™œ๋™์„ ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐํ„ฐ๋ฆฌ์™€ ๋„คํŠธ์›Œํฌ๋Š” ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋Œ€๊ฐ€๋ฅผ ์น˜๋ฅผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฑด๊ฐ• ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋ฃจ ์ข…์ผ ๋ณ€๊ฒฝ๋˜์ง€๋งŒ, ๋งค ๋™๊ธฐํ™”๋งˆ๋‹ค ์ „์ฒด ๊ธฐ๋ก์„ ์ฝ์œผ๋ฉด ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ์†Œ๋ชจ๋˜๊ณ  ์…€๋ฃฐ๋Ÿฌ ์—ฐ๊ฒฐ์ด ํฌํ™” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋™๊ธฐํ™” ์ฃผ๊ธฐ๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋А๊ปด์ง€๋ฉด์„œ๋„ ๊ฐ€๋ฒผ์›Œ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ถŒํ•œ์€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹ญ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ์œ ํ˜•, ๋‘ ๊ฐ€์ง€ ๊ถŒํ•œ ๋ชจ๋ธ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ฝ๊ธฐ ์ œํ•œ, ๊ทธ๋ฆฌ๊ณ  ์ผ๋ถ€ ๋ฒ”์œ„๋Š” ํ—ˆ์šฉํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฒ”์œ„๋Š” ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž โ€” ์ด ๋ชจ๋“  ๊ฒƒ์„ ์•ฑ์€ ํ๋ฆ„์„ ์ค‘๋‹จ์‹œํ‚ค์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

     

์šฐ๋ฆฌ์˜ ์†”๋ฃจ์…˜

์ €ํฌ๋Š” 3๋‹จ๊ณ„ ๋™๊ธฐํ™”๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค: ์–‡์€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ ํ”Œ๋žซํผ์˜ API๋ฅผ ์ฝ๊ณ , ์˜จ๋””๋ฐ”์ด์Šค ์ •๊ทœํ™” ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณต ์ œ๊ฑฐํ•˜๊ณ  ์ผ๋ณ„ ์š”์•ฝ์œผ๋กœ ๋กค์—…ํ•˜๋ฉฐ, ๋ฐฑ์—”๋“œ๋Š” ์ด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹จ์ผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์›์žฅ์œผ๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์›์‹œ ์ƒ˜ํ”Œ์„ ์ „์†กํ•˜์ง€ ์•Š๊ณ  โ€” ๊น”๋”ํ•˜๊ณ  ์‹œ๊ฐ„๋Œ€ ๋ณด์ •๋œ ์ผ๋ณ„ ๋กค์—…์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

health-sync-pipeline.webp

 

์•„ํ‚คํ…์ฒ˜

  • iOS๋Š” react-native-health๋ฅผ ํ†ตํ•ด Apple HealthKit์„ ์ฝ๊ณ ; Android๋Š” react-native-health-connect๋ฅผ ํ†ตํ•ด Health Connect๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.
  • ์˜จ๋””๋ฐ”์ด์Šค ์ •๊ทœํ™”๋Š” ๋‘ ํ”Œ๋žซํผ์˜ ์ถœ๋ ฅ์„ ํ•˜๋‚˜์˜ ์Šคํ‚ค๋งˆ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํœด๋Œ€ํฐ์„ ๋– ๋‚˜๊ธฐ ์ „์— ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋™๊ธฐํ™” ํŠธ๋ฆฌ๊ฑฐ โ€” ์ฒซ ์‹คํ–‰ ์‹œ 30์ผ ๊ธฐ๋ก, ์ดํ›„ 10๋ถ„ ๊ฐ„๊ฒฉ ๋ฐ ์•ฑ ์žฌ๊ฐœ ์‹œ๋งˆ๋‹ค ๊ฒฝ๋Ÿ‰ 1์ผ ์ฆ๋ถ„ ์ฝ๊ธฐ.
  • ์ „์†ก โ€” ์ •๊ทœํ™”๋œ ์ผ์ผ ๋กค์—…์€ ๋ฉ”์ธ ์„œ๋ฒ„์˜ /user-health/system-activity์— POST๋˜๋ฉฐ, ์ด๋Š” (์‚ฌ์šฉ์ž ID + ์‹œ๊ฐ„๋Œ€์™€ ํ•จ๊ป˜) ํ—ฌ์Šค ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  • ์˜์†์„ฑ โ€” ๊ฐ ์†Œ์Šค/์ผ์€ HealthSystemAggregate๋กœ ๋ฉฑ๋“ฑ์ ์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค; ๊ทธ๋Ÿฌ๋ฉด MongoDB change stream์ด ์ด๋ฅผ ์ผ๋ณ„ HealthLedger๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„ค์ดํ‹ฐ๋ธŒ HealthKit ๋ฐ Health Connect ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ Expo / React Native ๊ด€๋ฆฌํ˜• ์›Œํฌํ”Œ๋กœ์šฐ.

     

์ฃผ์š” ๊ธฐ๋Šฅ

  1. ๋‘ API๋ฅผ ์œ„ํ•œ ๋‹จ์ผ ์ •๊ทœํ™” ๊ณ„์•ฝ. ํ”Œ๋žซํผ๋ณ„ ๋ฆฌ๋”๋Š” ๋‹จ์ผ formatHealthData ๋‹จ๊ณ„๋ฅผ ๊ณต๊ธ‰ํ•˜์—ฌ ์†Œ์Šค์™€ ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ํ˜•ํƒœ๋ฅผ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค โ€” ๋”ฐ๋ผ์„œ ๋ฐฑ์—”๋“œ์™€ UI๋Š” iOS ๋Œ€ Android์— ๋”ฐ๋ผ ๋ถ„๊ธฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2. ๊ธฐ๊ธฐ ๋‚ด ์ตœ๋Œ€๊ฐ’ ๊ธฐ๋ฐ˜ ์ค‘๋ณต ์ œ๊ฑฐ. ๊ฐ ์†Œ์Šค ๋‚ด์—์„œ ํ•˜๋ฃจ์˜ ์ธก์ •๊ฐ’์€ ํ•ฉ์‚ฐ๋ฉ๋‹ˆ๋‹ค; ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ผ๋ณ„ ๊ฐ’์€ ์†Œ์Šค ์ „๋ฐ˜์— ๊ฑธ์นœ Math.max()์ž…๋‹ˆ๋‹ค (์นผ๋กœ๋ฆฌ๋Š” source|deviceType์œผ๋กœ ํ‚ค ์ง€์ •๋จ). ๋”ฐ๋ผ์„œ ํ•œ ๊ธฐ๊ธฐ์—์„œ ์—ฌ๋Ÿฌ ์ธก์ •๊ฐ’์ด ๋ˆ„์ ๋˜๋Š” ๋™์•ˆ, ๊ฐ™์€ ๋‚ ์„ ๋ณด๊ณ ํ•˜๋Š” ์‹œ๊ณ„์™€ ์ „ํ™”๋Š” ์ด์ค‘์œผ๋กœ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค: 
 

// Sum readings within each source, then take the max ACROSS sources

dateSourceMap[date][source] += entry.count;

const totalSteps = Math.ceil(Math.max(...Object.values(dateSourceMap[date])));

3.ํ”Œ๋žซํผ๋ณ„ ์˜ฌ๋ฐ”๋ฅธ ์ฝ๊ธฐ ์ „๋žต. Health Connect ์ฝ๊ธฐ๋Š” pageToken ๋ฃจํ”„ (ํŽ˜์ด์ง€๋‹น 1,000๊ฐœ ๊ธฐ๋ก)๋กœ ํŽ˜์ด์ง€๊ฐ€ ๋งค๊ฒจ์ง‘๋‹ˆ๋‹ค; HealthKit์˜ ์ผ๋ณ„ ์ง‘๊ณ„๋Š” ์ผ๋ณ„๋กœ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. ๊ฐ ํŠน์ด์‚ฌํ•ญ์€ ์•ฑ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์—๋Š” ๋ณด์ด์ง€ ์•Š๋Š” ์ž์ฒด ๋ฆฌ๋”์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

4. ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ๊ณ ๋ คํ•œ ๋™๊ธฐํ™” ์ฃผ๊ธฐ. ์ „์ฒด 30์ผ ๋ฐฑํ•„์€ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋ฉฐ (์ฒซ ํ˜ธ์ถœ ํ”Œ๋ž˜๊ทธ๋กœ ๋ณดํ˜ธ๋จ); ๊ทธ ํ›„์—๋Š” ๋ชจ๋“  ๋™๊ธฐํ™”๊ฐ€ ํ•˜๋ฃจ์น˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค โ€” ์…€๋ฃฐ๋Ÿฌ์—์„œ ๋น ๋ฅด๊ณ , ์ „๋ ฅ ์†Œ๋ชจ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.

5. ์‹œ๊ฐ„๋Œ€ ๋ณด์ •๋œ ์ผ์ผ ๊ทธ๋ฃนํ™”. ์ƒ˜ํ”Œ์€ ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ„๋Œ€์— ๋”ฐ๋ผ YYYY-MM-DD ํ‚ค๋กœ ๋ถ„๋ฅ˜๋˜๋ฏ€๋กœ, ์„œ๋ฒ„ ์œ„์น˜์™€ ๊ด€๊ณ„์—†์ด ์˜คํ›„ 11์‹œ ์šด๋™์ด ์˜ฌ๋ฐ”๋ฅธ ๋‚ ์งœ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

6. ๋ฉฑ๋“ฑ์ ์ธ ๋ฐฑ์—”๋“œ ์“ฐ๊ธฐ. ๊ฐ ๋กค์—…์€ (userId, deviceId, source, date)๋ฅผ ๊ธฐ์ค€์œผ๋กœ upsert๋ฉ๋‹ˆ๋‹ค โ€” ๋™์ผํ•œ ๋‚ ์งœ๋ฅผ ๋‹ค์‹œ ์ „์†กํ•˜๋Š” ๊ฒƒ์€ no-op์ด ๋˜์–ด ์žฌ์‹œ๋„ ๋ฐ ์ค‘๋ณต ๋™๊ธฐํ™”๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

7. ์ •์งํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ์ฒ˜๋ฆฌ. ๋ˆ„๋ฝ๋œ ๊ถŒํ•œ, ๋นˆ ์ฝ๊ธฐ, Health Connect rate-limit ์˜ค๋ฅ˜๋Š” ๊น”๋”ํ•˜๊ฒŒ ํฌ์ฐฉ๋˜๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค โ€” ๋นˆ ๋‚ ์งœ๋กœ ์ธํ•ด ๋™๊ธฐํ™”๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์กฐ์šฉํ•œ ์‹คํŒจ ๋Œ€์‹  ๋ช…ํ™•ํ•œ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

 

๊ฒฐ๊ณผ

  • iOS ๋ฐ Android ์ „๋ฐ˜์— ๊ฑธ์ณ ๋‹จ์ผํ•˜๊ณ  ์ผ๊ด€๋œ ๊ฑด๊ฐ• ํ”„๋กœํ•„ โ€” ํ”Œ๋žซํผ ์ฐจ์ด๊ฐ€ ์•ฑ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์—์„œ๋Š” ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ค‘๋ณต๋˜๋Š” ๊ธฐ๊ธฐ/์•ฑ ์†Œ์Šค๋Š” ์ค‘๋ณต ์ œ๊ฑฐ๋˜์–ด, ๊ฑธ์Œ ์ˆ˜์™€ ์นผ๋กœ๋ฆฌ๊ฐ€ ๋ถ€ํ’€๋ ค์ง„ ํ•ฉ๊ณ„ ๋Œ€์‹  ํ˜„์‹ค์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ๋Ÿ‰ ์ฆ๋ถ„ ๋™๊ธฐํ™”๋Š” ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์†Œ๋ชจํ•˜๊ฑฐ๋‚˜ ๋ชจ๋ฐ”์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„๋Œ€ ๋ณด์ •๋œ ๋ฉฑ๋“ฑ์  ์“ฐ๊ธฐ๋Š” ๋ชจ๋“  ์ง€ํ‘œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋‚ ์งœ์— ๊ธฐ๋ก๋˜๊ณ , ์žฌ์‹œ๋„๊ฐ€ ๊ธฐ๋ก์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

     

๊ธฐ์ˆ  ์Šคํƒ

React Native (Expo) ยท react-native-health (HealthKit) ยท react-native-health-connect ยท NestJS ยท MongoDB ยท MongoDB Change Streams ยท moment-timezone

Apple HealthKitAndroid Health Connect๊ฑด๊ฐ• ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœReact Native
Mayank Joshi.webp

์ €์ž ์†Œ๊ฐœ

Mayank Chandra Joshi

AI & Cloud Solutions Expert at MicrocosmWorks

Building innovative AI-powered solutions and helping businesses transform through cutting-edge technology.

๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”?

๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์œ„ํ•œ ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ฌธ์˜ํ•˜์„ธ์š”.

์—ฐ๋ฝํ•˜๊ธฐ

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

A shared normalization layer converts HealthKit and Health Connect data into the same schema, allowing iOS and Android health data to be handled consistently.

The sync layer aggregates readings by source and uses the maximum daily value across overlapping sources, preventing the same activity from being counted multiple times.

After an initial 30-day history sync, the app performs lightweight one-day incremental reads every 10 minutes and when the app resumes, keeping data fresh while limiting battery and network usage.

Health samples are grouped into daily YYYY-MM-DD values using the user's local timezone, ensuring activities are assigned to the correct calendar day.

The backend upserts each daily health aggregate using identifiers such as user, device, source, and date, making repeated syncs safe without creating duplicate records.

Comments (0)

Share your thoughts and join the conversation

Leave a Comment

Your email will not be published

No comments yet

Be the first to share your thoughts!