Angular 8๋ฒ์ ์ด ์ถ์ ๋์๋ค. ์ด๋ฒ ๋ฒ์ ผ์ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ ์๊ฐ์ ๋จ์ถ์ํค๊ณ , CLI์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์๋ก์ด API๋ฅผ ์ ๊ณตํ๋ค. ํ์๋ ๊ธฐ์กด Angular 6์์ 8๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋๋ฅผ ํ์๋๋ฐ, ์ฑ๋ฅ์ ์ธ ๋ฉด์์ ๋ง์ด ํฅ์์ด ๋ ๊ฒ์ ์ฒด๊ฐ์ ์ผ๋ก๋ ๋๋ ์ ์์๋ค.
Update
update.angular.io๋ฅผ ๋ฐฉ๋ฌธํด ์์ธํ ์ ๋ณด์ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์.
ng update @angular/cli @angular/core
Differential loading
์ฐจ๋ฑ ๋ก๋ฉ(Differential loading)์ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ ์ ๋ฅ๋ ฅ์ ๋ฐ๋ผ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ ํํ๋ ๊ณผ์ ์ ๋งํ๋ค. ๊ธฐ๋ณธ๊ฐ์ผ๋ก Angular 8์ ์ต์ ๋น๋(es2015)์ ์์ ๋น๋(es5)๋ฅผ ๊ฐ๊ฐ ์ํํ๊ณ ์ฌ์ฉ์๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ก๋ํ์ ๋, ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ ์๋์ผ๋ก ํ์ํ ๋ฒ๋ค์ ์ ํํ ๊ฒ์ด๋ค.
ng update ๋ช ๋ น์ด๋ฅผ ์ฐ๋ฉด Angular๋ ์ฐจ๋ฑ ๋ก๋ฉ์ ์ํด ํ๋ก์ ํธ์ tsconfig.json๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค. Angular CLI๋ ์ฐจ๋ฑ ๋ก๋ฉ์ ์ํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด tsconfig.json ํ์ผ์ target ํ๋กํผํฐ์ ๋ช ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฒ์ ผ์ ํ์ธํ๋ค.
{
"compilerOptions": {
โฆ
"module": "esnext",
"moduleResolution": "node",
โฆ
"target": "es2015",
โฆ
},
target ํ๋กํผํฐ๊ฐ es2015๋ก ์ค์ ๋์์ ๋, Angular๋ ๋ ๊ฐ์ ๋ฒ๋ค์ ์์ฑํ๊ณ ๊ฐ๊ฐ ์ด๋ฆ์ ๋ถ์ฌํ๊ณ ๋ธ๋ผ์ฐ์ ๋ ๋ฐํ์์์ script ํ๊ทธ์ ์์ฑ์ ํตํด ์ด๋ค ๋ฒ๋ค์ ๋ก๋ํ ์ง ๊ฒฐ์ ํ๋ค.
//์ต์ ์๋ฐ์คํฌ๋ฆฝํธ
<script type="module" src="โฆ">
//์์ ์๋ฐ์คํฌ๋ฆฝํธ
<script nomodule src="โฆ">
์ต์ ๋ธ๋ผ์ฐ์ ์์ ์ด๊ธฐ ๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ 40kB ์ด์ ์ ๊ฐ ํ๊ณ , ์ปค๋ฎค๋ํฐ์์๋ ์ผ๋ง๋ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋๊ฐ์ ๋ฐ๋ผ 7-20% ์ ๋์ ์ ๊ฐ ํจ๊ณผ๋ฅผ ๋ณด์๋ค๋ ์ด์ผ๊ธฐ๊ฐ ๋์๋ค๊ณ ํ๋ค.
์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์.
Route Configurations use Dynamic Imports
Angular๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ถ๋ฅผ ๋ผ์ฐํฐ๋ฅผ ์ด์ฉํ ์ง์ฐ ๋ก๋ฉ ๊ธฐ๋ฒ์ผ๋ก ๋ถ๋ฌ์ฌ ๊ฒ์ ๊ถ์ฅํ๋ค. ์ด๋ ๋ผ์ฐํธ ์ค์ ์ loadChildren ํ๋กํผํฐ๋ฅผ ํตํด ์ค์ ํ ์ ์๋๋ฐ, 8 ๋ฒ์ ์์๋ ๋์ ์ํฌํธ์ ์ฐ์ ํ์ค์ผ๋ก ๋ณ๊ฒฝ๋์๋ค.
//๊ธฐ์กด ๋ฐฉ์
{path: '/admin', loadChildren: './admin/admin.module#AdminModule'}
// Angular 8 ๋์ ์ํฌํธ ๋ฐฉ์
{path: `/admin`, loadChildren:
() => import(`./admin/admin.module`).then(m => m.AdminModule)}
์ด๋ VSCode ๊ฐ์ ํด์์ ํด๋น ์ํฌํธ ๊ตฌ๋ฌธ์ ์ดํดํ๊ณ ๊ต์ ํด์ค ์ ์๋ ์๋ํฐ์ ์ง์์ฑ์ ๋์ผ ๊ฒ์ด๋ค.
ng update ๋ช ๋ น์ด๋ฅผ ์ฐ๋ฉด Angular๋ ์๋์ผ๋ก ํด๋น ๊ตฌ๋ฌธ์ ๋ณ๊ฒฝํ๋ค.
Builder APIs in the CLI
Angular Schematics๊ฐ ng new, ng generate, ng add, ng update์ ๊ฐ์ ๋ช ๋ น์ด์ ์ ๊ทผํ๋ฏ, ์๋ก์ด Builder API๋ ng build์ ng test ๊ทธ๋ฆฌ๊ณ ng run์ ์ ๊ทผํด ๋น๋๋ ๋ฐฐํฌ ๊ณผ์ ์ ํํนํ ์ ์๋๋ก ํ๋ค.
๊ณต์ API ๋ฌธ์๋ฅผ ์ฐธ๊ณ .
CLI์ Workspace API
๊ธฐ์กด์ Schematics๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด angular.json์ ์ด์ด ์๋์ผ๋ก ์์ ์ ์ฅ์ ์ค์ ์ ์์ ํด์ผ ํ๋ค. Angular 8์ angular.json์ ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋ API๋ฅผ ์ ๊ณตํ๋ค.
Workspace API์ ๋ํ ์์ธํ ์ค๋ช ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ
Web Worker ์ง์
Web Workers๋ cpu ์์์ ๋ง์ด ์ฌ์ฉํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋๋ฅผ ํฅ์์ํฌ ์ ์๋ ์ข์ ๋ฐฉ์์ด๋ค. Web Workers๋ ์ด๋ฏธ์ง๋ ๋น๋์ค ์ฒ๋ฆฌ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ์ฎ๊ธธ ์ ์๊ฒ ํด์ค๋ค. angular.io ๊ณต์ํ๋ ๋ด๋ถ์ ๊ฒ์๊ณผ ์์ธ์ ์ํด Web Workers๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
์ด์ CLI๋ก Web Workers๋ฅผ ์์ฑํ ์ ์๊ณ , worker๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
ng generate webWorker my-worker
web worker๋ฅผ ์์ฑํ๋ค๋ฉด, ์๋ ์ฌ์ฉํ๋ ๋๋ก ์ฌ์ฉํ๋ฉด ๋๋ค. CLI๊ฐ web worker๋ฅผ ์์์ ๋ฒ๋คํ ํ๊ณ ์ ๋ฆฌํด์ค๋ค.
const worker = new Worker(`./my-worker.worker`, { type: `module` });
๋ ์์ธํ Angular CLI์ Web Workers์ ๋ํด์ ์๋ ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ .
Deprecation
Angular๋ ๊ณต๊ฐ API๊ฐ n + 2 ๋ฒ์ ผ์ ์ง์ํ๋๋ก ํ๋ค. ์ฆ 8.1 ๋ฒ์ ผ์์ ํ๊ธฐ ์ฒ๋ถ๋ ๊ธฐ๋ฅ์ 9 ๋ฒ์ ผ๊ณผ 10 ๋ฒ์ ผ๊น์ง๋ ์๋ํ ๊ฒ์ด๋ผ๋ ์ด์ผ๊ธฐ์ด๋ค. ์๋ฅผ ๋ค์ด, ๋ฒ์ ผ 8์์ platform-webworker๋ฅผ ํ๊ธฐ ํ๊ฒ ๋๋ค.
Angular์์ ํ๊ธฐ, ์ ๊ฑฐ๋ ๊ธฐ๋ฅ ๊ด๋ จํ์ฌ ์ ๋ฆฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ณด๋ ค๋ฉด Deprecation Guide๋ฅผ ์ฐธ๊ณ ํ์.
Ivy & Bazel
Ivy๋ฅผ 8.0 ๋ฒ์ ์์ ํ๋ฆฌ๋ทฐ ์ต์ ํํ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
Angular Ivy
Angular Ivy๋ ๊ฐ์ DOM์ ํ๊ณ๋ฅผ ์ง๋ ์ด์ ๋ ๋๋ฌ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด ์ก๋ค. Ivy๋ ์๋ณธ๋ณด๊ธฐ ์์ง์ ํฌ๊ธฐ๊ฐ ์๊ณ , ๋น ๋ฅด๊ณ ๊ฐ๋จํ๋ฉฐ, Tree Shaking์ ์ฅ์ ๊ณผ Incremental DOM์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๊ณต๊ฐ์ ์ค์ธ๋ค. Ivy๋ฅผ ํตํด ๋ ๋๋งํ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ต์ํํ๊ณ ์ฆ๋ถ ๋น๋๋ฅผ ํ์ฉํ๋ ํ ๋ฒ์ ํ๋์ ํ์ผ์ ์ปดํ์ผํ์ฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํ๋ ์ฅ์น์์ ์ฑ ์ฑ๋ฅ์ ํฅ์ ์ํค๋๋ก ์ค๊ณ๋์๋ค. ์ฆ, Ivy๋ ์ปดํ์ผ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ์ฌ ์์ถํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์๊ณ ๋ ๋ง์ ์์ ํจ์๋ก ๋๋๊ธฐ ๋๋ฌธ์ Ivy๋ ์ด์ ๋ ๋๋ฌ์ ๋นํด Tree Shaking์ ๋ ์ต์ ํ๋์ด ์๋ค.
Ivy enable
tsconfig.app.json
์ ํธ์งํ์ฌ Ivy๋ฅผ ์ ํํ๊ณ angularComplierOption ์น์
์ ์ถ๊ฐํ๊ณ enableIvy๋ฅผ true๋ก ์ค์ ํ๋ค. ์๋ก์ด Angular CLI ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, newscript๋ฅผ ์คํํ ๋ --enableIvy ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": []
},
"exclude": [
"test.ts",
"**/*.spec.ts"
],
"angularCompilerOptions": {
"enableIvy": true
}
}
ng build --prod
.....
chunk {1} main-es2015.xxxxxxx.js 000 kB [initial] [rendered]
.....
๊ทธ ๊ฒฐ๊ณผ, ๋ฒ๋ค ํฌ๊ธฐ์ 15%๋ก ์ค์ด๋ค์๋ค๋ฉด ์ด๋ ์น ์ฌ์ดํธ ๋ก๋ฉ ์๊ฐ์ด 15% ๋ ๋นจ๋ผ์ง์ ์๋ฏธํ๋ค.