2026๋ React Native ์๋ก์ด ์ํคํ ์ฒ: Hermes V1, ๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋์ ๋ฉด์ ์ง๋ฌธ
React Native ์๋ก์ด ์ํคํ ์ฒ ์ฌ์ธต ๋ถ์. Hermes V1 ์์ง, ๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋, TurboModules, Fabric ๋ ๋๋ฌ์ ๊ธฐ์ ์ ์ธ๋ถ์ฌํญ, ์ฑ๋ฅ ๋ฒค์น๋งํฌ, ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์ด๋, ๊ธฐ์ ๋ฉด์ Q&A๋ฅผ ํฌํจํฉ๋๋ค.

React Native์ ์๋ก์ด ์ํคํ ์ฒ๋ 2026๋ ์ ์์ ํ ์ฑ์๊ธฐ์ ๋๋ฌํ์ต๋๋ค. React Native 0.84์์ Hermes V1์ด ๊ธฐ๋ณธ ์์ง์ผ๋ก ์ฑํ๋์๊ณ , 0.85์์๋ ๋ ๊ฑฐ์ ๋ธ๋ฆฟ์ง์ ๋ชจ๋ ํ์ ์ด ์ ๊ฑฐ๋์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ํคํ ์ฒ ํ๋๊ทธ๋ ํธํ์ฑ ๋ ์ด์ด๋ฅผ ์ ๊ฒฝ ์ธ ํ์ ์์ด ๋ค์ดํฐ๋ธ์ ๊ทผ์ ํ ์ฑ๋ฅ์ ์ป์ ์ ์๊ฒ ๋์์ต๋๋ค.
์๋ก์ด ์ํคํ ์ฒ(Fabric + TurboModules + ๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋ + Hermes V1)๋ ๋ ์ด์ ์ ํ ์ฌํญ์ด ์๋๋๋ค. React Native 0.84 ์ดํ์ ๋ชจ๋ ํ๋ก์ ํธ์์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค์์ ๋ ๊ฑฐ์ ๋ธ๋ฆฟ์ง ์ฝ๋๋ฅผ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
React Native ์ํคํ ์ฒ ์คํ์ ๋ณํ
๊ธฐ์กด React Native ์ํคํ ์ฒ๋ JavaScript์ ๋ค์ดํฐ๋ธ ์ฝ๋ ์ฌ์ด์ ๋ฉ์์ง ์ ๋ฌ์ ์ํด ๋จ์ผ ์ค๋ ๋ ๋น๋๊ธฐ JSON ๋ธ๋ฆฟ์ง์ ์์กดํ์ต๋๋ค. ํฐ์น ์ด๋ฒคํธ, ๋ ์ด์์ ๊ณ์ฐ, ๋ชจ๋ ํธ์ถ ๋ฑ ๋ชจ๋ ์ํธ์์ฉ์ด ์ด ๋ณ๋ชฉ์ ํต๊ณผํด์ผ ํ์ต๋๋ค. ์๋ก์ด ์ํคํ ์ฒ๋ ์ด ํ์ดํ๋ผ์ธ์ ๊ฐ ๋ ์ด์ด๋ฅผ ์ง์ ์ ์ด๊ณ ๋๊ธฐ์ ์ธ ๋์์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
| ๋ ์ด์ด | ๊ธฐ์กด ์ํคํ ์ฒ | ์๋ก์ด ์ํคํ ์ฒ | |--------|-------------|----------------| | JS ์์ง | JavaScriptCore | Hermes V1 (๋ฐ์ดํธ์ฝ๋ + JIT) | | ๋ ๋๋ฌ | Paper (๋น๋๊ธฐ ๋ธ๋ฆฟ์ง) | Fabric (๋๊ธฐ, ๊ณต์ C++) | | ๋ค์ดํฐ๋ธ ๋ชจ๋ | ๋ธ๋ฆฟ์ง ๋ชจ๋ (JSON ์ง๋ ฌํ) | TurboModules (JSI, ์ง์ ํธ์ถ) | | ํต์ | ๋น๋๊ธฐ JSON ๋ธ๋ฆฟ์ง | JSI (JavaScript Interface) | | ์ด๊ธฐํ | ๋ธ๋ฆฟ์ง ์ด๊ธฐํ + ๋ชจ๋ ๋ฑ๋ก | ๋ธ๋ฆฟ์ง๋ฆฌ์ค (์ง์ฐ, ์จ๋๋งจ๋) |
JSI(JavaScript Interface)๊ฐ ์ด ๋ชจ๋ ๊ฒ์ ๊ธฐ๋ฐ์ ๋๋ค. ๋ชจ๋ ํธ์ถ์ JSON์ผ๋ก ์ง๋ ฌํํ์ฌ ํ์ ์ ๋ฌํ๋ ๋์ , JSI๋ C++ ํธ์คํธ ๊ฐ์ฒด๋ฅผ JavaScript์ ์ง์ ๋ ธ์ถํฉ๋๋ค. ์ด์ ์๋ JSON ์ธ์ฝ๋ฉ, ๋ธ๋ฆฟ์ง ํ์, JSON ๋์ฝ๋ฉ์ด ํ์ํ๋ TurboModule ํธ์ถ์ด ์ด์ ๋ ์ง์ ์ ์ธ ํจ์ ํธ์ถ๋ก ์๋ฃ๋ฉ๋๋ค.
Hermes V1: ๊ธฐ๋ณธ JavaScript ์์ง
Hermes V1์ 2026๋ 2์์ ์ถ์๋ React Native 0.84์์ ๊ธฐ๋ณธ ์์ง์ด ๋์์ต๋๋ค. ์ด๊ฒ์ ์ด์ Hermes ๋ฒ์ ์ ์ ์ง์ ์ ๋ฐ์ดํธ๊ฐ ์๋๋ผ ์ปดํ์ผ๋ฌ์ VM์ ์์ ํ ์ฌ์์ฑ์ ๋๋ค.
๊ฐ์ ์ฌํญ์ ๋ค ๊ฐ์ง ์์ญ์ ๊ฑธ์ณ ์์ต๋๋ค. ์๋ก์ด ๋ฐ์ดํธ์ฝ๋ ํ์์ ๊ฐ์ถ ์ฌ์์ฑ๋ ์ปดํ์ผ๋ฌ, ๊ฐ์ ๋ JIT ์ปดํ์ผ๋ฌ, Hades ๋์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ, ๊ทธ๋ฆฌ๊ณ React 19์์ ์ฌ์ฉ๋๋ ์ต์ JavaScript ํจํด์ ๋ํ ํฅ์๋ ์ง์์ ๋๋ค.
// Comparing startup and runtime metrics
// Hermes V1 bytecode is pre-compiled at build time
// No parse-compile step at runtime = faster cold starts
// Cold start comparison (production build, Pixel 8):
// Hermes V1: ~850ms TTI
// JSC: ~1200ms TTI (29% slower)
// Memory footprint (complex app, 50+ screens):
// Hermes V1: ~45MB baseline
// JSC: ~72MB baseline (38% more)
// GC pause comparison (FlatList, 500+ complex cells):
// Hermes V1 (Hades): <12ms max pause
// Old Hermes: ~45ms occasional pauses
// Result: zero dropped frames in scroll benchmarks๋์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ธ Hades๋ ํน๋ณํ ์ฃผ๋ชฉ์ ๋ฐ์ ๋งํฉ๋๋ค. ์ด์ Hermes ๋ฒ์ ์ stop-the-world ๋ฐฉ์์ GC๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ ์คํฌ๋กค ์ค์ ๊ฐํ์ ์ผ๋ก ๋์ ๋ณด์ด๋ ๋๊น์ ์ ๋ฐํ์ต๋๋ค. Hades๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ๋์์ ์ปฌ๋ ์ ์ ์คํํ์ฌ GC ์ผ์ ์ ์ง๋ฅผ 12ms ๋ฏธ๋ง์ผ๋ก ์ ์งํฉ๋๋ค. ๋ณต์กํ ์ ์ ๊ฐ์ง ๊ธด ๋ฆฌ์คํธ๋ฅผ ๋ ๋๋งํ๋ ์ฑ์์ JavaScript ์ธก ํ๋ ์ ๋๋กญ์ ๋ง์ง๋ง ์์ธ์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค.
Hermes V1์ React Native 0.84์์ WebAssembly ์ง์๋ ๋์ ํ์ต๋๋ค. Rust, C, C++๋ก ์์ฑ๋ ์ฑ๋ฅ ํฌ๋ฆฌํฐ์ปฌ ์ฝ๋๋ฅผ WASM์ผ๋ก ์ปดํ์ผํ์ฌ ์ฑ ๋ด์์ ์คํํ ์ ์์ผ๋ฉฐ, ํ๋ซํผ๋ณ ๋ฐ์ธ๋ฉ์ ์์ฑํ์ง ์๊ณ ๋ ๋๋ฐ์ด์ค ์์ AI ์ถ๋ก , ๊ณ ๋ฐ๋ ์์น ์ฐ์ฐ, ๊ธฐ์กด ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
Fabric ๋ ๋๋ฌ: ๋๊ธฐ ๋ ์ด์์๊ณผ ๋ ๋๋ง
Fabric์ iOS์ Android์์ ๊ณต์ ํ๋ C++ ์ฝ์ด๋ฅผ ๊ฐ์ง ๋ ๋๋ฌ๋ก Paper๋ฅผ ๋์ฒดํฉ๋๋ค. ํต์ฌ์ ์ธ ์ฐจ์ด์ ์ ๋ ์ด์์ ๊ณ์ฐ์ด ๋ธ๋ฆฟ์ง๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์ํ๋๋ ๊ฒ์ด ์๋๋ผ JavaScript ์ค๋ ๋์์ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค๋ ๊ฒ์ ๋๋ค.
์ด ๋๊ธฐ ๋ชจ๋ธ์ Paper์์๋ ๋ถ๊ฐ๋ฅํ๋ ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
-
๋์ ๋ ๋๋ง ์ง์: Fabric์ React 19์ ๋์ ๊ธฐ๋ฅ๊ณผ ํตํฉ๋ฉ๋๋ค. Fabric์ด ๋ ๋๋ง์ ์ค๋จํ๊ณ ์ฌ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ Transitions, Suspense ๊ฒฝ๊ณ,
useTransition์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํฉ๋๋ค. -
์ง์ C++ ๋ ์ด์์: Yoga(๋ ์ด์์ ์์ง)๊ฐ JavaScript ๋ฐํ์๊ณผ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์คํ๋ฉ๋๋ค. ํ๋ ์ค๋ฐ์ค ๊ณ์ฐ์ ๋ํ ์ง๋ ฌํ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค.
// Concurrent features work correctly with Fabric
import React, { useState, useTransition } from 'react'
import { View, Text, FlatList, TextInput, StyleSheet } from 'react-native'
type Item = { id: string; name: string; category: string }
function SearchableList({ items }: { items: Item[] }) {
const [query, setQuery] = useState('')
const [filtered, setFiltered] = useState(items)
const [isPending, startTransition] = useTransition()
const handleSearch = (text: string) => {
setQuery(text) // Urgent: update input immediately
startTransition(() => {
// Non-urgent: filter can be deferred
const result = items.filter(item =>
item.name.toLowerCase().includes(text.toLowerCase())
)
setFiltered(result)
})
}
return (
<View style={styles.container}>
<TextInput
value={query}
onChangeText={handleSearch}
placeholder="Search items..."
style={styles.input}
/>
{isPending && <Text style={styles.pending}>Filtering...</Text>}
<FlatList
data={filtered}
keyExtractor={item => item.id}
renderItem={({ item }) => (
<View style={styles.row}>
<Text>{item.name}</Text>
</View>
)}
/>
</View>
)
}
const styles = StyleSheet.create({
container: { flex: 1, padding: 16 },
input: { borderWidth: 1, borderColor: '#ccc', padding: 12, marginBottom: 8 },
pending: { color: '#888', marginBottom: 4 },
row: { padding: 12, borderBottomWidth: 1, borderBottomColor: '#eee' },
})์ด ์์ ์ useTransition ํ
์ Fabric์ด ์ค์ํ ์ด์ ๋ฅผ ๋ณด์ฌ์ค๋๋ค. Paper์์๋ ๋ ๋๋ฌ๊ฐ ์งํ ์ค์ธ ๋ ๋๋ง์ ์ค๋จํ ์ ์์๊ธฐ ๋๋ฌธ์ startTransition์ด ์๋ฌด๋ฐ ํจ๊ณผ๊ฐ ์์์ต๋๋ค. Fabric์ React 19 ๋์ ๋ชจ๋์์ ํตํฉ์ผ๋ก ์ง์ฐ ์
๋ฐ์ดํธ๊ฐ ์ค๊ณ๋ ๋๋ก ์๋ํ๋ฉฐ, ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์์ฒ ๊ฐ์ ํญ๋ชฉ์ ํํฐ๋งํ๋ฉด์๋ ํ
์คํธ ์
๋ ฅ์ ์๋ต์ฑ์ด ์ ์ง๋ฉ๋๋ค.
TurboModules์ JSI: ์ง๋ ฌํ ์ค๋ฒํค๋ ์ ๊ฑฐ
TurboModules๋ ๊ธฐ์กด์ NativeModules ์์คํ ์ ๋์ฒดํฉ๋๋ค. ์ฑ๋ฅ ์ฐจ์ด๋ JSON ์ง๋ ฌํ์ ์์ ํ ์ ๊ฑฐ์์ ๋น๋กฏ๋ฉ๋๋ค. ๋ธ๋ฆฟ์ง ๋ชจ๋ ํธ์ถ์ ๋ค์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋์ต๋๋ค: JS ๊ฐ์ฒด โ JSON.stringify โ ๋ธ๋ฆฟ์ง ํ โ JSON.parse โ ๋ค์ดํฐ๋ธ ํธ์ถ โ JSON.stringify โ ๋ธ๋ฆฟ์ง ํ โ JSON.parse โ JS ์ฝ๋ฐฑ. TurboModule ํธ์ถ์ JSI๋ฅผ ํตํ ์ง์ ์ ์ธ C++ ํจ์ ํธ์ถ์ ๋๋ค.
// TurboModule spec using the Codegen
import type { TurboModule } from 'react-native'
import { TurboModuleRegistry } from 'react-native'
export interface Spec extends TurboModule {
// Synchronous: returns immediately, no bridge round-trip
getDeviceModel(): string
getOSVersion(): string
getBatteryLevel(): number
// Asynchronous: for operations that genuinely need async
getStorageUsage(): Promise<{ used: number; total: number }>
}
export default TurboModuleRegistry.getEnforcing<Spec>('DeviceInfo')// Native Android implementation of the TurboModule
package com.app.modules
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReadableMap
import com.facebook.react.bridge.WritableNativeMap
import com.facebook.react.module.annotations.ReactModule
@ReactModule(name = "DeviceInfo")
class DeviceInfoModule(reactContext: ReactApplicationContext) :
NativeDeviceInfoSpec(reactContext) {
// Synchronous via JSI - no bridge, no JSON, no queue
override fun getDeviceModel(): String {
return android.os.Build.MODEL
}
override fun getOSVersion(): String {
return "Android ${android.os.Build.VERSION.RELEASE}"
}
override fun getBatteryLevel(): Double {
val manager = reactApplicationContext
.getSystemService(android.content.Context.BATTERY_SERVICE)
as android.os.BatteryManager
return manager.getIntProperty(
android.os.BatteryManager.BATTERY_PROPERTY_CAPACITY
).toDouble()
}
override fun getStorageUsage(
promise: com.facebook.react.bridge.Promise
) {
val stat = android.os.StatFs(
android.os.Environment.getDataDirectory().path
)
val map = WritableNativeMap().apply {
putDouble("used", (stat.totalBytes - stat.availableBytes).toDouble())
putDouble("total", stat.totalBytes.toDouble())
}
promise.resolve(map)
}
override fun getName(): String = "DeviceInfo"
}ํต์ฌ ์ฌํญ์ getDeviceModel(), getOSVersion(), getBatteryLevel()์ด ๋๊ธฐ์ ์ด๋ผ๋ ์ ์
๋๋ค. JavaScript ์ค๋ ๋๊ฐ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ง์ ํธ์ถํ๊ณ ๋์ผํ ํฑ์์ ๋ฐํ ๊ฐ์ ๋ฐ์ต๋๋ค. Promise๋ ์ฝ๋ฐฑ๋ ๋ธ๋ฆฟ์ง ์๋ณต๋ ์์ต๋๋ค. ์ด๊ฒ์ JSI์ ์ํด์๋ง ๊ฐ๋ฅํฉ๋๋ค.
๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋: ๋ฌด์์ด ์ ๊ฑฐ๋์๊ณ ์ ์ค์ํ๊ฐ
๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋๋ React Native 0.73์์ ๋์ ๋์ด 0.74์์ ๊ธฐ๋ณธ๊ฐ์ด ๋์์ต๋๋ค. Fabric๊ณผ TurboModules๊ฐ ์ฑํ๋ ํ์๋ ๊ธฐ์กด ๋ธ๋ฆฟ์ง๋ ๊ธ๋ก๋ฒ ์ด๋ฒคํธ ์ด๋ฏธํฐ, ํ์ด๋จธ, ์๋ฌ ํธ๋ค๋ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ ์ ์ด๊ธฐํ๋์์ต๋๋ค. ๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋๋ ์ด๋ฌํ ๋๋จธ์ง ์์คํ ์ JSI ๊ธฐ๋ฐ ๊ตฌํ์ผ๋ก ์ด์ ํฉ๋๋ค.
์ค์ง์ ์ธ ์ํฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ ๋น ๋ฅธ ์์: ๋ธ๋ฆฟ์ง ์ด๊ธฐํ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค. ๋ฐํ์์ ์ง์ฐ ๋ก๋ฉ์ ํตํด ์ฑ์ด ์ค์ ๋ก ์ฌ์ฉํ๋ ๊ฒ๋ง ๋ถํธ์คํธ๋ฉํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ฐ์: ์์ ์ ๋ธ๋ฆฟ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ํ ๋น๋์ง ์์ต๋๋ค.
- ๊น๋ํ ์๋ฌ ํธ๋ค๋ง: ์๋ฌ ๋ฐ์ด๋๋ฆฌ์ ๊ธ๋ก๋ฒ ์๋ฌ ํธ๋ค๋ฌ๊ฐ ๋ธ๋ฆฟ์ง ํด๋ฐฑ ์์ด ์๋ก์ด ์ํคํ ์ฒ๋ฅผ ํตํด ์๋ํฉ๋๋ค.
React Native 0.82์์ ๊ธฐ์กด ๋ธ๋ฆฟ์ง๊ฐ ์๊ตฌ์ ์ผ๋ก ๋นํ์ฑํ๋์์ต๋๋ค. 2026๋ 4์์ ์ถ์๋ React Native 0.85์์๋ ๋ธ๋ฆฟ์ง ๊ด๋ จ ๋ชจ๋ ์ฝ๋๊ฐ ์ฝ๋๋ฒ ์ด์ค์์ ์ ๊ฑฐ๋์์ต๋๋ค. ํด๋ฐฑ ๊ฒฝ๋ก๋ ์กด์ฌํ์ง ์์ต๋๋ค.
ํ๋ก๋์ ๋ง์ด๊ทธ๋ ์ด์ : ์ค์ ์ฑ๋ฅ ๋ฒค์น๋งํฌ
๊ธฐ์กด ์ํคํ ์ฒ์์ ์๋ก์ด ์ํคํ ์ฒ๋ก์ ํ๋ก๋์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฃผ์ ๋ฉํธ๋ฆญ์์ ์ผ๊ด๋ ๊ฐ์ ์ ๋ณด์ฌ์ค๋๋ค.
| ๋ฉํธ๋ฆญ | ๊ธฐ์กด ์ํคํ ์ฒ | ์๋ก์ด ์ํคํ ์ฒ | ๊ฐ์ | |--------|-------------|----------------|------| | ์ฝ๋ ์คํํธ (TTI) | 1.4์ด | 0.8์ด | 43% ํฅ์ | | ํ๋ฉด ์ ํ | 180ms | 110ms | 39% ํฅ์ | | ๋ฉ๋ชจ๋ฆฌ ๊ธฐ์ค์ | 89MB | 66MB | 26% ๊ฐ์ | | JSโ๋ค์ดํฐ๋ธ ํธ์ถ | ~5ms (๋น๋๊ธฐ) | ~0.1ms (๋๊ธฐ) | 40๋ฐฐ ํฅ์ | | GC ์ต๋ ์ผ์ ์ ์ง | 45ms | 12ms | 73% ๋จ์ถ | | FlatList ์คํฌ๋กค (1000๊ฐ ํญ๋ชฉ) | ๊ฐํ์ ๋๊น | ๋ถ๋๋ฌ์ด 60fps | ํ๋ ์ ๋๋กญ ์์ |
์ฌ์ฉ์ ๋๋ฉด ํ์ง์ ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น๋ ๊ฐ์ ์ GC ์ผ์ ์ ์ง์ ๋จ์ถ์ ๋๋ค. Hades๋ ์ปฌ๋ ์ ์ผ์ ์ ์ง๋ฅผ 1ํ๋ ์ ์์ฐ(60fps์์ 16.6ms) ๋ฏธ๋ง์ผ๋ก ์ ์งํ์ฌ, ๋ณต์กํ React Native ์ฑ์์ ๊ฐ์ฅ ํํ ๋์ ๋ณด์ด๋ ๋๊น์ ์์ธ์ ์ ๊ฑฐํฉ๋๋ค.
2026๋ ์ํ๊ณ ํธํ์ฑ
์ํ๊ณ๋ ์๋ก์ด ์ํคํ ์ฒ์ ์์ ํ ์๋ ดํ์ต๋๋ค. Expo SDK 55 ์ดํ ๋ฒ์ ์ ์๋ก์ด ์ํคํ ์ฒ์์๋ง ์คํ๋๋ฉฐ, ๋นํ์ฑํ ์ต์ ์ด ์์ต๋๋ค. ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธํ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- React Navigation 7.2 ์ด์: ๋ค์ดํฐ๋ธ ์คํ ์คํฌ๋ฆฐ์ ํฌํจํ ์์ ํ Fabric ์ง์
- Reanimated 3.5 ์ด์: React Native 0.85์ ๊ณต์ ์ ๋๋ฉ์ด์ ๋ฐฑ์๋
- Gesture Handler 2.16 ์ด์: JSI ๊ธฐ๋ฐ ์ง์ ์ ์ค์ฒ ์ธ์
- Vision Camera 4.0 ์ด์: JSI๋ฅผ ํตํ ํ๋ ์ ์ฒ๋ฆฌ
- Detox: ์๋ก์ด ์ํคํ ์ฒ ํธํ E2E ํ ์คํธ
Expo๋ฅผ ์ฌ์ฉํ๋ ํ์ ๊ฒฝ์ฐ, npx create-expo-app์ ์๋ก์ด ์ํคํ
์ฒ๊ฐ ๊ธฐ๋ณธ์ผ๋ก ํ์ฑํ๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค. ๋ณ๋์ ์ค์ ์ด ํ์ํ์ง ์์ต๋๋ค.
React Native 0.75 ์ดํ ๋ฒ์ ์ ์ฑ์ ๋ง์ด๊ทธ๋ ์ด์
์ด ํ์์
๋๋ค. ๊ธฐ์กด ๋ธ๋ฆฟ์ง๋ 0.82 ์ด์์์ ์๊ตฌ์ ์ผ๋ก ์ ๊ฑฐ๋์์ต๋๋ค. TurboModule spec ์์ด NativeModules๋ฅผ ์ง์ ์ฌ์ฉํ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์
๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค.
๊ธฐ์ ๋ฉด์ ์ง๋ฌธ: React Native ์๋ก์ด ์ํคํ ์ฒ
๋ค์ ์ง๋ฌธ๋ค์ 2026๋ ์๋์ด React Native ๋ฉด์ ์์ ์์ฃผ ์ถ์ ๋ฉ๋๋ค. ๊ฐ ๋ต๋ณ์ ์คํํ/์๋์ด ๋ ๋ฒจ์์ ๊ธฐ๋๋๋ ๊น์ด๋ฅผ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
Q1: ๊ธฐ์กด ๋ธ๋ฆฟ์ง์ JSI์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ์ญ์์ค. JSI๊ฐ ๋๊ธฐ์ ๋ค์ดํฐ๋ธ ํธ์ถ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋ธ๋ฆฟ์ง๋ JS์์ ๋ค์ดํฐ๋ธ๋ก์ ๋ชจ๋ ๋ฉ์์ง๋ฅผ JSON์ผ๋ก ์ง๋ ฌํํ๊ณ ๋น๋๊ธฐ ํ์ ๋ฃ์ ํ ๋ค์ดํฐ๋ธ ์ธก์์ ์ญ์ง๋ ฌํํ์ต๋๋ค. JSI(JavaScript Interface)๋ C++ ํธ์คํธ ๊ฐ์ฒด๋ฅผ JavaScript VM์ ์ง์ ๋ ธ์ถํฉ๋๋ค. JSI๋ฅผ ํตํด ๋ฑ๋ก๋ ๋ค์ดํฐ๋ธ ํจ์๋ ์ง๋ ฌํ๋ ํ์ ์์ด ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ธ๋ผ์ธ์ผ๋ก ์คํํ๋ ์ผ๋ฐ JavaScript ํจ์๋ก ๋ํ๋ฉ๋๋ค. JSI๋ ์ค๊ฐ ๋ฉ์์ง ํ ์์ด ๋์ผํ ์ค๋ ๋ ์ปจํ ์คํธ์์ ์๋ํ๋ฏ๋ก ๋๊ธฐ ํธ์ถ์ด ๊ฐ๋ฅํฉ๋๋ค.
Q2: Fabric ๋ ๋๋ฌ๋ Paper๊ฐ ํด๊ฒฐํ ์ ์์๋ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๊น?
Paper๋ ๋ธ๋ฆฟ์ง๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ๋ ๋๋งํ์ฌ React ๋์ ๊ธฐ๋ฅ์ ์ง์ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ์ต๋๋ค. Paper๋ ์งํ ์ค์ธ ๋ ๋ ํธ๋ฆฌ๋ฅผ ์ค๋จํ ์ ์์๊ธฐ ๋๋ฌธ์ startTransition ํธ์ถ์ด ํจ๊ณผ๊ฐ ์์์ต๋๋ค. Fabric์ ๊ณต์ C++ ์ฝ๋๋ก ๋ ๋๋ง์ ๊ตฌํํ๊ณ React 19์ ๋ฆฌ์ปจ์ค๋ฌ์ ์ง์ ํตํฉํ์ฌ ๋์ ๋ ๋๋ง, Suspense, Transitions๋ฅผ ์ง์ํฉ๋๋ค. Yoga๋ฅผ ํตํ ๋ ์ด์์ ๊ณ์ฐ๋ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ๋๊ธฐ์ ์ผ๋ก ์ํ๋์ด ํฌ๋ก์ค ๋ธ๋ฆฟ์ง ๋ ์ด์์์ ์ง์ฐ ์๊ฐ์ด ์ ๊ฑฐ๋ฉ๋๋ค.
Q3: ์๋ก์ด ์ํคํ ์ฒ์ Hermes๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋ค๋ฅธ ์์ง์ ์ฌ์ฉํ ์ ์์ต๋๊น?
์๋ก์ด ์ํคํ ์ฒ๋ JSI์ ์์กดํ๋ฉฐ, JSI๋ JavaScript ์์ง์ด C++ ํธ์คํธ ๊ฐ์ฒด ๋ฑ๋ก์ ์ง์ํ ๊ฒ์ ์๊ตฌํฉ๋๋ค. Hermes๋ ์ฒ์๋ถํฐ JSI ํตํฉ์ ์ผ๋์ ๋๊ณ ์ค๊ณ๋์์ต๋๋ค. JavaScriptCore๋ ์ด๋ก ์ ์ผ๋ก JSI๋ฅผ ์ง์ํ ์ ์์ง๋ง, ๊ณต์ ๊ตฌํ๊ณผ ํ ์คํธ๋ Hermes๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์ด ์์ต๋๋ค. Hermes V1์ ๋ฐ์ดํธ์ฝ๋ ์ฌ์ ์ปดํ์ผ(๋ฐํ์ ํ์ฑ ์ ๊ฑฐ), Hades ๋์ GC(12ms ๋ฏธ๋ง ์ผ์ ์ ์ง), WebAssembly ์ง์์ ์ถ๊ฐ๋ก ์ ๊ณตํ๋ฉฐ, ์ด๋ React Native์ JSC ํตํฉ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Q4: TurboModules๋ ๊ฐ๋ฐ์ ๊ด์ ์์ ๊ธฐ์กด NativeModules API์ ์ด๋ป๊ฒ ๋ค๋ฆ ๋๊น?
TurboModules๋ ๋น๋ ์ ํ์
์์ ํ ๋ค์ดํฐ๋ธ ๋ฐ์ธ๋ฉ์ ์์ฑํ๋ Codegen spec(TurboModule์ ํ์ฅํ๋ TypeScript ์ธํฐํ์ด์ค)์ด ํ์ํฉ๋๋ค. ๊ธฐ์กด NativeModules๋ ํ์
๊ฒ์ฌ ์๋ ๋ฐํ์ ๋ฆฌํ๋ ์
์ ์ฌ์ฉํ์ต๋๋ค. TurboModules๋ ๋๊ธฐ์ ๋ฐํ ๊ฐ(Promise๋ฟ๋ง ์๋๋ผ), ์ง์ฐ ์ด๊ธฐํ(๋ชจ๋์ ์ฒ์ ์ ๊ทผ ์์๋ง ๋ก๋), JSON ์ง๋ ฌํ ์๋ ์ง์ JSI ํธ์ถ์ ์ง์ํฉ๋๋ค. ๊ฐ๋ฐ์๋ TypeScript spec์ ์์ฑํ๊ณ , Codegen์ ์คํํ๋ฉฐ, ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํฉ๋๋ค.
Q5: ๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋๋ฅผ ์ค๋ช ํ๊ณ , Fabric๊ณผ TurboModules๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋น๊ตํ์ฌ ๋ฌด์์ด ์ ๊ฑฐ๋๋์ง ์ค๋ช ํ์ญ์์ค.
Fabric๊ณผ TurboModules๋ฅผ ์ฑํํ ํ์๋ ๊ธฐ์กด ๋ธ๋ฆฟ์ง๋ ๊ธ๋ก๋ฒ ์ด๋ฒคํธ ์ด๋ฏธํฐ, ํ์ด๋จธ, ์๋ฌ ํธ๋ค๋ง, ๊ธฐํ ๋ฐํ์ ์ธํ๋ผ์คํธ๋ญ์ฒ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ ์ ์ด๊ธฐํ๋์์ต๋๋ค. ๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋๋ ์ด๋ฌํ ๋๋จธ์ง ๋ธ๋ฆฟ์ง ์์กด ์์คํ ์ JSI ๊ธฐ๋ฐ ๊ตฌํ์ผ๋ก ๋์ฒดํฉ๋๋ค. ๋ธ๋ฆฟ์ง ์ด๊ธฐํ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํ๊ณ ๊ธฐ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๋ฉฐ ์ ์ฒด ๋ฐํ์์ด JSI๋ฅผ ํตํด ์๋ํ๋๋ก ๋ณด์ฅํฉ๋๋ค. React Native 0.85 ์ดํ, ๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋๊ฐ ์ ์ผํ ์๋ ๋ชจ๋์ ๋๋ค.
์ด๋ฌํ ์ง๋ฌธ์ ์๋ํ๋ ์ฝ๋ ์์ ์ ํจ๊ป ์ฐ์ตํ๋ฉด ๊ฐ๋ ์ ์ดํด์ ์ค์ฉ์ ๊ธฐ์ต๋ ฅ ๋ชจ๋ ๊ฐํ๋ฉ๋๋ค.
React Native ๋ฉด์ ์ค๋น๊ฐ ๋์ จ๋์?
์ธํฐ๋ํฐ๋ธ ์๋ฎฌ๋ ์ดํฐ, flashcards, ๊ธฐ์ ํ ์คํธ๋ก ์ฐ์ตํ์ธ์.
๊ฒฐ๋ก
- Hermes V1์ React Native 0.84 ์ด์์์ ์ฝ๋ ์คํํธ 29% ํฅ์, ๋ฉ๋ชจ๋ฆฌ 38% ๊ฐ์, 12ms ๋ฏธ๋ง์ GC ์ผ์ ์ ์ง๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํฉ๋๋ค
- Fabric์ Paper๊ฐ ๊ฒฐ์ฝ ์ง์ํ ์ ์์๋ React 19 ๋์ ๊ธฐ๋ฅ(Transitions, Suspense)์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค
- TurboModules๋ JSON ์ง๋ ฌํ๋ฅผ ์ ๊ฑฐํ์ฌ ์ง์ JSI ํธ์ถ์ ํตํด JSโ๋ค์ดํฐ๋ธ ํธ์ถ์ 40๋ฐฐ ํฅ์์ํต๋๋ค
- ๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋๋ ๋ง์ง๋ง ๋ธ๋ฆฟ์ง ์์กด์ฑ์ ์ ๊ฑฐํ๋ฉฐ, React Native 0.85์๋ ๋ธ๋ฆฟ์ง ์ฝ๋๊ฐ ์ ํ ๋จ์ ์์ง ์์ต๋๋ค
- ์ํ๊ณ๋ ์์ ํ ํธํ๋ฉ๋๋ค. Expo SDK 55 ์ด์, React Navigation 7.2 ์ด์, Reanimated 3.5 ์ด์ ๋ฐ ๋ชจ๋ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ก์ด ์ํคํ ์ฒ๋ง์ ์ง์ํฉ๋๋ค
- ๋ฉด์ ์ค๋น๋ JSI ๋ฉ์ปค๋์ฆ, Fabric๊ณผ Paper์ ํธ๋ ์ด๋์คํ, TurboModule Codegen ์ํฌํ๋ก์ฐ, ๋ธ๋ฆฟ์ง๋ฆฌ์ค ๋ชจ๋ ๋ฐํ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ง์คํด์ผ ํฉ๋๋ค
ํ๊ทธ
๊ณต์
๊ด๋ จ ๊ธฐ์ฌ

