# [[Concurrent Rendering in React 18+|Concurrent Rendering in React 18+]] ## ๐Ÿ“Œ Brief Summary React 18+์˜ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง(Concurrent Rendering)์€ React๊ฐ€ ๋ Œ๋”๋ง ์ž‘์—…์„ ์ผ์‹œ ์ค‘์ง€, ์ค‘๋‹จ ๋ฐ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค [1]. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์—…๋ฐ์ดํŠธ ๋ฐœ์ƒ ์‹œ๊ธฐ์™€ ๋ฐฉ์‹์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์„ฑ์„ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ๋„ ํ™”๋ฉด์ด ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ๋” ๋ถ€๋“œ๋Ÿฝ๊ณ  ๋ฐ˜์‘์„ฑ ๋†’์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2]. ## ๐Ÿ“– Core Content **๋™์‹œ์„ฑ ๋ Œ๋”๋ง์˜ ๊ฐœ๋…๊ณผ ์ด์ ** * React 18๋ถ€ํ„ฐ ๋„์ž…๋œ ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ์€ ๋ Œ๋”๋ง ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋™์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋ Œ๋”๋ง ์ž‘์—…์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ , ๋А๋ฆฐ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ์—…๋ฐ์ดํŠธ ๋“ฑ์„ ์ง€์—ฐ์‹œํ‚ค๋Š” ๋™์‹œ์— ํด๋ฆญ์ด๋‚˜ ํƒ€์ดํ•‘๊ณผ ๊ฐ™์€ ์ค‘์š”ํ•œ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์— ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐ˜์‘ํ•˜๋„๋ก ๋ Œ๋”๋ง์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1]. ์ด๋Š” ์ตœ์‹  React ๋ฒ„์ „์˜ ๊ธฐ๋ณธ ๋™์ž‘์œผ๋กœ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค [1]. **์ฃผ์š” ๋™์‹œ์„ฑ ํ›…(Hooks)** * **`useTransition`:** ํŠน์ • ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ '๊ธด๊ธ‰ํ•˜์ง€ ์•Š์€(non-urgent)' ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํ›…์ž…๋‹ˆ๋‹ค [3]. ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํ‘œ์‹œ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์„ธํŠธ ํ•„ํ„ฐ๋ง, ๋ณต์žกํ•œ ์ฐจํŠธ ๋ฐ ํ…Œ์ด๋ธ” ๋ Œ๋”๋ง๊ณผ ๊ฐ™์€ ๋ฌด๊ฑฐ์šด ์ž‘์—…์ด ์‚ฌ์šฉ์ž์˜ ์ฆ‰๊ฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ์ฐจ๋‹จํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [3]. ์ œ๊ณต๋˜๋Š” `isPending` ์ƒํƒœ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ๋‚˜ ์Šค์ผˆ๋ ˆํ†ค UI๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. * **`useDeferredValue`:** `useTransition`์ด ์—…๋ฐ์ดํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์‹œ์ ์„ ์ œ์–ดํ•œ๋‹ค๋ฉด, `useDeferredValue`๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๊ฐ’์„ *์ฝ๊ณ  ์ ์šฉํ•˜๋Š” ์‹œ์ *์„ ์ง€์—ฐ์‹œํ‚ต๋‹ˆ๋‹ค [4]. ๊ฒ€์ƒ‰์ฐฝ์˜ ์ž…๋ ฅ ๊ฐ’ ๋“ฑ UI ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•˜๋ฉด์„œ, ํŒŒ์ƒ๋˜๋Š” ๋ฌด๊ฑฐ์šด ๊ณ„์‚ฐ ๋กœ์ง์€ ์•ฝ๊ฐ„ ์ง€์—ฐ์‹œ์ผœ ์‹ค์‹œ๊ฐ„ ํผ์ด๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ์˜ ํ™”๋ฉด ๋Š๊น€(Jank) ํ˜„์ƒ์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค [4]. **์‚ฌ์šฉ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ ์ง€์›** * ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ์€ ์•ฑ์˜ ๋ชจ๋“  ๊ณณ์ด ์•„๋‹Œ '์ƒํ˜ธ์ž‘์šฉ์ด ์ง‘์ค‘๋œ ๋ทฐ'์— ์ „๋žต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4]. ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ๋™์•ˆ ๋Œ€์ฒด UI๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด `Suspense`์™€ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [4]. * ์ฃผ์˜ํ•  ์ ์€ ๊ตฌ์‹ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜๋Š” ํŒจํ„ด(์˜ˆ: ๊ฐ€๋“œ ๋กœ์ง์ด ์—†๋Š” ์˜ค๋ž˜๋œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ)๊ณผ ํ˜ผ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [4]. * ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์€ ์—ฐ์‚ฐ ์†๋„ ์ž์ฒด๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋†’์ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž‘์—…์ด ๊ณ„์†๋˜๋Š” ๋™์•ˆ UI๊ฐ€ ๋ฐ˜์‘ํ•˜๋„๋ก ์œ ์ง€ํ•จ์œผ๋กœ์จ '์ฒด๊ฐ ์†๋„(perceived speed)'๋ฅผ ์šฐ์„ ์‹œํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [4]. * 2025๋…„ ๊ธฐ์ค€ Next.js(App Router), Remix, Vite + React 18 ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ํ’€์Šคํƒ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์„ ์™„์ „ํžˆ ํ†ตํ•ฉํ•˜์—ฌ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [5]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts - [[useTransition|useTransition]] - ์—ฐ๊ฒฐ ์ด์œ : ๋™์‹œ์„ฑ ๋ Œ๋”๋ง ํ™˜๊ฒฝ์—์„œ ํŠน์ • ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ '๊ธด๊ธ‰ํ•˜์ง€ ์•Š์€ ์ž‘์—…'์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ•ต์‹ฌ ํ›…์ž…๋‹ˆ๋‹ค [3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ƒํƒœ ์—…๋ฐ์ดํŠธ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚ฎ์ถ”์–ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ฐจ๋‹จ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์ œ์–ด ๋ฐฉ๋ฒ•. - [[useDeferredValue|useDeferredValue]] - ์—ฐ๊ฒฐ ์ด์œ : ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋†’์€ ๊ฐ’์˜ ํ™”๋ฉด ์ ์šฉ ์‹œ์ ์„ ๋Šฆ์ถ”์–ด UI์˜ ์ฆ‰๊ฐ์ ์ธ ์ฒด๊ฐ ๋ฐ˜์‘์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‚ฌ์šฉ์ž ์ž…๋ ฅ(ํƒ€์ดํ•‘ ๋“ฑ)์˜ ์ฆ‰๊ฐ์ ์ธ ๋ฐ˜์˜๊ณผ ๋ฌด๊ฑฐ์šด ํŒŒ์ƒ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง ๊ฐ„์˜ ์ฒ˜๋ฆฌ ์‹œ์ ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜. - Suspense - ์—ฐ๊ฒฐ ์ด์œ : ๋™์‹œ์„ฑ ํ›…(`useTransition` ๋“ฑ)๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋‚˜ ์ง€์—ฐ๋œ ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋Œ€์ฒด UI(Fallback UI)๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๊ณผ์ •์—์„œ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์„ ํ™œ์šฉํ•œ ๋ถ€๋“œ๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ์„ค๊ณ„ ๋ฐฉ์‹. ### Deeper Research Questions - React์˜ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง ์—”์ง„์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ธด๊ธ‰ ์—…๋ฐ์ดํŠธ์™€ ์ง€์—ฐ ์—…๋ฐ์ดํŠธ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์–ด๋–ค ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š”๊ฐ€? - `useTransition`๊ณผ `useDeferredValue`๋ฅผ ๋ณต์žกํ•œ ๋‹จ์ผ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ Œ๋”๋ง ์—ฃ์ง€ ์ผ€์ด์Šค๋‚˜ ์„ฑ๋Šฅ์  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ๊ตฌ์‹ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Context API๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋“ฑ)๊ฐ€ React 18์˜ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง ํŒจํ„ด์„ ๋ฐฉํ•ดํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ •ํ™•ํ•œ ๊ธฐ์ˆ ์  ์›๋ฆฌ(์˜ˆ: Tearing ํ˜„์ƒ)๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์˜ ๋„์ž…์ด ๋ธŒ๋ผ์šฐ์ €์˜ INP(Interaction to Next Paint)์™€ TBT(Total Blocking Time) ์ง€ํ‘œ ์ตœ์ ํ™”์— ์ˆ˜ํ•™์ ์œผ๋กœ ์–ด๋–ค ์—ฐ๊ด€์„ฑ์„ ๊ฐ€์ง€๋Š”๊ฐ€? - ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์œผ๋กœ ์ธํ•ด ๋ Œ๋”๋ง ํŠธ๋ฆฌ๊ฐ€ ์ค‘๋‹จ(Interrupt)๋˜๊ณ  ํ๊ธฐ๋œ ํ›„ ๋‹ค์‹œ ์‹œ์ž‘๋  ๋•Œ, ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ React์˜ ๋‚ด๋ถ€ ์ตœ์ ํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts - **Implementation:** ๋ผ์ด๋ธŒ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์ฐฝ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์„ธํŠธ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‹œ `useTransition`๊ณผ `useDeferredValue`๋ฅผ ์ ๊ทน ํ™œ์šฉํ•˜์—ฌ ์ž…๋ ฅ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ํ™”๋ฉด ๋ฉˆ์ถค(Jank) ๋ฐฉ์ง€ [3, 4]. - **System Design:** ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์‹œ์„ฑ ๋ Œ๋”๋ง์ด ํ™œ์„ฑํ™”๋œ Next.js App Router๋‚˜ Remix์™€ ๊ฐ™์€ ์ตœ์‹  React ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋ฐ˜์‘์„ฑ ์ด์ ์„ ๊ทน๋Œ€ํ™” [5]. - **Operation / Maintenance:** ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜๋Š” ์š”์†Œ(์˜ค๋ž˜๋œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๋“ฑ)๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๊ณ , ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ์ด ์ถฉ๋Œ ์—†์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์ง€๋ณด์ˆ˜ ํ™˜๊ฒฝ ๊ฐœ์„  [4]. - **Learning Path:** ์ „ํ†ต์ ์ธ '๋™๊ธฐ์  ๋ Œ๋”๋ง(Synchronous Rendering)' ๋ชจ๋ธ์ด ๊ฐ€์ง„ ํ•œ๊ณ„๋ฅผ ๋ฒ—์–ด๋‚˜, ์ž‘์—… ๋‹จ์œ„์˜ ์ผ์‹œ ์ค‘์ง€์™€ ์žฌ๊ฐœ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ Œ๋”๋ง ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ๊ฐœ๋ฐœ์ž์˜ ์‚ฌ๊ณ  ๋ฐฉ์‹์„ ์ „ํ™˜. - **My Project Relevance:** ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์„œ๋น„์Šค ๋‚ด ๋ฌด๊ฑฐ์šด ๋Œ€์‹œ๋ณด๋“œ ํ™”๋ฉด์ด๋‚˜ ๋ณต์žกํ•œ ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ฒด๊ฐํ•˜๋Š” '์ธ์‹ ์†๋„(Perceived Speed)'๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์„  ์ง€ํ‘œ๋กœ ํ™œ์šฉ [3, 4]. ### Adjacent Topics - [[React Server Components|React Server Components]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋™์‹œ์„ฑ ๋ Œ๋”๋ง๊ณผ ํ•จ๊ป˜ Next.js App Router ํ™˜๊ฒฝ์˜ ํ•ต์‹ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ถ•์„ ์ด๋ฃจ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ ์ธก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค์„ ํš๊ธฐ์ ์œผ๋กœ ์ค„์—ฌ์ฃผ๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์›๋ฆฌ ํƒ๊ตฌ [5, 6]. - Core Web Vitals (INP/TBT) - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋™์‹œ์„ฑ ๋ Œ๋”๋ง ๊ธฐ๋Šฅ ์ ์šฉ์ด ์›น์˜ ํ•ต์‹ฌ ๋ฐ˜์‘์„ฑ ์ง€ํ‘œ์ธ INP ๋ฐ TBT๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•˜๋Š”์ง€ ์‹ค์ œ ์„ฑ๋Šฅ ์ธก์ • ํˆด(Chrome DevTools, Lighthouse) ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ณ„ํ•˜์—ฌ ์กฐ์‚ฌ [7-9]. --- *Last updated: 2026-04-30*