AngularJS 2.0์ ์๋ก์ด ๊ธฐ๋ฅ
์๋ฌธ : Whatโs New in AngularJS 2.0
AngularJS๋ ์น ์ดํ๋ฆฌ์ผ์ด์
์ธ๊ณ์์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ ์ค ๊ฐ์ฅ ์ธ๊ธฐ์๋ ์คํ์์ค์ค ํ๋๊ฐ ๋์์ต๋๋ค. AngularJS๊ฐ ์์๋ ์ด๋, ๊ฐ์ธ๊ณผ ๋
๋ฆฝ ์ฌ์
์ ๋ ๋ชจ๋์ ์ปค๋ฎค๋ํฐ ์ง์๊ณผ ์ฑํ์ด๋ผ๋ ์ธก๋ฉด์์ ๊ฒฝ์ด๋ก์ด ์ฑ์ฅ์ ์
์ฆํ์ต๋๋ค.
AngularJS๋ ๋ณต์กํ ๋จ์ผ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๊ธฐ์ํ ํด๋ผ์ด์ธํธ ์ธก MVW(Model-View-Whatever) ํ๋ ์์ํฌ๋ก ์ฑ์ํด๊ฐ์ต๋๋ค. ๊ฐ๋ฐํ๋ก์ธ์ค๊ฐ ๋จ์ํ ๋๋ฉด์ ์ดํ๋ฆฌ์ผ์ด์
ํ
์คํธ์ ์์ฑ ๋ ๋ชจ๋๋ฅผ ์ค์ํ ๊ฒ์ผ๋ก ์๋ฆฌ๋งค๊น๋์์ต๋๋ค.
Angular์ ํ์ฌ ๋ฒ์ ์ 1.3์
๋๋ค. ์ด ๋ฒ์ ์ ์์ ์ ์ด๊ณ ๊ทธ๊ฒ์ ๋ง๋ ๊ตฌ๊ธ์ด ์๋ง์ ํ๋ฅญํ ์ดํ๋ฆฌ์ผ์ด์
์ ์๋์ํค๊ธฐ์ ์ถฉ๋ถํ ์ฑ๋ฅ์ ๊ฐ์ถ์์ต๋๋ค.(๊ตฌ๊ธ ๋ด๋ถ์ 1.2 ๋๋ 1.3 ๋ฒ์ ์์ ์คํ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด 1600๊ฐ๊ฐ ๋๊ฒ ์๋ค๋ ๊ฒ์ผ๋ก ์ถ์ ๋ฉ๋๋ค)
Angular 2.0์ ๊ณต์์ ์ผ๋ก 2014๋
10์ ng-conference์์ ๋ฐํ๋์์ต๋๋ค. ์ด ๋ฒ์ ์ ๋ณต์กํ ์ฃผ์ ์
๋ฐ์ดํธ๋ผ๊ธฐ ๋ณด๋ค๋ ์ ์ฒด ํ๋ ์์ํฌ๋ฅผ ์ ์์ฑํ๊ฒ์ด๋ฉฐ [์ด์ ๋ฒ์ ๊ณผ์]๋จ์ ์ ์ธ ๋ณํ๋ฅผ ํฌํจํ ๊ฒ์
๋๋ค.
Angular 2.0์ ๋ํด ์์ธํ ๋
ผ์์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ์ ๋ฒ์ ์ ๋ค์ ์๋ ์ฒ ํ์ ๋ํด ๊ฐ๋จํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.(์ด ์ ๋ฒ์ ์ 2015๋
๋ง ์ฏค ์ถ์๊ฐ ์์๋ฉ๋๋ค.) Angular 2.0 ๊ฐ๋ฐ์ ๋ค์์ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๊ธฐ ์์ํ์ต๋๋ค:
์ ๋ฒ์ ์ ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ ์ด์ ์ ๋ง์ถ ๊ฒ์
๋๋ค. ๊ทธ ๊ทผ๊ฑฐ๋ ๋ชจ๋ฐ์ผ(์ฑ๋ฅ, ๋ก๋ ์๊ฐ ๋ฑ)์ ๊ด๋ จ๋ ์ด์๋ค์ด ํด๊ฒฐ๋ ์ดํ์ ํ
์คํฌํ ์ธก๋ฉด์ด ๋ค๋ค์ง๊ธฐ ๋ ์ฌ์ธ๊ฑฐ๋ผ๋ ์ ์
๋๋ค.
์ฑ๋ฅ ๊ฐ์ ์ ๊ฒฐ๊ณผ๋ก ๋ค์ํ ๋ชจ๋๋ค์ด Angular์ ํต์ฌ์์ ์ ๊ฑฐ๋ ๊ฒ์
๋๋ค. ๊ณ์ ์ฆ๊ฐํ๋ Angular์ ๋ชจ๋ ์ํ๊ณ์์ ์ฌ๋ฌ๋ถ์ด ์ํ๋ ๋ถ๋ถ์ ์ ํํ๊ณ ๊ฐ์ ธ์ฌ ์ ์์ ๊ฒ์
๋๋ค.
Angular 2.0์ ES6์ โ๋ ์ฑ์ฑํโ ๋ชจ๋ ๋ธ๋ผ์ฐ์ (์ด๋ค์ ์ต์ข
๋ฒ์ ์ด ์๋์ผ๋ก ์
๋ฐ์ดํธ ๋๋ค.)๋ค์ ํ์ผ์ผ๋ก ์ผ์ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ๊ฐ๋ฐ์ ๋ ์ด๋ ต๊ฒ ๋ง๋๋ ๋ค์ํ ํต๋ค๊ณผ 2์ฐจ ํด๊ฒฐ์ฑ
๋ค์ ์ ๊ฑฐํจ์ผ๋ก์ ๊ฐ๋ฐ์๋ค์ด ์์ ์ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ๊ด๋ จ๋ ์ฝ๋์๋ง ์ง์คํ ์ ์๋๋ก ํด์ค๋๋ค.
ng-conference ๋์ ๋ฒ์ 2.0์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ธ๊ธ์ ์์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ํ 2.0๋ฒ์ ์ผ๋ก ๊ทธ๋๋ก ์ ํํ ๊ฒฝ์ฐ ์ด์ ๋ฒ์ ๊ณผ ์ด๋ ํ ํธํ์ฑ๋ ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Angular 1.3 ์ดํ๋ฆฌ์ผ์ด์
๋ค์ด ๊นจ์ง ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด ์ดํ์ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์๋ ์๋ก์ด Angular 1.3 ํ๋ก์ ํธ๋ฅผ ์์ํ ๊ฐ์น๊ฐ ์๋์ง์ ๋ํ ๋ช๋ช ๊ฐ๋ฐ์๋ค์ ์๋ฌธ ์ ๊ธฐ์ ๋ํด ๋ถํ์ค์ฑ๊ณผ ์ถ์ธก์ด ๋๋ฌดํด์์ต๋๋ค.
์ด๋ค ๋ณํ๊ฐ ์๋๊ฐ?
AtScript๋ ES6์ ํ๋์งํฉ์ด๋ฉฐ Angular 2.0์ ๊ฐ๋ฐํ๋๋ฐ ์ฌ์ฉ๋์์ต๋๋ค. ์ด๊ฒ์ ES5 ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด Traceur ์ปดํ์ผ๋ฌ๋ก ์ฒ๋ฆฌ๋๋ฉฐ ์ปดํ์ผ ์๊ฐ ์ฒดํฌ ๋์ ๋ฐํ์ ํ์ (์ง์ํ)๊ตฌ๋ฌธ์ ์์ฑํ๋ ๋ฐ TypeScript์ ํ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ AtScritp๋ ํ์๊ฐ ์๋๋๋คโ์ฌ๋ฌ๋ถ์ ์ฌ์ ํ Angular ์ดํ๋ฆฌ์ผ์ด์
์ ์์ฑํ๊ธฐ ์ํด AtScrit ๋์ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ/ES5 ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํฅ์๋ ์์กด์ฑ ์ฃผ์
(DI)
์์กด์ฑ ์ฃผ์
(๊ทธ ์์ ์์ฒด๊ฐ ์๋๋ผ ๊ฐ์ฒด์ ์์กด์ฑ์ ์ ๋ฌํ๋ ์ํํธ์จ์ด ๋์์ธ ํจํด์
๋๋ค)์ Angular์ ๋ค๋ฅธ ๊ฒฝ์์๋ค๊ณผ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ์ด์ ์ค ํ๋์
๋๋ค. ์ด๊ฒ์ ํนํ ๋ชจ๋๊ฐ๋ฐ๊ณผ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ์ ์ธก๋ฉด์์ ์ ๋ฆฌํฉ๋๋ค. ๊ทธ๋ฌ๋ Angular 1.x์์ ์ด๊ฒ์ ๊ตฌํํ๋ ๋ฐ์ ๋ฌธ์ ๊ฐ ๋ง์์ต๋๋ค. Anuglar 2.0์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฟ๋ง ์๋๋ผ ์์์์ ์ฃผ์
, lifetime/scope ์ ์ด์ ๊ฐ์ ๊ธฐ๋ฅ๋ค๋ ์ถ๊ฐ๋ ๊ฒ๋๋ค.
AtScript๋ ํจ์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๊ฒ์ DI ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑ ํ ๋ DI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ด๋ จ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ํ์ธํฉ๋๋ค)์ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ๊ฐ์ฒด ์ธ์คํด์ค์ ๊ตฌ์ฑ์ ์ฉ์ดํ๊ฒํฉ๋๋ค. Inject ์ฃผ์์ ์ ๊ณตํจ์ผ๋ก์ ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ค๋ฒ๋ผ์ด๋ ํ ์ ์์ ๊ฒ์
๋๋ค.
child injector๋ ์์๋ ๋ฒจ์ ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ๋ถ๋ชจ์ ๋ชจ๋ ์๋น์ค๋ฅผ ์์ํฉ๋๋ค. ์๊ตฌ์ ๋ฐ๋ผ ์ฌ๋ฌ ํ์
์ ๊ฐ์ฒด์์ ํธ์ถ๋ ์ ์๊ณ ์๋์ผ๋ก ๋ค์ํ scope์์ ์ค๋ฒ๋ผ์ด๋ ๋ฉ๋๋ค.
ํฅ์๋ DI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ธ์คํด์ค ์ค์ฝํ ์ ์ด๋ฅผ ํน์ง์ผ๋ก ํ ๊ฒ์
๋๋ค. ์ด๊ฒ์ child injectors์ ์๊ธฐ ์์ ์ scope ์ง์์๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋์ฑ ๊ฐ๋ ฅํด์ง ๊ฒ์
๋๋ค.
ํ
ํ๋ฆฟ๊ณผ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋ ํจ๊ป๊ฐ๋ ํ
ํ๋ฆฟํ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋ํด์ ์์๋ด
์๋ค.
์ด๊ฒ์ Angular์ ํ์ฌ ๋ฒ์ ์์ ๋๋ฝ๋ ์ฌํญ์
๋๋ค. ์ด๊ฒ์ Angular 2.0์์ ํด๊ฒฐ๋ ๊ฒ์ด๋ฉฐ ๊ฐ๋ฐ์๋ค์ด ์ฆ๊ฐ ์ฆ๊ฐ ์๋ก์ด ๋๋ ํฐ๋ธ๋ค๊ณผ ์ปจํธ๋กค๋ฌ๋ค์ ์ถ๊ฐํ ์ ์๊ฒ ํ ๊ฒ์
๋๋ค.
Angular 2.0์์ ํ
ํ๋ฆฟ ์ปดํ์ผ ๊ณผ์ ์ ๋น๋๊ธฐ์ ์ผ ๊ฒ์
๋๋ค. ์ฝ๋ ES6 ๋ชจ๋ ์ฌ์์ ๊ธฐ๋ฐ์ผ๋ก, ๋ชจ๋ ๋ก๋๋ ๋จ์ํ ๊ตฌ์ฑ ์์ ์ ์๋ค์ ์ฐธ์กฐํ์ฌ ์์กด์ฑ์ ๋ก๋ํ ๊ฒ์
๋๋ค.
Angular 2.0์์๋ ์ธ ๊ฐ์ง ์ข
๋ฅ์ ๋๋ ํฐ๋ธ๋ค์ด ์์ ๊ฒ์
๋๋ค.
์ปดํฌ๋ํธ ๋๋ ํฐ๋ธ - ์ด๊ฒ์ ์๋ฐ ์คํฌ๋ฆฝํธ, HTML ๋๋ ์ ํ ์ฌ์ ์ธ CSS ์คํ์ผ ์ํธ์ ๋ก์ง์ ์บก์ํํ์ฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํฉ๋๋ค.
์ฅ์์ ๋๋ ํฐ๋ธ - ์ด ๋๋ ํฐ๋ธ๋ (ํดํ์ด๋ ng-show/ng-hide๋ฅผ ์ฌ์ฉํ ํ ๊ธ ์์์ ๊ฐ์) ์ฅ์์ ์ธ ์์๋ค์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์
๋๋ค.
ํ
ํ๋ฆฟ ๋๋ ํฐ๋ธ - ์ด๊ฒ์ HTML์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ
ํ๋ฆฟ์ผ๋ก ๋ณํํ ๊ฒ์
๋๋ค. ํ
ํ๋ฆฟ์ ์ธ์คํด์คํํ๊ณ ๊ทธ๊ฒ์ DOM์ ์ฃผ์
ํ๋ ๊ฒ์ด ์์ ํ ๋๋ ํฐ๋ธ ์์ฑ์์ ์ํด ์ปจํธ๋กค๋์ด์ง ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค๋ฉด ng-if ๋ฐ ng-repeat๊ฐ ํฌํจ๋ฉ๋๋ค.
์ด๊ธฐ Angular ๋ผ์ฐํฐ๋ ๋จ์ง ๋ช ๊ฐ์ง ๋จ์ํ ์ผ์ด์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ ์์ํฌ๊ฐ ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋ ๋ง์ ๊ธฐ๋ฅ๋ค์ด ๋ฌถ์ฌ์ง๊ฒ ๋์์ต๋๋ค. Angular 2.0์์์ ๋ผ์ฐํฐ๋ ์ญ์ ๋จ์ํ๊ฒ ์ค๊ณ๋์์ง๋ง ํ์ฅ๊ฐ๋ฅํฉ๋๋ค. ์ด๊ฒ์ ์๋์ ๋จ์ํ ๊ธฐ๋ฅ๋ค์ด ํฌํจ๋์ด์์ต๋๋ค:
Simple JSON-based Route Config
Optional Convention over Configuration
Static, Parameterized and Splat Route Patterns
Use Push State or Hashchange
Navigation Model (For Generating a Navigation UI)
์ด์ Angular 2.0์ ์๋ก์ด ์ฐจ์์ผ๋ก ํฅ์์ํค๋ ์ด๋งค์ ์ธ ๊ฐ์ ๋ ๋ผ์ฐํฐ์ ๊ธฐ๋ฅ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ ๋ผ์ฐํฐ(Child Router)
์์ ๋ผ์ฐํฐ๋ ์๊ธฐ ์์ ์ ๋ผ์ฐํฐ์ ํจ๊ป ์ ๊ณต๋จ์ผ๋ก์ ๋ ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ทธ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๋ณํํ ๊ฒ์
๋๋ค.
์คํฌ๋ฆฐ ํ์ฑ์(Screen Activator)
์ด๊ฒ์ can* ์ฝ๋ฐฑํจ์ ์ธํธ๋ค์ ํตํด ํ์ ์ฃผ๊ธฐ ์ ๋ฐ์ ๊ฑฐ์ฒ ๋ ํ๋ฅญํ ์ ์ด๋ฅผ ๊ฐ๋ฐ์๋ค์๊ฒ ์ ๊ณตํ ๊ฒ์
๋๋ค:
canActivate โ Allow/Prevent navigating to the new controller.
activate โ Respond to successful navigation to the new controller.
canDeactivate โ Allow/Prevent navigation away from the old controller.
deactivate โ Respond to successful navigation away from the old controller.
์ด ๋ชจ๋ ๋ก์ง์ ํ์ดํ๋ผ์ธ ์ํคํ
์ณ ํตํด ๊ตฌ์ถ๋ฉ๋๋ค. ํ์ดํ๋ผ์ธ ์ํคํ
์ณ๋ ๋๋ผ์ธ ์ ๋๋ก ์ฝ๊ฒ ์๊ธฐ ์์ ์ ๋จ๊ณ๋ฅผ ํ์ดํ๋ผ์ธ์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋๋ก ํด์ค๋๋ค. ๋ ๋์๊ฐ ์ด๊ฒ์ ๋น๋๊ธฐ์ ์ธ ์ฒ์ฑ์ ํ์ดํ๋ผ์ธ์ ์๋ ๋์ ์ฌ์ฉ์ ์ธ์ฆ์ ์ํด ์๋ฒ ์์ฒญ์ ํ๊ฑฐ๋ ์ฝํธ๋กค๋ฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ์ ์๋๋ก ํฉ๋๋ค.
Angular 2.0์ diary.js๋ผ๊ณ ๋ถ๋ฅด๋ ๋ก๊น
์๋น์ค๋ฅผ ํฌํจํ ๊ฒ์
๋๋คโ์ด๊ฒ์ ์ฌ๋ฌ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์์๋๋ ์๊ฐ์ ์ธก์ ํ๋ ๋งค์ฐ ์ ์ฉํ ์ด ๊ธฐ๋ฅ์
๋๋ค(์ด๊ฒ์ผ๋ก ์ฌ๋ฌ๋ถ์ ์ฝ๋์์ ๋ณ๋ชฉํ์์ ์ธ์ง ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค.).
$scope๋ ES6 ํด๋์ค๋ค์ ์ฐํธ์ ์ธ Angular 2.0์์๋ ์ ๊ฑฐ๋ ์์ ์
๋๋ค.
์ง๊ธ Angular 2.0์ ๋๋ฌ์ธ๊ณ ํฅ๋ถ๊ณผ ๋ค๋ฌ ๋ถ์๊ธฐ๊ฐ ๋๊ปด์ง์ง๋๋ค. ์ถ์์ผ์ด ๊ฐ๊น์ ์ง์๋ก ๊ณ ์กฐ๋๊ฒ ์ง์. 3์ ์ด์ ๋ค์ ng-์ปจํผ๋ฐ์ค๊ฐ ์ด๋ฆด ์ฅ์๋ฅผ ๋ณผ ์ ์์ ๊ฒ์
๋๋ค. ๊ทธ๊ณณ์์ ๋ค์ ๋ฒ์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ด ๋ฑ์ฅํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
ํํธ ์ด ๋จ์ ์ ์ธ ๋ณํ๊ฐ ์ข์ ๊ฒ์ธ์ง์ ๋ํ ์๊ฒฌ์ด ๋๋์ด์ง๊ฒ ์ง์. ๋ง์ดํฌ๋ ์ด์
๊ณํ์ ๋ช
๋ฐฑํ ๋ถ์กฑ์ ๋ฐ๋์๋ค์ด ์ดํดํ ๋งํ ๊ฑฑ์ ์ ํ๋ ๋์ ์ง์ง์๋ค์ 1.x๋ก ๋ญ๊ฐ๋ฅผ ๊ฐ์ ํ๊ธฐ์๋ ์ฌ๊ฐํ ํ๊ณ๊ฐ ์กด์ฌํ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.