React Native์ TypeScript 2026: ํ์ ์์ ํ ์ํคํ ์ฒ์ ๋ฉด์ ์ง๋ฌธ
2026๋ React Native์์ TypeScript๋ฅผ ํ์ฉํ ํ์ ์์ ์ํคํ ์ฒ๋ฅผ ๋ค๋ฃน๋๋ค. Codegen, TurboModules, Strict TypeScript API, ํ์ ์์ ๋ด๋น๊ฒ์ด์ , ๋ฉด์ ์ง๋ฌธ์ ์ฝ๋ ์์ ์ ํจ๊ป ์ค๋ช ํฉ๋๋ค.

React Native 0.85 (2026): ์๋ก์ด ์ ๋๋ฉ์ด์ ๋ฐฑ์๋, ์๊ฒฉํ TypeScript API ๋ฐ ๋ฉด์ ์ง๋ฌธ
React Native 0.85์ ๊ณต์ ์ ๋๋ฉ์ด์ ๋ฐฑ์๋, ํฌ์คํธ ๋ธ๋ฆฌ์ง ์ํคํ ์ฒ, Metro TLS์ ๋ํด ์ฝ๋ ์์ ์ ๋ฉด์ ์ง๋ฌธ์ ํตํด ์ฌ์ธต ๋ถ์ํฉ๋๋ค.

Expo Router๋ก ๋ฐฐ์ฐ๋ React Native ํ์ผ ๊ธฐ๋ฐ ๋ด๋น๊ฒ์ด์ ์๋ฒฝ ๊ฐ์ด๋
Expo Router๋ฅผ ํ์ฉํ React Native ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ์ฒด๊ณ์ ์ผ๋ก ๋ค๋ฃน๋๋ค. ๋ ์ด์์, ๋์ ๋ผ์ฐํธ, ํ์ ์์ ๋ด๋น๊ฒ์ด์ , ํญ, ๋ชจ๋ฌ, ๋ฏธ๋ค์จ์ด ๋ฑ 2026๋ ์ต์ ํจํด์ ์ข ํฉ์ ์ผ๋ก ์ค๋ช ํฉ๋๋ค.