๐ Angular v20์ ์๋ก์ด ๊ธฐ๋ฅ: ์ฆ๋ถ ์ํ(hydration), Zoneless ๋ชจ๋ ๋ฐ ๊ฐ๋ฐ์ ๋๊ตฌ
Angular๋ ๊ฐ๊ฐ์ ์๋ก์ด ๋ฒ์ ์์ ๊ฐ๋ฐ์ ๊ฒฝํ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ํฅ์์์ผ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์๊ทธ๋(signal) ๊ธฐ๋ฐ ๋ฐ์ํ ๋ชจ๋ธ์ด๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR) ๊ฐ์ ๊ธฐ๋ฅ์ ์ด๋ฏธ ๋ง์ ๊ฐ๋ฐ์๋ค์๊ฒ ๊ทธ ์ ์ฉ์ฑ์ ์ ์ฆํด ๋ณด์์ต๋๋ค.
Angular v20์์๋ ํ์ธต ๋ ๋์๊ฐ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ๊ณตํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ํ๋ ์์ํฌ ํต์ฌ ์ํคํ ์ฒ ์ ๋ฐ์ ๊ฑธ์น ์กฐ์จ๋ ๊ฐ์ ์ฌํญ๋ค์ ํตํด, Angular v20์ ๋ณ๋์ ์ถ๊ฐ ์์ ์์ด๋ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ํ์ฅ ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ฌด์์ ์๋ฏธํ ๊น์?
Angular v20์์ ์ฃผ๋ชฉํ ๋งํ ์ฑ๋ฅ ์ค์ฌ์ ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ํจ๊ป ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง: ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์์ ๊ณ ์ฑ๋ฅ ์ ๊ณต
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(Server-Side Rendering)์ ์ด๊ธฐ ๋ก๋ฉ ์๋ ํฅ์๊ณผ SEO ์ต์ ํ๋ฅผ ์ํด ์ฌ์ ํ ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค. Angular๋ ์๋ฒ ์ธก์์ ํ์ด์ง ๋ด์ฉ์ ์์ฑํจ์ผ๋ก์จ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅด๊ฒ ์ฝํ ์ธ ๋ฅผ ํ์ํ๊ณ ๊ฒ์ ์์ง ์ต์ ํ์๋ ํจ๊ณผ์ ์ ๋๋ค.
Angular v16์์๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ํ(Full-Application Hydration) ๊ธฐ๋ฅ์ ๋์ ํ์ต๋๋ค. ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ ์๋ฒ ์ธก์์ ์์ฑ๋ DOM ๊ตฌ์กฐ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ์๋ฒ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ ์ ์ง๋ฉ๋๋ค. ์ํ ๊ณผ์ ์ด ์๋ค๋ฉด, ์ ์ฒด DOM์ด ํ๊ธฐ๋๊ณ ๋ค์ ์์ฑ๋์ด ์ธํฐ๋ํฐ๋ธ ์๊ฐ์ด ์ง์ฐ๋ฉ๋๋ค.
์ด๋ฌํ ์์ ์ ์ธ ๊ธฐ๋ฐ ์์์ Angular v19์์๋ ์ฆ๋ถ ์ํ(Incremental Hydration) ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํํ๋ก ์ถ์ํ์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ํตํด ํน์ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ํด๋น ์์๊ฐ ํ์ํ ๋๊น์ง ์ฐ๊ธฐํ ์ ์์ด ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ธํฐ๋ํฐ๋ธ ์๊ฐ(Time-to-Interactive)์ ๊ฐ์ ํ๋ ๋์์, ์ ์ฒด ์ํ์ ์ ์ฌํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์งํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋์ด Angular v20๋ถํฐ ์ฆ๋ถ ์ํ๊ฐ ์์ ํ๋์์ต๋๋ค. ์ด์ ์ด ๊ธฐ๋ฅ์ ํ๋ก๋์ ํ๊ฒฝ์์๋ ์์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ณต์์ ์ผ๋ก ์ง์๋ฉ๋๋ค.
ํ์ฑํ ๋ฐฉ๋ฒ:
- ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์ฑ์์ provideClientHydration
๊ณผ withIncrementalHydration()
์ ํจ๊ป ์ฌ์ฉํ์ธ์.
- hydrate on
, hydrate when
, ๋๋ hydrate never
๊ฐ์ ์ํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ํ์ฉํ๋ defer ๋ธ๋ก์ ์ฌ์ฉํ์ธ์.
์ด๋ฌํ ๋๊ตฌ๋ค์ ์ฌ์ฉ์ ์ํธ์์ฉ๋ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ํ ํ์ด๋ฐ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์๋ ๊ถํ์ ๊ฐ๋ฐ์์๊ฒ ๋ถ์ฌํ๋ฉฐ, ์ต์ ํ๋ ์ฑ๋ฅ์ ์คํํ ์ ์์ต๋๋ค.
์์ธํ ์ ๋ณด๋ Angular.dev์ ์ฆ๋ถ ์ํ ๊ฐ์ด๋์์ ํ์ธํ์ค ์ ์์ผ๋ฉฐ, ์์ผ๋ก์ ์ ๋ฐ์ดํธ ์์์ Angular ๊ณต์ YouTube ์ฑ๋์์ ๋ง๋๋ณผ ์ ์์ต๋๋ค.
์ธ๋ถ ๋ ๋ฒจ์์์ ๋ ๋๋ง ์ ๋ต ์ ์ด
์ฆ๋ถ ์ํ๋ Angular v20์์ SSR ๊ฐ์ ์ ์ผ๋ถ์ ๋ถ๊ณผํฉ๋๋ค.
Angular v19์์๋ ๋ผ์ฐํธ ๋จ์๋ก ๋ ๋๋ง ๋ชจ๋๋ฅผ ์ค์ ํ ์ ์๋ API๋ฅผ ๊ฐ๋ฐ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํํ๋ก ๋์ ํ์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ ๋ผ์ฐํธ์ ๋ํด ํด๋น ์ปดํฌ๋ํธ๊ฐ ์๋ฒ์์ ๋ ๋๋ง๋ ์ง, ์ ์ ์ผ๋ก ์์ฑ๋ ์ง, ํน์ ํด๋ผ์ด์ธํธ์์ ๋ ๋๋ง๋ ์ง๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค: - ์ ํ์ ๋ ๋๋ง์ ํตํ ์ฑ๋ฅ ํฅ์ - ๊ฐ์ ๋ SEO ๊ฒฐ๊ณผ - ์ฌ์ฉ์ ๊ฒฝํ ํฅ์ - ๋ด์ฅ๋ ๊ตญ์ ํ ์ง์ - ๊ฐ๋ฐ ์๋ฒ์์ ์ํํ ํตํฉ
์ด์ Angular v20์์๋ ์ด ๋ผ์ฐํธ ๋จ์ ๋ ๋๋ง ๋ชจ๋ ์ค์ API๋ค์ด ์์ ํ๋์์ผ๋ฉฐ, ๊ฐ๋ฐ์๋ ์ด ๊ธฐ๋ฅ์ ํ๋ก๋์ ํ๊ฒฝ์์๋ ์์ ์๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฆ, ์ง๊ธ ๋ฐ๋ก ์์ํ์ฌ Angular์ ์ ์ฐํ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ๋ง์๊ป ํ์ฉํด ๋ณด์ธ์.
Zoneless ๋ชจ๋: ๋ณํ ๊ฐ์ง์ ์ ๋ฐ์ฑ์ผ๋ก ๋์๊ฐ๋ ์๋
Angular v20์์ ๊ฐ์ฅ ๊ธฐ๋๋๋ ๊ธฐ๋ฅ ์ค ํ๋๋ Zoneless Angular๊ฐ ๊ฐ๋ฐ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋จ๊ณ๋ก ์ง์ ํ ์ ์ ๋๋ค.
Angular๋ ์ค๋ซ๋์ ZoneJS์ ์์กดํด ์์ต๋๋ค. ZoneJS๋ ๊ฑฐ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ด๋ฒคํธ ํ์ ๋ณ๊ฒฝ ๊ฐ์ง๋ฅผ ์คํํ๋ฏ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ํ ํ๋ฆฟ์ ์ค์ ๋ก ์ํฅ์ ์ฃผ์ง ์์ ์ด๋ฒคํธ์๋ ๋ถ๊ตฌํ๊ณ ๋ถํ์ํ ์ฒดํฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
Zoneless ๋ชจ๋์์๋ ๊ฐ๋ฐ์๊ฐ ์ธ์ ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๋ณ๊ฒฝ ๊ฐ์ง๊ฐ ์คํ๋ ์ง๋ฅผ ์ง์ ์ ์ดํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
- markForCheck()
๋ฅผ ์๋ ํธ์ถํ๊ฑฐ๋
- ์ํ ๋ณํ๋ฅผ ์๋์ผ๋ก ์ธ์ํ๊ณ ์
๋ฐ์ดํธ๋ฅผ ์ ํํ๊ฒ ํธ๋ฆฌ๊ฑฐํ๋ Angular Signals๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
Zoneless + Signals์ ์กฐํฉ์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค: - ๋ถํ์ํ ๋ณ๊ฒฝ ๊ฐ์ง ์ฌ์ดํด ๊ฐ์ - JavaScript ํ์ด๋ก๋ ์ถ์ - ๋๋ฒ๊น ๊ฒฝํ ๊ฐ์ - ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํธํ์ฑ ํฅ์
Zoneless ๋ชจ๋ ํ์ฑํ ๋ฐฉ๋ฒ:
1. Angular v20์ผ๋ก ์
๋ฐ์ดํธํ์ธ์.
2. ํ๋ก์ ํธ์ ์ ํ๋ฆฌ์ผ์ด์
์ค์ ์ provideZonelessChangeDetection()
์ ์ถ๊ฐํ์ธ์.
3. zone.js
์ข
์์ฑ์ ์ ๊ฑฐํ์ธ์.
์ด๋ ๊ฒ ๊ฐ๋จํ ๋จ๊ณ๋ง ๊ฑฐ์น๋ฉด Zoneless Angular ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ ๋์ ์ฑ๋ฅ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค.
์์ธํ ์ ๋ณด๋ Angular.dev ๊ณต์ ๋ฌธ์์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
Angular ๊ฐ๋ฐ์๋ฅผ ์ํ ์ฑ๋ฅ ๋ถ์ ๋๊ตฌ
๋ฌผ๋ก , ์ด๋ฌํ ๋ชจ๋ ์ฑ๋ฅ ๊ฐ์ ์ฌํญ๋ค์ ์ด๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋๋ฒ๊น ํ ์ ์๋ ๋๊ตฌ๊ฐ ์๋ค๋ฉด ์๋ฏธ๊ฐ ์์ต๋๋ค.
Chrome DevTools๋ ํ๋ ์ ์ฐจํธ์ ๊ฐ์ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ ๊ณตํ์ง๋ง, ๋ฐฉ๋ํ ์์ ์ ๋ณด ์์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Angularํ์ Chrome๊ณผ ํ๋ ฅํ์ฌ Angular ๊ฐ๋ฐ์๋ฅผ ์ํ ๋ง์ถคํ ์ฑ๋ฅ ์ถ์ ํจ๋์ ๋ง๋ค์์ต๋๋ค.
์ด ํจ๋์ Angular ๊ด๋ จ ์ด์ ๋ฐ์ดํฐ๋ง์ ํ์ํ์ฌ, ์ฌ์ฉ์์ ์ฝ๋์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ: - Angular v20๊ณผ Chrome 136 ์ด์์ ์ฌ์ฉํ์ธ์. - Chrome DevTools์์ Performance ํญ์ ์ด๊ณ ๊ธฐ๋ก์ ์์ํ์ธ์. - ๊ธฐ๋ก์ด ๋๋๋ฉด ์๋ก์ด Angular ํญ์์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ์ธ์.
์ด๋ฌํ ๊ฐ์ ์ ์ Angular ํน์ ์ ํ ๋ ๋ฉํธ๋ฆฌ๋ฅผ ๊ฐ๋ฐ์์๊ฒ ์ง์ ์ ๊ณตํจ์ผ๋ก์จ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์๊ณผ ์ต์ ํ ํฌ์ธํธ๋ฅผ ํ๋จํ ์ ์๋ ๊ทผ๊ฑฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ ์ฑ๋ฅ
Angular v20์ ์ฆ๋ถ ์ํ, ๋ผ์ฐํธ ๋จ์ ๋ ๋๋ง ๋ชจ๋, Zoneless ๋ชจ๋ ๋ฑ์ ๋ค์ํ ๊ธฐ๋ฅ์ ํตํด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์์๊ฒ ์ ์ฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํด์น์ง ์์ผ๋ฉด์๋ ๋น ๋ฅธ ๋ก๋ฉ๊ณผ ๋ฐ์์ฑ์ ๊ฐ์ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋ ๊ธฐํ๋ฅผ ์ค๋๋ค.
๊ทธ๋ผ, ๋น์ ์ ๋ฌด์์ ๊ธฐ๋ค๋ฆฌ๊ณ ๊ณ์ ๊ฐ์?
์ง๊ธ ๋ฐ๋ก Angular์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ฌ ์ฌ์ฉ์๊ฐ ์ฌ๋ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด ๋ณด์ธ์.
๋ ๋ง์ ์ ๋ณด๋ angular.dev์์ ํ์ธํ์๊ฑฐ๋ Angular ๊ณต์ YouTube ์ฑ๋์ ๊ตฌ๋ ํด ์ฃผ์ธ์.