--- category: Other tags: [auto-wikified, technical-documentation, other] title: Reactivity API description: "Reactivity API(λ°˜μ‘μ„± API)λŠ” Vue." last_updated: 2026-05-04 --- # Reactivity API ## πŸ“Œ Brief Summary Reactivity API(λ°˜μ‘μ„± API)λŠ” Vue.js μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μƒνƒœ(State)와 λ‘œμ§μ„ μΊ‘μŠν™”ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ œκ³΅λ˜λŠ” 핡심 ν•¨μˆ˜λ“€μ΄λ‹€ [1, 2]. `ref()`, `reactive()`, `computed()`, `watch` λ“±μ˜ 도ꡬλ₯Ό ν™œμš©ν•˜μ—¬ λ°˜μ‘ν˜• 데이터λ₯Ό μ„ μ–Έν•˜λ©°, 단일 μ†ŒμŠ€(Single source of truth)λ₯Ό μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈ 간에 μ†μ‰½κ²Œ κ³΅μœ ν•  수 있게 ν•œλ‹€ [2-4]. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” 단방ν–₯ 데이터 νλ¦„μ˜ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κ³  μ»΄ν¬λ„ŒνŠΈ μ™ΈλΆ€μ—μ„œ μ „μ—­ μƒνƒœλ₯Ό λ‹¨μˆœν•˜κ²Œ κ΄€λ¦¬ν•˜κ±°λ‚˜ μœ μ—°ν•œ 둜직 λͺ¨λ“ˆ(Composables)을 ꡬ성할 수 μžˆλ‹€ [2, 5, 6]. ## πŸ“– Core Content * **`ref()`와 `reactive()`λ₯Ό ν†΅ν•œ 둜컬 μƒνƒœ 관리** `ref()` ν•¨μˆ˜λŠ” λ¬Έμžμ—΄, 숫자, λΆˆλ¦¬μ–Έ, 객체 λ“± λ‹€μ–‘ν•œ 데이터 νƒ€μž…μ„ μ§€μ›ν•˜λŠ” λ‹€λͺ©μ  μƒνƒœ 관리 λ„κ΅¬λ‘œ, `.value` 속성을 톡해 데이터에 μ ‘κ·Όν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜λŠ” λͺ…ν™•ν•œ ꡬ문을 μ œκ³΅ν•œλ‹€ [1, 4]. 반면 `reactive()` ν•¨μˆ˜λŠ” 객체, λ°°μ—΄ 및 μ»¬λ ‰μ…˜ μ²˜λ¦¬μ— νŠΉν™”λ˜μ–΄ 있으며, `.value`λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  속성에 직접 μ ‘κ·Όν•  수 μžˆμ–΄ λ³΅μž‘ν•œ 데이터 ꡬ쑰λ₯Ό μ§κ΄€μ μœΌλ‘œ λ‹€λ£° 수 있게 λ•λŠ”λ‹€ [7]. * **νŒŒμƒ μƒνƒœ 생성 및 μ‚¬μ΄λ“œ μ΄νŽ™νŠΈ 처리** `computed()` APIλŠ” λ‹€λ₯Έ λ°˜μ‘ν˜• 데이터λ₯Ό 기반으둜 νŒŒμƒλœ μƒνƒœλ₯Ό μƒμ„±ν•˜λ©°, 결과값을 μΊμ‹±ν•˜κ³  μ˜μ‘΄μ„±μ΄ 변경될 λ•Œλ§Œ μž¬κ³„μ‚°λœλ‹€ [4, 8]. `watch` APIλŠ” λ°˜μ‘ν˜• κ°’μ˜ 변경을 κ΄€μ°°ν•˜κ³  API 호좜과 같은 μ‚¬μ΄λ“œ μ΄νŽ™νŠΈ(비동기 μž‘μ—… λ“±)λ₯Ό νŠΈλ¦¬κ±°ν•˜λŠ” 데 μ‚¬μš©λœλ‹€ [4, 9]. * **Reactivity APIλ₯Ό ν™œμš©ν•œ λ‹¨μˆœν•œ μ „μ—­ μƒνƒœ 관리** Reactivity APIλŠ” Vue의 μ»΄ν¬λ„ŒνŠΈ λͺ¨λΈκ³Ό λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄ 맀우 μœ μ—°ν•˜λ‹€ [3]. μ˜΅μ…˜ API(Options API)의 `data()`κ°€ λ‚΄λΆ€μ μœΌλ‘œ `reactive()`λ₯Ό μ‚¬μš©ν•˜λ“―, κ°œλ°œμžλŠ” `reactive()`λ‚˜ `ref()`λ₯Ό μ‚¬μš©ν•΄ λ°˜μ‘ν˜• 객체λ₯Ό μƒμ„±ν•œ ν›„ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 이λ₯Ό μž„ν¬νŠΈν•˜μ—¬ μ „μ—­ μƒνƒœ(Global State)처럼 κ³΅μœ ν•  수 μžˆλ‹€ [2]. * **Composition APIμ™€μ˜ 톡합 및 Vue 3.5 μ„±λŠ₯ μ΅œμ ν™”** Reactivity APIλŠ” μž¬μ‚¬μš© κ°€λŠ₯ν•œ μƒνƒœ μ €μž₯ λ‘œμ§μ„ ν•¨μˆ˜ν˜•νƒœλ‘œ μΊ‘μŠν™”ν•˜λŠ” Composable을 κ΅¬μΆ•ν•˜λŠ” 근간이 λœλ‹€ [6, 9]. λ˜ν•œ Vue 3.5 λ¦΄λ¦¬μŠ€μ—μ„œλŠ” λ°˜μ‘μ„± μ‹œμŠ€ν…œμ΄ 크게 λ¦¬νŒ©ν† λ§λ˜μ–΄ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 56% κ°μ†Œν•˜μ˜€μœΌλ©°, 크고 κΉŠμ€ λ°˜μ‘ν˜• λ°°μ—΄(Deeply reactive arrays)에 λŒ€ν•œ μž‘μ—… 속도가 μ΅œλŒ€ 10λ°°κΉŒμ§€ λΉ¨λΌμ§€λŠ” λ“± λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μœ„ν•œ μ„±λŠ₯ ν–₯상이 μ΄λ£¨μ–΄μ‘Œλ‹€ [10]. ## βš–οΈ Trade-offs & Caveats * **νƒ€μž… 적용의 ν•œκ³„μ™€ λ°˜μ‘μ„± μ—°κ²° λ‹¨μ ˆ 문제** `reactive()`λ₯Ό μ›μ‹œ κ°’(Primitive values: λ¬Έμžμ—΄, 숫자 λ“±)에 잘λͺ» μ‚¬μš©ν•˜λ©΄ λ°˜μ‘μ„±μ΄ 깨질 수 μžˆμœΌλ―€λ‘œ, μ›μ‹œ κ°’μ—λŠ” λ°˜λ“œμ‹œ `ref()`λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€ [11]. λ˜ν•œ `reactive()`둜 μƒμ„±λœ λ°˜μ‘ν˜• 객체λ₯Ό 직접 ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή(Destructuring)ν•  경우 λ°˜μ‘ν˜• 연결이 λŠμ–΄μ§€λŠ” λΆ€μž‘μš©μ΄ λ°œμƒν•œλ‹€ [11]. 이λ₯Ό λ°©μ§€ν•˜λ €λ©΄ 속성에 직접 μ ‘κ·Όν•˜κ±°λ‚˜ `toRefs()` ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ λ°˜μ‘μ„±μ„ μœ μ§€ν•΄μ•Ό ν•œλ‹€ [11]. * **λ¬΄λΆ„λ³„ν•œ μƒνƒœ λ³€μ΄λ‘œ μΈν•œ μœ μ§€λ³΄μˆ˜μ„± μ €ν•˜** Reactivity API둜 μƒμ„±ν•œ 객체λ₯Ό 직접 κ³΅μœ ν•  경우, μž„ν¬νŠΈν•œ μ–΄λ–€ μ»΄ν¬λ„ŒνŠΈμ—μ„œλ“  μƒνƒœλ₯Ό μž„μ˜λ‘œ 변이(Mutate)μ‹œν‚¬ 수 μžˆλ‹€ [12]. μ΄λŸ¬ν•œ 방식은 λ‹¨κΈ°μ μœΌλ‘œλŠ” νŽΈλ¦¬ν•˜μ§€λ§Œ μž₯κΈ°μ μœΌλ‘œλŠ” 좔적이 μ–΄λ €μ›Œ μœ μ§€λ³΄μˆ˜μ„±μ„ ν•΄μΉœλ‹€ [12]. λ”°λΌμ„œ μƒνƒœλ₯Ό 직접 μˆ˜μ •ν•˜κΈ°λ³΄λ‹€λŠ” λͺ…ν™•ν•œ μ˜λ„λ₯Ό ν‘œν˜„ν•˜λŠ” λ©”μ„œλ“œ(Action)λ₯Ό μƒνƒœ 객체와 ν•¨κ»˜ μ •μ˜ν•˜μ—¬ 쀑앙 μ§‘μ€‘μ‹μœΌλ‘œ μƒνƒœλ₯Ό λ³€κ²½ν•˜λ„λ‘ κ°•μ œν•˜λŠ” 것이 ꢌμž₯λœλ‹€ [12]. * **μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR) ν™˜κ²½μ—μ„œμ˜ 싱글톀 μƒνƒœ 유좜** μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR)을 μ‚¬μš©ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ‹¨μˆœν•œ Reactivity API둜 μ „μ—­ μƒνƒœλ₯Ό κ΅¬ν˜„ν•˜λ©΄, ν•΄λ‹Ή μŠ€ν† μ–΄κ°€ μ‹±κΈ€ν†€μœΌλ‘œ μž‘λ™ν•˜μ—¬ μ—¬λŸ¬ μš”μ²­(Request) 간에 μƒνƒœκ°€ κ³΅μœ λ˜κ±°λ‚˜ 데이터가 μœ μΆœλ˜λŠ” μ‹¬κ°ν•œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€ [3]. λ”°λΌμ„œ λŒ€κ·œλͺ¨ ν”„λ‘œλ•μ…˜ μˆ˜μ€€μ˜ μ•±μ΄λ‚˜ SSR ν™˜κ²½μ—μ„œλŠ” Pinia와 같은 곡식 μƒνƒœ 관리 라이브러리의 λ„μž…μ΄ ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λœλ‹€ [13]. --- *Last updated: 2026-05-03*