์ ์ถ ์ค์ ๋๋ค ... ("x"๋ก ํ๋ ์ ํ)
[X] feature request / proposal
๋๋ NgModule์ ๋ํด ์ฝ์์ผ๋ฉฐ ํ์ฌ ์ ์(https://docs.google.com/document/d/1isijHlib4fnukj-UxX5X1eWdUar6UkiGKPDFlOuNy1U/pub)์ด ๊ณ ๋ คํ๊ณ ์๋์ง ์์ ํ ํ์ ํ์ง ๋ชปํ๋ ๋ช ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ ์ํ๊ณ ์ถ์ต๋๋ค. .
๋ฌธ๋งฅ
์ ๋ Enterprise Framework(Angular 2 ๊ธฐ๋ฐ)๋ฅผ ๊ตฌ์ถํ๋ ํ์ ์ผ์์ ๋๋ค. ์ด ํ๋ ์์ํฌ๋ ๋์ผํ ์์ฝ์์คํ ๋ด์์ ๋ค๋ฅธ ์ฑ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ํ๋ ์์ํฌ๋ฅผ ๋ ์์ ํ๋ก์ ํธ/๋ชจ๋๋ก ๋๋์์ต๋๋ค(๋ถ๋ฆฌ๋ npm ํจํค์ง๋ก ์๊ฐํ์ญ์์ค). ์ด๋ฌํ ๋ชจ๋์ ์ปจํธ๋กค ์ธํธ(๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฌ์ฉ๋จ) ๋๋ ํด๋น ์ปจํธ๋กค์ ์ฌ์ฉํ๋ ํ์ด์ง์ ๋๋ค.
์์
๋น ๋ฅธ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์ด ๋ชจ๋
import {Component} from "@angular/core";
@Component({
selector: "my-combobox",
...
})
export class MyComboBox{
}
์ฒดํฌ๋ฆฌ์คํธ ๋ชจ๋
// ์ฒดํฌ๋ฆฌ์คํธ ๋ชจ๋์ Controls ๋ชจ๋์ ์์กดํฉ๋๋ค. ์ปจํธ๋กค์ ํ์ฌ ๋ชจ๋๋ก ์ทจ๊ธ๋ฉ๋๋ค.
import {Component} from "@angular/core";
import {MyComboBox} from "controlsmodule/components/mycombobox";
// Please note that we are only loading a specific component within the module, not all components inside that module.
@Component({
selector: "my-checklist-page",
directives: [MyComboBox, ...],
...
})
export class ChecklistPage{
}
๋ถํธ์คํธ๋ฉ์ ์ปจํธ๋กค๊ณผ ์ฒดํฌ๋ฆฌ์คํธ ๋ชจ๋์ ๋ชจ๋ ์์ง ๋ชปํฉ๋๋ค. ์ฌ์ฉ์์ ์ํธ ์์ฉ์ ๋ฐ๋ผ ์ง์ฐ ๋ก๋๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ Checklist๋ก ์ด๋ํ๋ฉด ChecklistPage ๊ตฌ์ฑ ์์๊ฐ ๋ก๋๋๊ณ MyComboBox๋ ๋ฐ๋ผ์ต๋๋ค(ChecklistPage์์ ๋ง๋ _import_ ๋๋ฌธ์).
์ฒดํฌ๋ฆฌ์คํธ ๋ชจ๋์๋ ๋ค๋ฅธ 12๊ฐ์ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. ๊ฐ๊ฐ์ ์ฌ๋ฌ ๋ชจ๋์ ๋ค๋ฅธ 12๊ฐ ๊ตฌ์ฑ ์์์ ์์กดํฉ๋๋ค.
NgModule ์ ์ธ์ผ๋ก ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋นํ์ค์ ์ ๋๋ค(๊ฑฐ์ ๋ถ๊ฐ๋ฅํ์ง๋ ์์). ์ฐ๋ฆฌ๋ ์ฑ ์คํ ์๊ฐ ๋์ _์ฌ์ฉํ ์ ์๋_ ์๋ฐฑ ๊ฐ์ ๊ตฌ์ฑ ์์์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค.
๋ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ชจ๋์ ๋ฐ ์ง์ฐ ๋ก๋๊ฐ ํ์ํฉ๋๋ค. ์ฑ ๋ด์์ ์๋ก ๋ค๋ฅธ ์ํธ ์์ฉ์ผ๋ก ์ธํด ์์ ํ ๋ค๋ฅธ ๋ชจ๋์ด ๋ก๋๋ฉ๋๋ค.
์์/์ํ๋ ํ๋
๊ตฌ์ฑ ์์ ๋ฒ์ ์ง์๋ฌธ์ด ์๋ ํ์ฌ ์๋ฃจ์ ์ ์ด ์ฌ์ฉ ์ฌ๋ก์ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค. ์ด๊ฒ์ด NgModule์์ ์ด๋ป๊ฒ ์๋ํ ์ง ํ์คํ์ง ์์ต๋๋ค.
๊ทธ ์ด์์ผ๋ก ํ์ฌ ๊ฐ ๊ตฌ์ฑ ์์(์ด ๊ฒฝ์ฐ ChecklistPage)์ ํ์ํ ์ข ์์ฑ์ ๋ช ํํ๊ฒ ๋ณผ ์ ์์ต๋๋ค. ์ ์ง ๊ด๋ฆฌ๊ฐ ํจ์ฌ ์ฌ์์ง๋๋ค.
ํ์ํ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ NgModule๋ก ๊ฐ์ ธ์จ ๋ค์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์์์ ๋ถ๋ช ํํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ ์๊ท๋ชจ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํ ํ์์ ์ธ ์๋ฃจ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ํ ์ํ๊ณผ ํจ๊ป ์ฌ๋ฌ ํด์ ๊ฑธ์ณ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํ๋ ์ฅ๊ธฐ์ ์ธ ๊ฐ๋ฐ์์ ... ํ ํ๋ฆฟ์ ์ดํด๋ณด์ง ์๊ณ ์ข ์๋ ํญ๋ชฉ์ ๋ํด ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๋ช ์์ ์ผ๋ก ๋ช ์ํ๋ ๊ฒ(๋ญ๊ฐ ๋๋ฝ๋ ๊ฒฝ์ฐ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํจ)์ด ํ๋ฅญํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ .
๊ฒฐ๋ก
์ค๋ช ์ด ๋ช ํํ๋ค๋ฉด ์๋ ค์ฃผ์ธ์. ์ด ๋ฌธ์ ์ ๋ชฉํ๋ ์ด ์ํฉ์ ๋ํ ์ธ์์ ๋์ด๊ณ ์งํ ๋ฐฉ๋ฒ์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
ํ์ฌ ์์ ์ ๋ณด์ฌ๋๋ฆด ์ ์์ต๋๋ค. ์๋ (์ํ 27 ์ดํ)์ ๊ฐ๋ฐ๋ 8๊ฐ ํ๋ก์ ํธ์ ๊ฑธ์ณ ์๋ฐฑ ๊ฐ์ Angular 2 ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค.
ngModules๊ฐ ์ํ๋ ์ค์ ์ ๊ธ์งํ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค. ์์ง ์ฌ์ฉํด ๋ณด์ จ์ต๋๊น? ์ฌ๋ฌ ๋ค๋ฅธ ๋ชจ๋์ ๊ฐ์ง ์ ์๊ณ ์ง์ฐ ๋ก๋ฉ ๋ฑ์ ์ํํ ์ ์์ต๋๋ค. http://plnkr.co/edit/NAtRQJBy50R19QAl90jg?p=info
ํ๋ ค๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ๊ณผ ๋ ์ ์ฌํ ๊ฒ์ ์ํด ๋ material2์ ์ ํ์ ์ ์งํ์ญ์์ค: https://github.com/angular/material2/pull/950/files
์๋ ํ์ธ์ @qdouble ,
๋น ๋ฅธ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค.
https://github.com/jelbourn/material2/blob/ecbb4f42e0473899f6ad15d8e4ed8f262ded7a99/src/components/button-toggle/button-toggle.ts ๋ฅผ ๋ณด๋ฉด ์ง๊ธ๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด ํ์ํ๋ค๋ ๋ง์์ด์ ๊ฐ์? ๊ฐ ๊ตฌ์ฑ ์์์์ NgModule์ ์ ์ธํ๋ ค๋ฉด? (ํ์ผ ๋ง์ง๋ง์ ์ถ๊ฐ๋๊ฑฐ ๋ง์ฃ ?)
๋ํ ์ด๊ธฐ ์ง์ ์์ ์ธ๊ธํ ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ๋ ๋ค๋ฃจ์ง ์์ต๋๋ค. ๋ฐ์ฝ๋ ์ดํฐ์ ์ ์ธ๋ ๊ฐ ๊ตฌ์ฑ ์์/์ง์์ด์ ์ข ์์ฑ์ ์ ์งํ๋ ๊ฒ์ ์ ์๊ฒ ํฐ ์ด์ ์ ๋๋ค.
@jpsfs ๊ฐ๊ฐ์ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๋ํ ๊ฐ๋ณ ๋ฒ์๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ๊ฐ๊ฐ์ ๋ํด ๋ค๋ฅธ ngModule์ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด๊ฒ์ด ๊ทํ์ ๊ฒฝ์ฐ ๋ ๋ง์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ง๋ง ๊ตฌ์ฑ ์์๋น ๋์ ๋ด ๋ชจ๋์ ๋ฒ์๋ฅผ ์ง์ ํ์ฌ ๋๋ค์์ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ํด ๋ ์ ์ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ ๋ฒ์งธ ๋ฌธ์ ์ ๊ดํด์๋ ngModule๊ณผ ๊ตฌ์ฑ ์์๋ฅผ ์๋ก ๋ฐ๋ก ์์ ์ ์ธํ ์ ์์ผ๋ฏ๋ก ํ์ผ์ ์ถ๊ฐ๋ก 3~4์ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ง๋ง ํฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง๋ ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์๋ ๊ตฌ์ฑ ์์๋น ๋ฒ์ ์ง์ ์ง์๋ฌธ์ด ํ์ํ์ง ์์ง๋ง ํ์ํ ๊ฒฝ์ฐ ngModules๋ ๋ช ์ค์ ์ฝ๋์ ๋ํด ์ฌ์ ํ ์ด๋ฅผ ์ง์ํฉ๋๋ค.
@qdouble ๊ฐ์ฌํฉ๋๋ค.
์ด๊ฒ์ด ๋๋/๋๋ ์ํฉ์ธ์ง ํ์คํ์ง ์์ต๋๋ค. ๋ ์๋๋ฆฌ์ค๊ฐ ํจ๊ป ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์์ผ๋ฉฐ ์ด๋ฏธ ์๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ ํ์๊ฐ ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ฉด ํ๋ฅญํ ์ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ํํธ, ํ๋ ์์ํฌ๋ ๋ชจ๋ ์์ด๋ ์๋ํ ์ ์์ต๋๋ค(ํ์ฌ ์๋ ์ค์). ์คํ๋ผ์ธ ์ปดํ๋ ์ด์ ๋ฌธ์ ๋ ํ์ฌ๋๋ก๋ผ๋ฉด ํด๊ฒฐ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๋ฌธ์ ์ ์ถ๊ฐํ ๋ด์ฉ์ด ์๋ ์ฌ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ณต๊ฐํฉ๋๋ค.
@jpsfs ๋ ์ดํดํ์ต๋๋ค. ๋ด๊ฐ ๊ทํ์ ์ํฉ์ ์๋ค๋ฉด ๋ ์ต์ ์ ๋ชจ๋ ์ด์ด ๋๋ ๊ฒ์ด ์ข์ต๋๋ค. :)
๊ทธ๋ค์ ๋ ๊ฐ์ ๋ฒ์๋ฅผ ์์ฑํ๋ ํ ๊ทํ๊ฐ ๊ฒ์ํ ๋ฌธ์์ ๊ตฌ์ฑ ์์ ์ง์๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ฅผ ์ผ์ต๋๋ค. ๊ทธ๋ค์ ngModule ๋ฒ์๊ฐ ์ถฉ๋ถํ ์๊ณ ES6 ๋ชจ๋ธ๊ณผ ๋ ์ผ์นํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ ๊ตฌ์ฑ์์ ์ด์ ์ ๋ ๊ฐ์ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์์ ์ ์ํํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์ธ๊ธํ์ต๋๋ค. ์ฅ๊ธฐ์ ์ผ๋ก ๋ณด๋ฉด ์ฌ๊ธฐ์์ ๋ฌธ์ ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ฌ๋๋ค์ด ngModules ๋ฐ ๊ธฐํ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ถ ํ๋ก์ ํธ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ ๋ง์ ์ ์ง ๊ด๋ฆฌ, ๊ต์ก ๋ฐ ํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด ํ๋ก์ ํธ๊ฐ ๋๋ ๋๊น์ง ์ด ํ๋ก์ ํธ๊ฐ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ๊ฐ์ง ์ ๋ ์ ์ ์์ผ๋ฏ๋ก ๊ทธ๋ค์ด ๊ทํ์ ๋ง์ ๊ณ ๋ คํ๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
๋์กฐ์ฐจ๋ ํ์ฌ ๊ฑฐ๋ํ ์ํฐํ๋ผ์ด์ฆ ์ฑ์ ์ํคํ
์ฒ๋ฅผ ์ค๊ณํ๋ ์ผ์ ํ๊ณ ์์ต๋๋ค.
๊ทํ์ ์ํฉ @jpsfs ์ ๋ฌ๋ฆฌ ์ ๋ NgModule์ ํฅ๋ถํ๊ณ NgModule์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ฑ ์ํคํ
์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
๊ฐ ๋ชจ๋์๋ ๊ณ ์ ํ ๊ฒฝ๋ก ๋ฐ ๊ตฌ์ฑ ์์ ์ข ์์ฑ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋จ ํ๋์ ๊ตฌ์ฑ ์์๋ก ๊ธฐ๋ฅ์ ์์ฑํ ์ ์์ต๋๋ค. ๊ฒฝ๋ก, ์ต์ํ ํ๋์ ์ค๋งํธ ๊ตฌ์ฑ ์์, ๋ช ๊ฐ์ง Dumb ๊ตฌ์ฑ ์์ ๋ฐ ์๋น์ค๊ฐ ํ์ํฉ๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ๋ชจ๋์ ์ฐ๊ฒฐํ๋ฉด ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ง์ฐ ๋ก๋ฉ์ด ์ค๋ฉด ๊ฐ ๊ตฌ์ฑ ์์์ ๋ํ ์ฝ๋๋ฅผ ๋ก๋ํ๋ ๋์ ๊ฐ NgModule ์ฝ๋๊ฐ ํ ๋ฒ์ ๋ก๋๋๋ฏ๋ก ํ ๋ฒ ๋ค์ด๋ก๋ํ๋ฉด ๊ธฐ๋ฅ์ ์์ ํ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ชจ๋์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ๋ ํจ์ฌ ๊ฐ๋จํ๋ฉฐ ํ๋ฅญํ ํ๋ฌ๊ทธ ์ค ํ๋ ์ด ๊ธฐ๋ฅ์ ๋ฌด๋ฃ๋ก ์ ๊ณตํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ํ ํ์ฌ ์๋นํ ๋ง์ ๊ตฌ์ฑ ์์(์๋ฐฑ์ด ์๋๋ผ ์์ญ)๊ฐ ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์์
ํ๊ณ ์์ต๋๋ค. ์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ (์ง์ฐ ๋ก๋) ๋ชจ๋๋ก ๋ถํ ํ ์ํคํ
์ฒ๊ฐ ํ์ํ์ง ์์ง๋ง ์ด์ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ถํธ์คํธ๋ฉ ํ์ผ๋ก ๊ฐ์ ธ์ค๊ณ declarations
์ ์ ๋ฌํ๋ ๊ฒ์ด ์๋ชป๋ ๋๋์ ์ฃผ๋ฉฐ ๊ตฌ์ฑ ์์์ ์บก์ํ๋ฅผ ์ค๋จํฉ๋๋ค. . @jpsfs ๊ฐ ๋งํ๋ฏ์ด ์ด์ ์๋ ๋ค๋ฅธ ๊ตฌ์ฑ ์์์์ ์ด๋ค ๊ตฌ์ฑ ์์์ ์ง์๋ฌธ์ด ์ฌ์ฉ๋์๋์ง ๋งค์ฐ ๋ช
ํํ์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ์ ํ์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
TaskListItem
์ ๊ฐ์ ๊ฒฝ์ฐ $ TaskList
๋ก ๊ฐ์ ธ์ต๋๋ค.์๋ง๋ ์ผ๋ถ ํต์ฌ ๊ตฌ์ฑ์์ ๋ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ง ์๋ ๊ฒฐ์ ์ ๋ํด ๋ ๋ง์ด ๋งํ ์ ์์ต๋๋ค. ๋ช๋ฌ์งธ ์ฌ์ฉํด๋ณด๋ ๊ฝค ๊ด์ฐฎ๋ค์ ;)
@choeller ์ ์์ ์ ๋ฐ์ํ๊ธฐ ์ํด ๊ตฌ์ฑ ์์ ์บก์ํ๋ฅผ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์์ ๋ฉ์ด์ง๋ ๊ฒ์ด ์ด์ํ๊ฒ ๋๊ปด์ง๋๋ค.
๋ด ํน์ ๊ด์ฌ์ฌ๋ ์ด์ ๊ตฌ์ฑ ์์ ์ด๋ฆ/์ ํ๊ธฐ๊ฐ ์ ์ฒด ์ฑ์์ ๋์ถ๋๋ ๋ฐ๋ฉด ์ด์ ์๋ ํน์ ์ง์๋ฌธ์ ์ ์ ํ๊ฒ ํฌํจํ์ฌ ๋ค๋ฅธ ๊ตฌ์ฑ ์์์ ๋ํด ์ ํ๊ธฐ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด์ ๋ชจ๋ ์ ํ์๋ ๊ตฌ์ฑ ์์๋ณ๋ก ๊ณ ์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ฃ ? ์๋๋ฉด ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์คํดํ๊ณ ์์ต๋๊น?
๋๋ ์๋ ๊ธฐ๋ฅ์ด CSS shadow-DOM ์๋ฎฌ๋ ์ด์ ์ด ์ ๊ณตํ๋ ์ ์ฌํ ์ด์ ๊ณผ ์ผ์นํ๋ค๊ณ ๋๊ผ์ต๋๋ค. ํฐ ์ฑ์์ ์ ํ๊ธฐ ์ถฉ๋ ๋ฑ์ ๋ํด ๋ ๊ฑฑ์ ํ ์ ์๋ค๋ ์ ์ ๋๋ค. ๊ทธ๊ฒ์ IMO์ ํฐ ์ฅ์ ์ด์์ต๋๋ค.
ngModule์ ๋ํ ๋์ ์ฒซ ๋ฒ์งธ ์๊ฐ์ "์, ๊ทธ๊ฑด Angular 1๊ณผ ๊ฐ์ต๋๋ค"์์ต๋๋ค. Angular 1์ด ์ด๋ฏธ ํ๋ฅญํ๋ ๊ฒ์ฒ๋ผ Angular 2๋ ๋ง์ ์ ์์ ํจ์ฌ ๋ ์ข์ต๋๋ค. ๋์๊ฒ ๊ฐ์ฅ ์ข์ ์ ์ ๊ตฌ์ฑ ์์๊ฐ ์ผ์ข
์ ์ข
์์ฑ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์
๋๋ค. ์์ฒด ๊ตฌ์ฑ ์์๋ก ์ฌ๋ฌ ์ง์
์ ์ ์ ์ํ๋ ๋ผ์ฐํฐ๊ฐ ์๋ ์ฃผ์ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ ์์ ์ด ํ์๋ก ํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์๊ณ ์์ต๋๋ค. ํธ๋ฆฌ ๋์ ์๋ ๊ตฌ์ฑ ์์๊ฐ ๋ฌด์์ ํ์๋ก ํ๋์ง ์ฃผ ๊ตฌ์ฑ ์์๊ฐ ์ ์ด์ ๋ ์์ต๋๋ค.
์ด์ ์ฐ๋ฆฌ๋ ๊ฑฐ๋ํ ๋ชจ๋ ์ ์๊ฐ ์๋ Angular 1์ ์ข์ ์๋ ๋ก ๋์๊ฐ๋๋ค.
์ฑ ์ง์
์ ์ด ๋ค์๊ณผ ๊ฐ์ด ๋ณด์๋ ๋๋ฅผ ๊ธฐ์ตํ์ญ๋๊น?
angular.module("myApp")
.controller("โฆ")
.controller("โฆ")
.controller("โฆ")
.controller("โฆ")
.controller("โฆ")
.controller("โฆ")
.component("โฆ")
.component("โฆ")
.component("โฆ")
.component("โฆ")
.component("โฆ")
.component("โฆ")
.directive("โฆ")
.directive("โฆ")
.directive("โฆ")
.directive("โฆ")
.directive("โฆ")
.directive("โฆ")
.directive("โฆ")
.service("โฆ")
.service("โฆ")
.service("โฆ")
.service("โฆ")
.service("โฆ")
.service("โฆ")
๋๋ ์ด๊ฒ์ด ๊ณผ๊ฑฐ์ ์ํ๋ค๊ณ ์๊ฐํ๋ค. ์ ๋ ์ค๋๋ Angular 1 ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ํ๊ณ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ค๋นํ๊ธฐ ์ํด ng-metadata๋ก ์์ ํ๊ธฐ ์์ํ์ต๋๋ค. ์ ๋ ์ด ์ฑ์ ๊ธ๋ก๋ฒ "์ด ์ฑ์ ๋ํ๋ ์ ์๋ ๊ฒ" ๋ชฉ๋ก์ด ์๋ ์ข ์์ฑ ํธ๋ฆฌ๊ฐ ์๋ค๋ ์ฌ์ค์ ์ ๋ง ์ข์ํฉ๋๋ค.
์ด๊ฒ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์๋ฅผ ๋ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ์ด๊ฒ์ด ์ ์ญ/๋ชจ๋ ๋ฒ์์ ๋ชจ๋ ๊ฒ์ ๋ ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ng2 ํ์ด ๋ณ๊ฒฝ์ ์ํ์ง ์๋ ng1 ์ฌ์ฉ์์๊ฒ ๊ตด๋ณตํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@DaSchTour @damiandennis ์ด ์ํคํ ์ฒ์ ๋ํ ๋นํ์ ์ดํดํ์ง๋ง ์ผ์ข ์ ๊ธ๋ก๋ฒ ๋ฒ์๊ฐ ๋ถ์ ํํ๊ธฐ ๋๋ฌธ์ ์ธ๊ธํ๋ ๋ฐฉ๋ฒ๋ก ์ ๊ธฐ๋ฅ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. https://angular.io/docs/ts /latest/guide/ngmodule.html#! #๊ธฐ๋ฅ ๋ชจ๋
@qdouble ๊ธ์, ๊ฒฐ๊ตญ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ชจ๋๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ณ๊ฒฝ์ผ๋ก ๋ฐํ๋์์ง๋ง ๋ง์ ์์ฉ๊ตฌ๋ฅผ ๋์ ํฉ๋๋ค.
RC4๊น์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ "ํ์ด์ง"/๋ณด๊ธฐ์ ๋ํ ๊ตฌ์ฑ ์์๋ก ์ถฉ๋ถํ์ง๋ง ๋ชจ๋ ๋ณด๊ธฐ์ ๋ํด ๋ชจ๋, ๊ตฌ์ฑ ์์ ๋ฐ ๋ผ์ฐํ ์ ๋ง๋ค์ด์ผ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์๋๋ ์๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ทธ๊ฒ์ด ๋ค๋ฅธ ๋ง์ ์์ ๊ณผ ๊ด๋ จ๋์ง ์์ผ๋ฉด์ ๋ช ๊ฐ์ง ์ผ์ ๋ ์ฝ๊ฒ ํ๋๋ก ์ค๊ณ๋์๋ค๋ ์ธ์์ ์ด๋ป๊ฒ๋ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ฅ ๋ชจ๋ ํจํด์ ์ฌ์ฉํ๋๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ ๋ถ๋ถ์ ์ด๋ค ๊ตฌ์ฑ ์์๊ฐ ํ์ํ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ์ถ๊ฐํ์ฌ ์ข ์์ฑ ์ง์ฅ์ ํผํ๊ธฐ ์ํด ๋งค์ฐ ์๊ฒ ์๋ผ์ผ ํฉ๋๋ค.
๊ฒฐ๊ตญ ๋ชจ๋์ ๋๋ฌด ์์์ ํ์ฌ ๊ตฌ์ฑ ์์์ ์ ์ฌํ ๋ฐ๋ณต ์ข ์์ฑ ๋ชฉ๋ก์ ๊ฐ์ต๋๋ค.
๊ฒฐ๊ตญ, ๊ทธ๊ฒ์ ๊ทธ๊ฒ์ด ์ค๊ณ๋ ๊ฒ์ ํด๊ฒฐํ์ง ๋ชปํ๊ณ ๋ง์ ์์ ์ ์ถ๊ฐํ ๋ฟ์ ๋๋ค. ๋์์ธ๊ณผ ํ์ค ์ฌ์ด์ ์ฝ๊ฐ์ ๋ถ์ผ์น๊ฐ ์๋ค๋ ๋๋์ด ๋ญ๋๋ค.
๊ฐ๋ฐ์๋ ๊ฒ์ผ๋ฅด๊ณ ์๊ฐ์ด ๋ถ์กฑํ๊ณ ์ง๋ฆ๊ธธ์ ํํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ถํธ์คํธ๋ฉ์ ๋ชจ๋ ๊ฒ์ ํฌํจํ๋ ๋น ๋ฅธ ๊ฒฝ๋ก๋ฅผ ํํ ์ ์์ต๋๋ค. ์ ์ด๋ ๊ตฌ์ฑ ์์์๋ ์ข ์์ฑ์ ํฌํจํด์ผ ํ๋ ๋ช ๊ฐ์ง ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ์, ๊ทธ๋ค์ ๋ํ ๊ฒ์ผ๋ฅด๊ณ ์ ์ฒด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํ ๋จ์ผ ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋ค ์ ์์ง๋ง ์ข ์์ฑ์ด ํด๋น ๊ตฌ์ฑ ์์์ ๋ชจ๋ ์์ผ๋ฏ๋ก ๋ถํธ์คํธ๋ฉ ํ์ผ๊ณผ ์์ฉ ํ๋ก๊ทธ๋จ ๋ด์ ๊ฐ ๊ตฌ์ฑ ์์ ํ์ผ ๊ฐ์ ํผํฉ๋์ง ์์ผ๋ฏ๋ก ์์ ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
@DaSchTour ๋ชจ๋ ๋จ์ผ ๊ตฌ์ฑ ์์์ ์์ฒด ๋ฒ์๊ฐ ํ์ํ ๊ฒฝ์ฐ ์, ๋ ๋ง์ ์์ฉ๊ตฌ๋ฅผ ์์ฑํ ๊ฒ์ ๋๋ค. ํ์ง๋ง ng ํ์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๋ชจ๋ ๊ธฐ๋ฅ ์น์ ์ ๋ํด ์ ๋ชจ๋์ ์์ฑํ๋ค๋ ์๊ฒฌ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ถฉ๋ถํ๊ณ ๋ช ๊ฐ์ง ๊ตฌ์ฑ ์์๊ฐ ๊ฐ ๊ธฐ๋ฅ ๊ณต๊ฐ์ ์์ ์ ์์ต๋๋ค.
์ด์ ๋ถ๋ช ํ ๋ชจ๋ ์๋ฃจ์ ์ ๋ง๋ ์ฌ๋์ ์์ผ๋ฉฐ ์ผ๋ถ ์ฌ๋๋ค์๊ฒ๋ ๊ตฌ์ฑ ์์ ์์ค ์ง์๋ฌธ์ด ๋ ๊ฐ๋จํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์๋ ๋ง์ ์๊ฒฌ์ ํ๋์ ๊ฑฐ๋ํ ngModule ํธ๋ฆฌ๊ฐ ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ๋ฅผ ์ํ๋ค๋ ๊ฒ์ ์์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค...
๋๋ ๋นํ์ด ๊ทธ๋ค์ด ์ ์ํ์ง ์๋ ๋ฐ์ง๋งจ ๋์์ธ ํจํด(์ฆ, ํ๋์ ๊ฑฐ๋ํ ngModule์ธ ์ํฐํ๋ผ์ด์ฆ ์ฑ์ ๋ง๋๋ ๊ฒ)๋ณด๋ค ์ค์ ๋์์ธ ์ ์์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒ์ด ๋ ์์ฐ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@qdouble ๋์์ธ ํจํด์ ๊ฐ๋จํฉ๋๋ค. ์ข
์์ฑ์ ์ ์ญ ๋ชจ๋ ๋ฒ์๋ก ์ด๋ํ๋ ๋์ ์ข
์์ฑ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์๊ฐ ๋งค์ฐ ์๊ณ ๊ธฐ๋ฅ์ด ๊ฑฐ์ ์๋๋ผ๋ ์ด์ ๋ชจ๋์ด์ด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. Angular material2๊ฐ ์์ฃผ ์ข์ ์์
๋๋ค. Button์ ํ๋์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ๋ ๋ชจ๋์
๋๋ค. ๋ง์ ๊ฐ๋ฐ์๋ค์ด ๋ชจ๋์ด ๋จ์ํ ๋ฒํผ ์ด์์ ํฌํจํ๊ณ ์๋ค๋ ์ผ๋ฐ์ ์ธ ์คํด์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ํ ๊ฑธ์ ๋ ๋์๊ฐ ์๊ฐํด๋ณด์. https://angularjs.blogspot.com/2016/08/angular-2-rc5-ngmodules-lazy-loading.html ์ด ๊ธฐ์ฌ์ ์์ด๋์ด๋ฅผ ๋ฐ๋ผ๊ฐ๊ธฐ ๋งํ๋ฉด๋๋ ๋ง์ ๋ชจ๋์ด ์๋ค๋ ์ ์์ ๋ด ์์ ์ ์ฐพ์ต๋๋ค. angular material2 ๋ชจ๋ ๋ชฉ๋ก๊ณผ ๋จ์ผ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋ ์ด ๋ชจ๋ ๊ฐ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.
์ฌ์ค ์ด๊ฒ์ด ๋ฐ๋ก angular material2๊ฐ ํ๋ ์ผ์
๋๋ค.
์๋ฌด๋ ์์ ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ์ด์ "๋ชจ๋ " ๊ตฌ์ฑ ์์๋ฅผ ๋ชจ๋๋ก ํฌ์ฅํด์ผ ํ๋ ์ด์ ์ ๋๋ค. ์๋๋ฉด ์ด๊ฒ์ ์ ์ธ์ ๋ถํ ๋ก ๋ด์ผ ํ ์๋ ์์ต๋๋ค. ๊ตฌ์ฑ ์์ ์ข ์์ฑ์ ์ด์ ๋ชจ๋์ด๊ณ ๊ตฌ์ฑ ์์ ์ ์๋ ๊ทธ๋๋ก์ ๋๋ค.
์์ ์ ngModules๊ฐ ์ผ์ ๋ ์ฝ๊ฒ ํ๊ธฐ ์ํ ์ข์ ์ถ๊ฐ ๊ธฐ๋ฅ์ผ ๋ฟ ์๋๋ผ ๋ชจ๋ ๊ฒ์ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์๋ง๋ ๋๊ตฐ๊ฐ๋ ๋ ๋ค ๊ณต์กดํ ์ ์๋ ์ด์ ๋ฅผ ๋ช ํํ๊ฒ ์ค๋ช ํด์ผ ํ ๊ฒ์ ๋๋ค.
@DaSchTour ๊ธ์์, ๋น์ ์ด ๋ง๋๋ ๋ชจ๋ ๋จ์ผ ๊ตฌ์ฑ ์์๊ฐ ์์ฒด ๋ชจ๋์ ํ์๋ก ํ๋ค๋ฉด ngModules๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋ง์ ์์ฉ๊ตฌ๊ฐ ์์ฑ๋๋ค๋ ์ ์ ๋์ํฉ๋๋ค... ์ ๋ ๋จ์ํ ํ์ด ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๋ํด ๊ทธ ์์ค์ ๋ถ๋ฆฌ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์.
Angular material2 ๋ชจ๋ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ ๋ง์ ๋ชจ๋๊ณผ ์ด ๋ชจ๋ ๊ฐ๊ฐ์ด ๋จ์ผ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋์ด ์๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์์ต๋๋ค.
์ด๋ฅผ ์ํด ๊ณต์ ๋ชจ๋์ ์ฌ์ฉํฉ๋๋ค: https://angular.io/docs/ts/latest/guide/ngmodule.html#! #๊ณต์ ๋ชจ๋
์ด์ , ์ ๊ทธ๋ค์ด ์ปดํฌ๋ํธ ๋ฒ์๋ฅผ ๊ฐ๋ ๊ธฐ๋ฅ์ ์์ ํ ์ ๊ฑฐํ๋ ๊ฒ์ด ํ์ํ๋ค๊ณ ์๊ฐํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ์๊ฒ ์ผ๋ถ ๋นํ์ ngModules๋ฅผ ์ค์ ๋ณด๋ค ๋ ์ด๋ ต๊ฒ ์ฌ์ฉํ๊ฑฐ๋ ๋์์ธ์ ๋ ๋ณด๊ธฐ ์ข๊ฒ ๋ง๋ ๋ค๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ณด๋ค ๋๋ฌ์.
๊ตฌ์ฑ ์์ ๋ฒ์ ์ง์๋ฌธ/ํ์ดํ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ๋ํ ๋นํ์ด ์๋ฒฝํ๊ฒ ์ ํจํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ngModules์ ์ข์ ๋์์ธ ํจํด์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@qdouble ngModules ๋ฅผ ์ํ ์ข์ ๋์์ธ ํจํด์ด ์๋ค๋ ๊ฒ์ ์๋ฌด๋ ์์ฌํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ด๊ฐ ์ดํดํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ๋ชจ๋์ ๊ตฌ์ฑ ์์ ์งํฉ์ ๋๋ฌ์ผ ๋ํผ์ผ ๋ฟ์ด๋ฉฐ, ์ด๋ฅผ ๋ ธ์ถํ๋ ์ง์๋ฌธ ๋ฐ ์๋น์ค๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ํ ๋จ์์ ๋๋ค. ๊ทธ๊ฒ์ ํ๋นํ๊ณ ์ข์ ์๊ฐ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌ์ฑ ์์๊ฐ ์๋ ๋ชจ๋์ ๋ํ ์ข ์์ฑ(๋ชจ๋ ๋ด๋ถ์๋ง ์กด์ฌํ ์ ์์)์ ์ ์ํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
@choeller์ ์๋ฅผ ๋ค๋ฉด
๋ชจ๋ TaskDashboard์๋ ๋ค์์ด ์์ต๋๋ค.
Taskitem ๊ตฌ์ฑ ์์๋ Tasklist ๋ด์์๋ง ํ์ํ๋ฉฐ Tasklist๋ Taskitem ๊ตฌ์ฑ ์์์ ์ข ์๋ฉ๋๋ค. Taskfilter์๋ Taskitem ๊ตฌ์ฑ ์์๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์ด์ Tasklist์ ์ข ์์ฑ์ผ๋ก Taskitem์ด ์์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ TaskSearch ๋ชจ๋์ ๋ง๋๋ ๊ฒ์ ๋๋ค. ๋ค์ ์ฌํญ์ ์ถ๊ฐํฉ๋๋ค.
๊ธ์, ๋๋ Taskitem Component๋ฅผ ๋์ณค๊ณ ๊ณ ์ฅ๋ฌ์ต๋๋ค. Tasklist๋ ํญ์ Taskitem์ ์ข ์๋์ง๋ง ์ด ์ข ์์ฑ์ ๋ชจ๋์ ์จ๊ฒจ์ ธ ์์ต๋๋ค. ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ด๋ ค์์ง๊ณ ์ถ๊ฐ ์ค๋ฅ ์์ค๊ฐ ์์ฑ๋ฉ๋๋ค.
์ข์, ๋ชจ๋ ๊ฐ์ด๋๋ฅผ ์์ธํ ์ฝ๋ ๋์ ์ด ์ค์ ์ฐพ์์ต๋๋ค.
๊ตฌ์ฑ ์์, ์ง์๋ฌธ ๋ฐ ํ์ดํ๋ ์ ํํ ํ๋์ ๋ชจ๋์ ์ํด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ์ด ์๋ ์ฌ๊ธฐ์์ ์ ๊ธฐ๋ ์ฐ๋ ค๋ฅผ ์ ํํ ๋ณด์ฌ์ค๋๋ค. ๊ณต์ ๊ตฌ์ฑ ์์๊ฐ ์์ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ด ์์์ ๋๋ ๋ชจ๋ ๊ฒ์ ๋ชจ๋๋ก ๋ถํ ํด์ผ ํ ๊ฒ์ ๋๋ค.
ngModule์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ์ด์ํ๊ณ ํ์ ํ๊ธฐ ์ด๋ ค์ด ์ค๋ฅ์ ๋ํด ์์ ํ๋ ๋์ ํ์ฅ ๊ตฌ์ฑ ์์๊ฐ ์ด์ ์ด์ ์ฒ๋ผ ์ ๋๋ก ์๋ํ์ง ์๋๋ค๋ ๊ฒ๋ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋จ์ํ ํ์ฅํ ์ ์๋ ํ์ํ ์ข ์์ฑ์ ๊ฐ์ง ๊ตฌ์ฑ ์์ ์งํฉ์ด ์์์ต๋๋ค. ์ด์ ํ์ฅ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ๋ ๋ชจ๋์์ ์ข ์์ฑ์ ๊ฐ์ ธ์ค๋ ์์ ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
์์์ @DaSchTour , Taskitem์ Tasklist ๋ชจ๋์ ์ผ๋ถ์ฌ์ผ ํฉ๋๋ค... ๋ฐ๋ผ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ํ๋์ ๋ชจ๋์ด ์๋ ๋ ๊ฐ์ ๊ตฌ์ฑ ์์๊ฐ ํ๋์ ๋ชจ๋์ ์์ด์ผ ํฉ๋๋ค.
@sirajc ๊ฐ ์ง์ ํ๋ฏ์ด ์ผ๋ฐ์ ์ธ ๋์์ธ ํจํด์ ํ๋์ ์ต์์ ์ค๋งํธ ๊ตฌ์ฑ ์์์ ์ถ๊ฐ ๋ฒ์ด๋ฆฌ ๊ตฌ์ฑ ์์๊ฐ ๋ค๋ฐ๋ฅด๋ ๊ฒ์ด๋ฏ๋ก ์ผ๋ฐ์ ์ธ ์ค์ ์ฑ์์ ๋๋ถ๋ถ์ ๋ชจ๋์ ๋ช ๊ฐ์ง ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ตฌ์ฑ ์์ ํจํด ๋๋ ๊ด๋ จ ๊ธฐ๋ฅ ํจํด๋ณ), ํ์ฌ ๊ตฌ์ฑ ์์ ๋ฑ์ ๊ตฌ์ถํ์ง ์๋ ํ ๋ชจ๋๋น ํ๋์ ๊ตฌ์ฑ ์์๊ฐ ์๋๋๋ค.
@qdouble @DaSchTour ์ ์ํคํ ์ฒ๊ฐ ๋ฐ๋์ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ํ๋์ ํ์ผ์ ๋์ดํ๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์์ง๋ง ์ฐ๋ฆฌ๊ฐ ๊ตฌ์ถํ๊ณ ์๋ ์ฑ์ ๋ณด๋ฉด ํ์ฌ @DaSchTour ์ ์ด ์ง์ ๊ณผ ๊ฑฐ์ ์ผ์นํฉ๋๋ค.
๋์์ธ๊ณผ ํ์ค ์ฌ์ด์ ์ฝ๊ฐ์ ๋ถ์ผ์น๊ฐ ์๋ค๋ ๋๋์ด ๋ญ๋๋ค.
๋ฐ๋ผ์ TaskListItem
์ ๊ฐ์ ํ์ด์ง์ ์์ ๋จ์๋ฅผ ๋ํ๋ด๋ ๋ง์ ๊ตฌ์ฑ ์์๊ฐ ์์ผ๋ฉฐ ํน์ ๋ณด๊ธฐ์ 100% ๋ฐ์ธ๋ฉ๋์ด ์์ต๋๋ค. ํด๋น ํ์ด์ง ๊ฐ๊ฐ์ ๋ํ ๋ชจ๋์ ๋ง๋๋ ๊ฒ์ ์์ ํ ๊ณผ์์
๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ชจ๋๋ก ๋ถํ ํ๋ ์ด์ ๋ ๊ฑฐ์ ์์ง๋ง ๊ตฌ์ฑ ์์๋ฅผ ์บก์ํํ๋ ์ด์ ๋ ํจ์ฌ ๋ ๋ง์ต๋๋ค.
ํ ๋ฐ์ฌ
๋ชจ๋ ์์ค์์ ์ผ๋ถ ์ข
์์ฑ์ ์ ์ํ ์ ์๋ค๋ ๊ฒ์ ๋ฉ์ง ์ผ์ด์ง๋ง ๋ ์ด์ ๊ตฌ์ฑ ์์ ์์ค์์ ์ข
์์ฑ์ ์ ์ํ ์ ์๋ค๋ ๊ฒ์ ์ ๋ง ์ฌํ ์ผ์
๋๋ค.
@DaSchTour , material2 ์์ ๋ฒํผ ์ปดํฌ๋ํธ๋ ๋ชจ๋์ ์ฐ๊ฒฐ๋์ด ๋
๋ฆฝ ์คํํ์ผ๋ก ๋ง๋ญ๋๋ค. ๋ฒํผ์ ์ฌ์ฉํด์ผ ํ๋ ์ฌ์ฉ์๋ ButtonsModule
๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๋ํ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด MdButton
๋ฐ MdAnchor
ButtonsModule
๋ํํ๋ฉด ์ฌ์ฉํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
ํ์ผ ์ค๋ณต์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ ๊ฐ๋ ์ ํ๋๋ก ๋ณํฉํ๋ ํ์ด๋ธ๋ฆฌ๋ ๊ตฌ์ฑ ์์/๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์ฑ ์์๋ฅผ ๋ชจ๋๋ก ํ ๋ฒ ์ ์ธํ ๋ค์ ํ์์ ๋ฐ๋ผ ๋ชจ๋๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ํ์ฌ ์ ๊ทผ ๋ฐฉ์์ ์กด์คํ์ง๋ง ์์ฉ๊ตฌ๋ฅผ ์ต์ํํฉ๋๋ค.
@choeller ๋๋ ๋ชจ๋์ ๊ฐ๋ ๊ฒ์ด ๊ตฌ์ฑ ์์ ์์ค์์ ์ข ์์ฑ์ ์ ๊ฑฐํ๋ ์ข์ ์ถ๊ฐ ๊ธฐ๋ฅ์ด๋ผ๋ ๋ฐ ๋์ํ์ง๋ง ์๋ชป๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์๋ฐฑ ๊ฐ์ ๊ตฌ์ฑ ์์๊ฐ ํฌํจ๋ ๊ฑฐ๋ํ ๋ชจ๋์ด ์๋ ๊ฑฐ๋ํ ํ๋ก์ ํธ์ ๋ถํ์ ๊ฒฝํํ์ง ์๋ ๊ฒ์ด ํต์ฌ ์์ด๋์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์คํ๋ ค ์ ๋นํ ์์ ์ค๊ฐ ํฌ๊ธฐ์ NgModules๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ๋ค์ด ์ฌ์ํ์ง ์์ ๋งํผ ์ถฉ๋ถํ ํฌ๊ณ , ๊ทธ๊ฒ๋ค์ ์๊ฐ ๋ง์ง ์์ ๋งํผ ์ถฉ๋ถํ ์์ต๋๋ค. ๋์ ์์ง๋ ฅ๊ณผ ๋ฎ์ ๊ฒฐํฉ์ ๊ตฌ์ ์ปดํจํฐ ๊ณผํ ์๋ฏธ์์ ์ฌ์ฌ์ฉ๊ณผ ๋ชจ๋์ฑ์ ์ด์งํ๋ ๊ฒฝํฅ์ด ์๋ ๋จ์ธต์ ์ ๋ฐ๋ผ ๋ถํ ๋ฉ๋๋ค.
๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ ๋ชจ๋์ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์๋ ๋งค์ฐ ์ ์ฉํ ๊ฐ๋ ์ผ๋ก ํ๋ช ๋ ๊ฒ์ ๋๋ค.
@kylecordes๋ฅผ ์์ฃผ ์ ์์ฝํ์ต๋๋ค. NgModules๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ข์ ๊ตฌ์ฑ์ ๋์ต๋๋ค. ์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋์ด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ฑํฉ๋๋ค.
๊ธฐํ ์ด์ ์๋ ์ง์๋ฌธ์ ๋ํ ์ฃผ๋ณ ๊ฐ์ฉ์ฑ์ด ํฌํจ๋ฉ๋๋ค. ์ด์ ์๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ROUTER_DIRECTIVES๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์ด์ RouterModule.forRoot()
๊ฐ ์ฐ๋ฆฌ๋ฅผ ์ํด ๊ทธ๋ ๊ฒ ํฉ๋๋ค.
BrowserModule, CommonModule, FormsModule์ ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ํตํด ์ง์๋ฌธ์ ํฌํจํ๋ ๊ฒ๋ณด๋ค ๋ ํฉ๋ฆฌ์ ์
๋๋ค.
๋ค๋ฅธ ์ชฝ์ MaterialModule์ ๋ชจ๋ ๊ฒ์ ์ ๊ณตํ๋ฉฐ ๋ ์ธ๋ฐํ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ ButtonsModule ๋ฑ์ด ๋์์ด ๋ ๊ฒ์
๋๋ค.
๊ทธ๊ฒ์ด ๋ฐ๋ก ๊ตฌ์ฑ์ ์๋ฆ๋ค์์
๋๋ค. ๊ทธ๊ฒ์ ๋ฐ์๋ค์ด๊ณ ๋น์ ์ ๊ตํฅ๊ณก์ ๋ง๋์ญ์์ค
์ด ์์ LazyLoading์ด ์์ต๋๋ค. NgModules๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋์ ๋ผ์ฐํ ๊ฐ๋ฅํ ๋จ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ํจ๊ป ๊ฐ์ผ ํ๋ ๊ตฌ์ฑ ์์ ๋ฐ ์๋น์ค์ ์๋ฅผ ์ด๋ป๊ฒ ์ ์ํ ์ ์์ต๋๊น? ๋์จํ ํ์ผ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋คํธ์ํฌ ์์ฒญ์ด ์์ฒญ๋๊ฒ ๋ง์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ๋์ ๋ฒ๋ค์ ์์ฑํ์ฌ ๋ชจ๋ ์ข ์ ํ์ผ์ ๋์ดํ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. NgModule์ ์ง๊ด์ ์ธ ๊ตฌ๋ฌธ์ผ๋ก ์ด๋ฅผ ์ํํฉ๋๋ค.
@kylecordes
์์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์๋ฐฑ ๊ฐ์ ๊ตฌ์ฑ ์์๊ฐ ํฌํจ๋ ๊ฑฐ๋ํ ๋ชจ๋์ด ์๋ ๊ฑฐ๋ํ ํ๋ก์ ํธ์ ๋ถํ์ ๊ฒฝํํ์ง ์๋ ๊ฒ์ด ํต์ฌ ์์ด๋์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์คํ๋ ค ์ ๋นํ ์์ ์ค๊ฐ ํฌ๊ธฐ์ NgModules๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ๋ค์ด ์ฌ์ํ์ง ์์ ๋งํผ ์ถฉ๋ถํ ํฌ๊ณ , ๊ทธ๊ฒ๋ค์ ์๊ฐ ๋ง์ง ์์ ๋งํผ ์ถฉ๋ถํ ์์ต๋๋ค. ๋์ ์์ง๋ ฅ๊ณผ ๋ฎ์ ๊ฒฐํฉ์ ๊ตฌ์ ์ปดํจํฐ ๊ณผํ ์๋ฏธ์์ ์ฌ์ฌ์ฉ๊ณผ ๋ชจ๋์ฑ์ ์ด์งํ๋ ๊ฒฝํฅ์ด ์๋ ๋จ์ธต์ ์ ๋ฐ๋ผ ๋ถํ ๋ฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์์ ๊ฒฐํจ ๋ผ์ธ์ ๋งค์ฐ ๋ค๋ฅด์ง ์์๊น์? ๋์๊ด ๊ฐ๋ฐ์๋ ์์์ฌ์ผ ํ๋๋ฐ ๊ทธ๊ฒ ์ฃผ๋ ๋ถ๋ง์ธ ๊ฒ ๊ฐ๋ค. ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ ์์ํฌ๋ฅผ ๊ตฌ์ถํ ๋ ๋ชจ๋ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ ค๋ ๋ชฉํ๋ ๋ง์ ์ถ๊ฐ ๋ ธ์ด์ฆ๋ก ์ด์ด์ง๋๋ค.
@sirajc
์ด ์์ LazyLoading์ด ์์ต๋๋ค. NgModules๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋์ ๋ผ์ฐํ ๊ฐ๋ฅํ ๋จ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ํจ๊ป ๊ฐ์ผ ํ๋ ๊ตฌ์ฑ ์์ ๋ฐ ์๋น์ค์ ์๋ฅผ ์ด๋ป๊ฒ ์ ์ํ ์ ์์ต๋๊น? ๋์จํ ํ์ผ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋คํธ์ํฌ ์์ฒญ์ด ์์ฒญ๋๊ฒ ๋ง์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ๋์ ๋ฒ๋ค์ ์์ฑํ์ฌ ๋ชจ๋ ์ข ์ ํ์ผ์ ๋์ดํ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. NgModule์ ์ง๊ด์ ์ธ ๊ตฌ๋ฌธ์ผ๋ก ์ด๋ฅผ ์ํํฉ๋๋ค.
๋ด ์์ฉ ํ๋ก๊ทธ๋จ ์น์ ์ ๋ํ ์ปจํ ์ด๋ ์ญํ ์ ํ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ๋ผ์ฐํฐ์์ ์ด ์์ ์ ์ฝ๊ฒ ์ํํ ์ ์์์ต๋๋ค. ์ด ๋ชจ๋์ ํ์ํ ์ง์ ๊ตฌ์ฑ ์์๋ง ๊ฐ์ ธ์์ ์์ฒด ์ข ์์ฑ์ ๊ฐ์ ธ์ต๋๋ค. ๋ชจ๋ ์ ์ ํ ๋ชจ๋ ๋ก๋๋ ์ต์์ ๊ตฌ์ฑ ์์์ ๋ชจ๋ ํ์ ์ข ์์ฑ์ ํฌํจํ์ง ์๊ณ ํด๋น ๊ตฌ์ฑ ์์์ ์ข ์์ฑ ์ฒด์ธ(๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํตํด)์ ๋ก๋ํ ์ ์์ต๋๋ค. ์ผ์ข ์ ๋ชจ๋ ํ์ธ ๋ก์ง์ ์ฌ์ฉํด์ผ ํ๋ ๋ฒ๋ค๋ฌ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๊ฐ๋จํ ๋งํด์ ์ง์ฐ ๋ก๋ฉ ๊ด์ ์์ ๊ฐ๋ฐ์๊ฐ ์ต์์ ๊ตฌ์ฑ ์์์ ํฌํจ๋ ๋ชจ๋ ์ข ์์ฑ์ ์ ์ธํด์ผ ํ๋ ์ด์ ๊ฐ ์์ต๋๋ค.
์ ๋ง ngModule์ด ๋ฌธ์ ๋ฅผ ์ฐพ๋ ์๋ฃจ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค...
์ฃผ์ด์ง ๊ตฌ์ฑ ์์๋ฅผ ์ด๊ณ ์ง์๋ฌธ ๋ฐฐ์ด์ ์ดํด๋ณด๊ณ ์์กดํ๋ ๊ตฌ์ฑ ์์/์ง์๋ฌธ์ ์ ํํ ์ ์ ์๋ค๋ ๊ฒ์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ์๋ง์ ๊ตฌ์ฑ ์์ ์ ์ฒด์ ๊ฑธ์ณ ๋ฒํผ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒ์ด ๋ ์ฅํฉํฉ๋๊น? ์, ํ์ง๋ง ๊ตฌ์ฑ ์์/๋ชจ๋ ํธ๋ฆฌ๋ฅผ ๊ฒ์ํ์ฌ ๊ตฌ์ฑ ์์ Y๊ฐ ๊ฐ์ ธ์ค์ง ์๊ณ ํ ํ๋ฆฟ์์ ๊ตฌ์ฑ ์์ X๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ๊ธฐ ์ํด ๊ตฌ์ฑ ์์/๋ชจ๋ ํธ๋ฆฌ๋ฅผ ๊ฒ์ํ๋ ๊ฒ๋ณด๋ค ์ฝ๊ฐ์ ์ถ๊ฐ ์์ฉ๊ตฌ๋ฅผ ๊ฐ๊ณ ๋ช ํํ๊ณ ์ฆ์ ์ค์บํ ์ ์๋๋ก ํ๊ณ ์ถ์ต๋๋ค.
์์์ ์ฃผ์ฅํ๋ ์ฃผ์ฅ์ ๋๊ตฐ๊ฐ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ์๋ก ๊ฒฉ๋ฆฌ๋ ์ํ๋ก ์ ์งํ๋ ค๋ ๊ฒฝ์ฐ ๊ฐ ๊ตฌ์ฑ ์์์ ๋ํ ๋ชจ๋์ ์์ฑํ ์ ์์ง๋ง ๊ทธ ์์ ์์ ์๋ ๊ตฌ์ฑ ์์๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์์ฉ๊ตฌ๋ฅผ ์์ฑํ๊ฒ ๋๋ค๋ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ๋ค๋ฃจ์ง ์์ ngModule์๋ ๋ถ๋ช ํ ๋ค๋ฅธ ์ด์ ์ด ์์ผ๋ฉฐ, ์์ฉ ํ๋ก๊ทธ๋จ์ ์น์ ์ ๊ธฐ๋ฅ ๋ชจ๋๋ก ๋ฌถ์ ์ ์๋ค๋ ์ด์ ์ด ์์ง๋ง ๋ช ํ์ฑ๊ณผ ๊ตฌ์ฑ ์์๊ฐ ์บก์ํ๋๋ ๋ถ๋ถ์ ๊ดํด์๋ ์ค์ ๋ก ํ ๊ฑธ์ ๋ค๋ก ๋ฌผ๋ฌ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค. ๋ชจ๋ ๊ณณ์์ ๋ฒ์๋ฅผ ๋์ถํ์ง ์๋ ์ฝ๋.
ng2 ํ์ด ng1์์ ์ปค๋ฎค๋ํฐ์ ํด์ผ ํ๋ "๊ฐ๋ ํ๋งค"์ ์ผ๋ถ๋ "์, ๊ฐ ๊ตฌ์ฑ ์์์ ๋ํ ์ง์๋ฌธ์ ๊ฐ์ ธ์ ์ ์ธํด์ผ ํ์ง๋ง ์ฐ๋ฆฌ๋ฅผ ๋ฏฟ์ผ์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ". ์ ๋ ํ ๊ตฌ์ฑ์์ด ์ฃผ์ด์ง ์๊ฐ์ ๋งค์ฐ ์์ ๊ตฌ์ฑ ์์ ํ์ ์งํฉ์์๋ง ์์ ํ ์ ์๋ ๋๊ท๋ชจ ํ ํ๊ฒฝ์์ ๊ฐ๋ ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ์ํด ์ฝ๊ฐ์ ๋ฐ๋ณต์ ํตํด ๊ณ ํต์ ๊ฒช์ ๊ฒ์ด๋ผ๊ณ ๊ตณ๊ฒ ๋ฏฟ์ต๋๋ค.
์ต์ํ ngModule๊ณผ directives/pipes ์์ฑ์ด ๊ณต์กดํ ์ ์๋ ์ด์ ๋ ์ ์ ์์ต๋๋ค. ๋์์ ng2, ์ต๋ RC5์ฉ์ผ๋ก ์์ฑ๋ ๋ชจ๋ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๋จ์ผ ๊ตฌ์ฑ ์์๊ฐ ์ด์ ์ฌ์ํ ๋ฆฌํฉํ ๋ง์ด ํ์ํ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋ด๊ฐ ๊ฐ๋ฐ ํ๋ฐ๋ถ์ ์์ํ ์ ์๋ ๊ทธ๋ฐ ์ข ๋ฅ์ ๋ณํ๊ฐ ์๋๋๋ค...์์งํ ์๋นํ ๋นํน์ค๋ฝ์ต๋๋ค.
ngModules๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋๋ก ๊ตฌ์ฑํ๋ ค๋ฉด ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค... ๊ทธ๋ฌ๋ ๊ฐ์ฅ ํฐ ์คํด๋ ๋ชจ๋์ด ์ํ๋ ๋งํผ ํฌ๊ฑฐ๋ ์์ ์ ์๋ ํ์ค์์ ํน์ ๋ฒ์ ์์ค์ ๊ฐ์ํ๋ค๋ ๊ฒ์ ๋๋ค. be.
๋ชจ๋ ๋จ์ผ ๊ตฌ์ฑ ์์์ ๋ํด ์ ๋ชจ๋์ ์ ๋์ ์ผ๋ก ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ ๋ง์ ์์ฉ๊ตฌ = ์ ํจํฉ๋๋ค.
๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋จ์ผ ๊ตฌ์ฑ ์์์ ๋ํด ๋ชจ๋์ ์์ฑํด์ผ ํจ = ์ ํจํ์ง ์์(ํนํ ์ค๋งํธ/๋ฒ์ด๋ฆฌ ๊ตฌ์ฑ ์์ ํจํด ๋ฐ ๊ธฐ๋ฅ ํจํด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ)
์ค๋ ์ฒ์์ผ๋ก ๋ง์ ๋๋ฃ๋ค์ด ๋์๊ฒ ์ ํ ํด๋ผ์ด์ธํธ ์ธก / JavaScript ํผ๋ก๋ฅผ ๋๊ผ์ต๋๋ค. ๋๋ ์ง๋ ๋ฉฐ์น ๋์ ์๋ก์ด RC5 ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ ์ํด RC4 ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฆฌํฉํ ๋งํ๋ ๋ฐ ์๋ง์ ์๊ฐ์ ํ๋นํ์ต๋๋ค.
ํนํ ๊ฐ๋ฐ์๊ฐ ๊ตฌ์ฑ ์์ ์ข ์์ฑ์ ๊ตฌ์ฑํ๋ ค๋ ๋ฐฉ์์ ๋ํ ์ ํ๊ถ์ ์ ๊ณตํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ์ด ์ค๋ ๋์ ์ฌ๋ฌ ๊ฐ์ ์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๋๋ ๋ ํฐ ngModule์ด ๊ตฌ์ฑ ์์ ๊ฐ์ ๋ช ํํ ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ํฌ์์ํค๊ณ ๋ ์์ ngModule์ด ๊ฐ ๊ตฌ์ฑ ์์์ ์ถ๊ฐ์ ์ธ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ซ์ดํฉ๋๋ค. ๋ชจ๋์ ๋ถ์ํ ๋ ๋ด๊ฐ ์๋ ๊ฒ์ ์ฐธ์กฐ๋ ๊ตฌ์ฑ ์์ ์ค ์ ์ด๋ ํ๋์ ๋ชจ๋์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ ํ์ ์ ์ธ์ ๋ด์ฉ์ด ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ชจ๋์ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋๋ก ๋ถ๋ฆฌํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ชจ๋์ ํ์ํ ์ข ์์ฑ์ ๊ฒฐ์ ํ๋ ๋ฐ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช๊ฒ ๋ฉ๋๋ค(์ปดํฌ๋ํธ ํ ํ๋ฆฟ์ ์ฃผ์ ๊น๊ฒ ๊ฒ์ฌํ๋ฉด ์ด๋ ์ ๋ ๋์์ด ๋ฉ๋๋ค).
๋ง์ง๋ง์ผ๋ก ๊ตฌ์ฑ ์์๋ฅผ ๋ด๋ณด๋ด๋ ๊ฒ์ "์์" ๊ฒฝ์ฐ ๊ตฌ์ฑ ์์๊ฐ ๋ ๋๋ง๋์ง ์๊ณ ์ค๋ฅ๊ฐ ํ์๋์ง ์์ต๋๋ค. ๋งค์ฐ ํํํ ๋ชจ๋ ๊ทธ๋ํ๊ฐ ์์ผ๋ฉด ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. ๋ ๋ฒจ์ด ๋ง์ ๋๋ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค!
์ด ๋จ๊ณ์์ ๋๋ ๋๋ดํ๊ณ ์ค๋งํ๊ณ ๋๋ดํฉ๋๋ค. ๋๋ ์ง๊ธ ๋ด๊ฐ ์์ผ๋ก ๋์๊ฐ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ๋ค. ๋ ๋์ ๊ท ํ์ ์ฐพ์ ์ ์๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค.
์ด ๋จ๊ณ์์ ๋๋ ๋๋ดํ๊ณ ์ค๋งํ๊ณ ๋๋ดํฉ๋๋ค. ๋๋ ์ง๊ธ ๋ด๊ฐ ์์ผ๋ก ๋์๊ฐ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ๋ค. ๋ ๋์ ๊ท ํ์ ์ฐพ์ ์ ์๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค.
์ฌ๊ธฐ์ ์์ ์ ์ด ๊ธฐ์ ์ด ์์ฐ ์ค๋น๊ฐ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์๋ง์ ๊ฐ๋ฐ์๊ฐ ์์ผ๋ฉฐ ๋ฆด๋ฆฌ์ค ํ๋ณด๋ผ๊ณ ํ์ง๋ง ๋ชจ๋ ์ ํ๋ณด๋ ํ๊ธฐ์ ์ธ ๋ณ๊ฒฝ์ ๊ฐ์ ธ์ค๊ณ ์ํ์ฒ๋ผ ๋๊ปด์ง๋ค๋ ๊ฒ์ ๋๋ค.
๋ง์ ํ์ด ์ ์ฑ์ ์ํ ์ํคํ ์ฒ์ ๋ช ์๊ฐ์ ํฌ์ํ์ผ๋ฉฐ ์ด์ ๋ชจ๋ ๊ฒ์ด ์๋ง์ง์ฐฝ์ด ๋์๋ค๊ณ ํ์ ํฉ๋๋ค.
๋ค์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฌด์์ ๋๊น? ์์์กฐ์ฐจ ํ ์ ์์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ๋ค์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์๊ฐํ ๋ฐฉ๋ฒ์ ์ฐพ์๊น ๋๋ ต์ต๋๋ค.
RC5 ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์:
ํ์ง๋ง Angular 2 ์ฝ๋๋ฅผ ์ ํ ์์ฑํ์ง ์์๋ค๋ฉด ์๋ง๋ "๊ทธ๋ฐ๋ฐ ์ ๋ด๊ฐ ์ด ๋ชจ๋ ๊ฒ์ ๋์ดํด์ผ ํฉ๋๊น!?"๋ผ๊ณ ์๋ฌธํ์ ๊ฒ์ ๋๋ค. - ํนํ Angular 2์ ํน์ ์ง์๋ฌธ๊ณผ ํ์ดํ๊ฐ "ํน๋ณ"ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒฝ์ฐ - ์๋ฌด๊ฒ๋ ํ์ง ์๊ณ ๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค(์: *ngFor / *ngIf / *ngSwitch).
๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ฝค ์ค๋ซ๋์ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ ์ง๋ฌธ์ ํ๋ ๊ฒ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. RC5๊น์ง Angular ํ, ์จ๋ผ์ธ ํ์ต ๋ฆฌ์์ค, ์ฑ ๋ฑ์ ๋ชจ๋ ์ด๋ฌํ ์ ์ธ์ด ํ์ํ ์ด์ ๋ฅผ ๋งค์ฐ ๋ช ํํ๊ฒ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ฌ๋์ด ์ค๋์ ์ ๊ทธ ์ฌ์ค์ ๋ฐ์๋ค์ธ(์ผ๋ถ๋ ์์ฉํ) ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
์ผ๋ถ๊ฐ "ํน๋ณ"ํ๊ณ ์ ์ธํ ํ์๊ฐ ์๋ ์ด์ ์ ๋ํ ์ง๋ฌธ์ ๊ดํด์๋ "์ถ๋ณต"์ ์ ๋นํํ ์ ์์ ๋งํผ ์ด๋์๋ ์๋ ์ค์ํ "๋ฎ์ ์์ค" ์ง์นจ ๋ชฉ๋ก์ด ์๋ค๋ ๋ฐ ๋ฐ๋ํ๋ ์ฌ๋์ ์์ ๊ฒ์ ๋๋ค. ํ๋ซํผ ์์ ์(Angular ํ)๊ฐ ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋จ์ผ ngModule์ ๋ํ ์ง์๋ฌธ ํธ์ด์คํ ์ ์ฒ๋ฆฌํ๋ ์ฝ๋๊ฐ ์ด๋ฏธ ์๊ณ ํด๋น ์ฝ๋๊ฐ ์ต์ข ์ฌ์ฉ์์๊ฒ ๋ณด์ด์ง ์๋ ๊ฒฝ์ฐ ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ชจ๋ ํ์ฉํ๋ฉด ์ด๋ค ํผํด๊ฐ ์์ต๋๊น? ๊ฐ๋ฐ์๊ฐ ์ ๊ทผ ๋ฐฉ์์ ํผํฉํ์ฌ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ด๋ค ์ผ์ด ๋ฐ์ํ ์ ์๋์ง์ ๋ํ ์ผ๋ถ ๋ณต์ก์ฑ์ ์ธ์ํ์ง ๋ชปํ ์ ์์ผ๋ฏ๋ก ์ด๋ ์ง์ ํ ์ง๋ฌธ์ ๋๋ค. Angular 2์๋ ๋ชจ๋ธ ๋ ํ ํ๋ฆฟ ๊ธฐ๋ฐ ํ์, 3๊ฐ์ง ๋ค๋ฅธ ์ธ์ด ์ ํ, ์ ๋ ฅ/์ถ๋ ฅ/ํธ์คํธ ๋ฐ์ฝ๋ ์ดํฐ ๋ ์์ฑ ์ ๊ทผ๊ณผ ๊ฐ์ ๋ค๋ฅธ "๋ถํ ์ ํ"์ด ๋ง์ด ์์ต๋๋ค.
๊ณ์ํ ์ ์์ง๋ง ๋ด๊ฐ ๋งํ๋ ค๋ ์์ ์ Angular ํ๊ณผ ์ปค๋ฎค๋ํฐ๊ฐ _release์์ ๋ ๋ช ์์ ์ธ ๊ฒ์ด _์ข์_ ์ผ์ด๋ผ๋ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์๋นํ ์๊ฐ์ ํฌ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ํ๋ณด 5_ ๋ชจ๋ ์๊ฐ์ -- ๊ฝค ์ค๋ซ๋์ ๋ฌธ์ ๊ฐ ๋์ง ์์๋ ํด๊ฒฐ์ฑ ์ ์ฐ๋ฆฌ์๊ฒ ์ ์ํฉ๋๋ค.
ํ์ ์ค ๋๊ตฐ๊ฐ๊ฐ ๋ผ์ด๋ค๊ณ ์ถ์ ๋๋์ด ๋ญ๋๊น? ๋๋ ์ด๊ฒ์ด ๋ฐํฅ์ค์ด ๋๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค. ๋๋ ๋ ผ์์ ๋ค๋ฅธ ์ชฝ์ ๋ฃ๊ณ ์ถ์ต๋๋ค. ๋๊ตฌ, ๊ต์ก ๋๋ ์ฐ๋ฆฌ๊ฐ ๊ฒ์ผ๋ก ๋ณด๊ธฐ์ ์ต์ข ๋ฆด๋ฆฌ์ค์ ์ผ๋ง๋ ๊ทผ์ ํ๋์ง์ ๊ฐ์ ๊ฒ๋ค์ ๊ณ ๋ คํ์ง ์๊ณ ๊ฐ์๊ธฐ ๋๋ฌด ํฐ ๊ฒ์ด ๋์จ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ํ ๋ก ์ ๋งค์ฐ ๊ธฐ๋๋๋ Angular 2: ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ผ์ฐ ๊ฐ๋ฐ์ ์์ํ๋ ค๋ ๋ง์ ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ํฐ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ต๋๋ค. ์ ๋ ๋ฒ ํ 17๋ถํฐ Angular 2๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฐ๋ ์ฆ๋ช ์ ๋ง์ด ํ๊ณ ์ค์ํ ํ์ฌ์ ์กฐ์ง์์ ์ด๋ฅผ ์ฑํํ์ต๋๋ค. ํํ๋ ์ ํ์ง๋ง ์ ํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ๊ฐ์ฅ ์ต๊ทผ์ ํ๋ก์ ํธ ์ค ์ผ๋ถ๋ POC์์ผ๋ฉฐ ์ ํฌ๋ Vue.js์ ๋ํ ๊ฒ์ด์์ต๋๋ค. Angular 2๋ ๋ถ๋ช ํ ๊ทธ ์ธ์์์ ์น๋ฆฌํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค๋๋ ๋ชจ๋ ์ฝ๋ ์ฌ์์ฑ, ๋ณ๊ฒฝ ์ฌํญ ๋ณ๊ฒฝ, RC ๋ฆด๋ฆฌ์ค๊ฐ ์๋ ์ฌ๋๋ค์ด ์ ๋ฅผ ์ซ๊ธฐ ์์ํ๊ณ ์๋นํ ์ฌ๊ฐํด์ก์ต๋๋ค. ๋ด๊ฐ Vue๋ React ๊ฐ๋ฐ์ ์ ์ํ๋ค๋ฉด ๊ทธ๋ ์ง ์์์ ๊ฒ์ด๊ณ Angular 2๊ฐ ์ฌ๋๋ค์ ๋ฃ์ ์ ์๋ค๋ ๋ถ์ ๋๋ฌธ์ ๋งค์ฐ ์ค๋ง์ค๋ฝ์ต๋๋ค.
Angular ํ๊ณผ ๋์ผํ ๋ฆด๋ฆฌ์ค ํ๋ณด ์ ์๋ฅผ ๊ณต์ ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
NgModule ์ฃผ์ ์ ๊ดํด์๋ @jpsfs ์ ์์ ํ ๊ณต๋ ์๋ช
ํ์ต๋๋ค. ๋ชจ๋ ์ ์ธ ๋ด์ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๋ง์ดํฌ๋ก ๊ตฌ์ฑ ์์๋ฅผ ๋์ดํด์ผ ํ๋ ๊ฒฝ์ฐ prune
๊ธฐ๋ฅ์ด ์ด๋๊ฐ์ ์๊ฑฐ๋ ๋ชจ๋ ๊ฒ์ด ๊ฐ๋ ฅํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ๋ง์ ์, ๋๊ท๋ชจ ํ๋ก์ ํธ์๋ ๋๋ฌด ๋ฏผ๊ฐํฉ๋๋ค...
์ด ์ถ๊ฐ ๋์ ์์ค์ ๋ชจ๋์ฑ์ ๊ฑฐ์ ๋ถ๊ฐํผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค์ํ ๊ฒฝ์ ํ๋ ์์ํฌ๋ ๊ฒฐ๊ตญ ์ ์ฌํ ๊ฒ์ผ๋ก ๋๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ด ์๋ก์ด ๊ฑฐ์น ๋ชจ๋ ์์คํ ์ ๊ธฐ๋ณธ ๋ชจ๋ ์์คํ ๊ณผ ์์ ํ ์ง๊ตํ๋๋ก ๋ง๋๋ ๊ฒ์ด ์ ๋ง๋ก ํ์ํ์ง, ์๋๋ฉด ๊ฐ ์ต์์ ๋๋ ํ ๋ฆฌ์ ๊ทธ ์์ ํฌํจ๋ ๋ชจ๋ Es6 ๋ชจ๋์ ์๋ฌต์ ์ผ๋ก ๋ง๋ค ์ ์์๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ฑฐ์น NgModule๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์๋ง๋ ์ด๋ฌํ ๊ท์น ๊ธฐ๋ฐ ๋ฉ์ปค๋์ฆ์ด ํ์ฌ ๋ฉ์ปค๋์ฆ ์์ ์ถ๊ฐ๋ ์ ์์ผ๋ฏ๋ก ์ด๋ฌํ ๊ท์น์ ๋ฐ๋ฅด๋ ค๋ ํ๋ก์ ํธ์ ๋ํด NgModule ์์ฉ๊ตฌ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
(๋ฌผ๋ก ๋๋ "RC" ๋จ๊ณ์ ์ด๋ฌํ ์ค๋ํ ๋ณํ์ ๋ํ ์ข์ ๊ฐ์ ์ฌ๊ธฐ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๊ณต์ ํฉ๋๋ค. ํ์ง๋ง ์ฝ์ด ํ๋ ๋ชจ๋ ์์ ์ ์๋ฃํ๋ค๋ฉด ์์ ๋ ๋ฒจ์ ๊ณต๊ฒฉํ์ ๊ฒ์ ๋๋ค. ๋ชจ๋์ฑ, ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ถ์งํ๋ ํ(์ง์ฐ ๋ก๋ฉ, ์ฌ์ ์ปดํ์ผ)์ ๋ฆด๋ฆฌ์ค ํ๋ณด ๋จ๊ณ๊ฐ ์๋๋ผ ํ๋ก์ ํธ์ ์์ ๋จ๊ณ์ ํจ์ฌ ๋ ๊ฐ๊น์ต๋๋ค. ์ธ์์ด ๊ทธ๋ ์ง๋ง ํญ์ ๋ค๋์๋ณด๊ณ "๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ์๊ณ ์๋ ๊ฒ์ ๊ทธ๋๋ ์๊ณ ์์๋ค...")
์ปดํ์ผ ์ง์์ด ngModule ์ถํ์ ์ฃผ๋ ์ด์ ์ธ ๊ฒฝ์ฐ ์ง์๋ฌธ ๋ฐ ํ์ดํ์ ๋ํ ๊ธฐ์กด ๊ตฌ์ฑ ์์ ๊ธฐ๋ฐ ๋ฒ์๋ฅผ ํ์คํ ๋์ฒดํด์๋ ์๋ฉ๋๋ค.
๋ฐ๋ฉด์ ์ต๊ทค๋ฌ ์ปดํ์ผ๋ฌ๋ ๊ฒฝ๋ก ๊ตฌ์ฑ ๋ฐ ์ข
์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ก ์ ์ผ๋ก ์์ฒด์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ์ ์ ํ ์ปดํ์ผ ๋จ์(๋ชจ๋)๋ก ๋ถํ ํ ์ ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ ์ด ๋ณํ๊ฐ ํฐ ์ด์ ์์ด ์์ฉ๊ตฌ๋ฅผ ๋ฎ์ถ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ชจ๋์ ์ฌ์ฉํ๋ ๋์ ๊ตฌ์ฑ ์์๋ฅผ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋จ์๋ก ์ฌ์ฉํ ์ ์๋ค๊ณ ์ฃผ์ฅํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์๋ง๋ ์ฌ๋๋ค์ด rc-5 ์ด์ ์ ํ๋ ์ผ์ ๋๋ค.
๋ชจ๋์ด ์ด ํ๋ ์์ํฌ์ ๋ด๋ถ ๋ชฉ์ (์: ์ง์ฐ ๋ก๋ฉ ๋ฐ ๊ด๋ จ ํญ๋ชฉ)์ ํ์ํ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์ค์ผ์ํค๊ณ ๋ ๋์ ์ฝ๋ฉ ๊ฒฝํ์ ๋ง๋ค์ง ์๋๋ก ๊ฐ๋ฐ์์๊ฒ ์ด๋ป๊ฒ๋ ์จ๊ฒจ์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ์ ์ง ๋ณด์์ ๋ํด ์ด์ผ๊ธฐํ์ง๋ ์์ต๋๋ค ...
๋ด๊ฐ angular2๋ฅผ ์ฒ์ ๋ดค์ ๋ ๋๋ '์ด๋ด, ๊ทธ๋ค์ ์ด๊ฒ์ ๊ฐ์ง๊ณ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ณ ์๋ค. ๋ง์น ๊ทธ๋ค์ด angular 1์์ ๋ญ๊ฐ๋ฅผ ๋ฐฐ์ด ๊ฒ ๊ฐ๋ค'๊ณ ์๊ฐํ๋ค. Angular 1์์ ๋ด๋ถ ๋ชจ๋์ ๋ฒ๋ฆฌ๊ณ ๋์ ES ๋ชจ๋์ ์ฌ์ฉํ์ผ๋ฉฐ ๋ค๋ฅธ ๋ณ๊ฒฝ ์ฌํญ(๊ตฌ์ฑ ์์, typescript ๋ฑ)๋ ํ์ํ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์์ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด ๊ธฐ๋ค๋ฆด์๋ก ๊นจ๋ ๋ณ๊ฒฝ ์ฌํญ, ๋ฌธ์ ๋ถ์กฑ ๋ฐ ๋น์ฝํ ์ค๋ฅ ๋ฉ์์ง ๋๋ฌธ์ ์ ๋ฅผ ์์ธ ๋ฆฌ๊ฒ ๋ง๋ญ๋๋ค. ์ด์ ์ด NgModules๋ฅผ ์ฌ์ฉํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก Angular 1 ์ดํ ๋ณ๊ฒฝํ ํ๋ ์ด์์ ํ๋ฅญํ ์์ ์ ์คํ ์ทจ์ํฉ๋๋ค.
์ค์๊ฐ์์ผ๋ก rc-2 ๋๋ 3(์ด๋ก ์ ์ผ๋ก ๊ฑฐ์ ์์ ์ ์)์ผ๋ก ์์ํ ์ฑ์ด ์๋ ๊ฒฝ์ฐ ์ด์ ์ข์ angular2 rc-5 ์ฑ์ ๋ง๋ค๊ธฐ ์ํด ๋ง์ ์์ ์ ์ํํด์ผ ํ๋ฉฐ ์ด๋ป๊ฒ๋ ๊ณ ๊ฐ ๋ฐ ๊ธฐํ ๊ฐ๋ฐ์ ์ด๊ฑฐ. ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ๊ทธ๋ ๊ฒ ํ๋ค ํด๋, ์ ์ ๋น์ ์ด ๋ค์์ ๋ฌด์์ ๋ฐ๊ฟ์ง ์๊ณ ์๊ณ ๋ด ์ผ์ด ํ๋ ๊ฒ์ผ ์๋ ์์ต๋๋ค.
๋๋ Angular 2๊ฐ ์ผ๋ง ๋์ ์ด๊ธฐ ๋จ๊ณ๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ฐ๋ฆฌ๋ RC-5์ด๊ณ ์ฌ๋๋ค์ ์ง๊ธ Angular 2๋ฅผ ์ฌ์ฉํ์ฌ ๊ฝค ๊ฒฌ๊ณ ํ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ API ๊ด์ ์์ ๊นจ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ๋ฐฉ๋ฒ์ผ๋ก ๊นจ๋ ๋ณ๊ฒฝ์ ๊ณ์ํ๊ณ ์์ต๋๋ค. Angular๋ก ์๊ฐํ๋ ๊ฒ.
ngFor๊ฐ ์ข์ง ์๊ณ ์ผ๋ถ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ 5๊ฐ ๋ฆด๋ฆฌ์ค์์ ๊ตฌ์ฑ ์์ ์ฃผ์ ์ด ๋์ ์ผ๋ก 3๋ฒ ๋ณ๊ฒฝ๋์ง๋ง ์ด๊ฒ์ ์์ฉํ๊ณ ์ดํดํ ์ ์์ต๋๋ค. ์ฑ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ฐ์๊ฐ ์ด ํ๋ ์์ํฌ์์ ์๊ฐํ๋ ๋ฐฉ์์ ๊นจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ํ๋ฐ๋ถ์ ๋๋ฌด ๋ฆ์ด ๋ถํํ๋ ๋ฐ์๋ค์ผ ์ ์์ต๋๋ค.
์ด์จ๋ , ๋ณด์๋ค์ํผ ๋ง์ ์ฌ๋๋ค์ด ๋ด ๋ง์ ๋์ํ๊ณ ์ผ๋ถ๋ ๋ ํ๊ฐ๋ฉ๋๋ค. ๋น์ ์ ์ฌ๋๋ค์ด ์ ๋ขฐํ๋ ๊ฑฐ๋ํ ํ๋ ์์ํฌ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง(๋๋ถ๋ถ Google์ด๊ธฐ ๋๋ฌธ์) ๊ทธ๊ฒ์ ๋ชจ๋ ๊ฒ์ ๊ฑธ ์ ์๊ฑฐ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ์ ํ๊ถ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ ์ ์์ต๋๋ค(JS์ ๋ํด ์ด์ผ๊ธฐํ ๋ ๋ง์ ๊ฒ์ด ์์ต๋๋ค).
์ ๋ชจ๋์ ํ ํ๋ฆฟ์ด ์์ผ๋ฉด ๊ตฌ์ฑ ์์๊ฐ ๋ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ํด ์๊ฐํด๋ณด์ญ์์ค.
๋ค์ ๋จ๊ณ๋ ๋ชจ๋ ๋ณ์์ ๊ธฐ๋ฅ์ ๊ตฌ์ฑ ์์์์ ๋ชจ๋ ํด๋์ค๋ก ์ด๋ํ๋ ๊ฒ์ ๋๋ค. ์ง์งํ๊ฒ. ๊ทธ๋ฐ ๋ค์ ์ฐ๋ฆฌ๋ ๋ฐ์ง์ด๋ ๋ชจ๋ ๋ด์์ _๊ฐ๋ฅํ ๋ชจ๋ _ ํ๋์ ๊ฑฐ๋ํ ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค. ์ด๊ฒ์ ๊ต์ฅํ ๊ฒ์ ๋๋ค! ์ ์ ์ธ๊ณผ ์ข ์์ฑ์ ์ค์ ์ง์คํํ๋ ๊ฒ์ ์ค๋จํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ ๋ง์ ๋ถ์ฐํ๋๊ณ ๊ตฌ์กฐํ๋ ์ฝ๋ ๋ผ์ธ์ด ์์ต๋๋ค!
ํต์ฌ ํ์ ๋๊ตฐ๊ฐ๊ฐ ์ด ๋ชจ๋ ๊ฒ์ ๋ํด ๋งํ ์ ์์ต๋๊น? ์ง๋ ์ฃผ๊ฐ ํ์์ ๋ฉ๋ชจ์์ ํ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ API๋ฅผ ์ ๊ฑฐํ๋ ์์ ์ ์งํํ๊ณ ์์ต๋๋ค.
@mhevery
์ค๋ ์ ๊ทธ๋ ์ด๋ํ์ ๋ ์ด ์ ์ฒด ๊ฒ์ ์์ ์ผ๋ก ์ธํด ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ ๋ง ๋ฏธ๋ฌํ๊ฒ ์์๋์์ต๋๋ค.
SpectrumComponent
๋ผ๋ ๋ ๊ฐ์ ๊ตฌ์ฑ ์์๊ฐ ์์๊ธฐ ๋๋ฌธ์ #10850๋ง ์กด์ฌํ๋ค๊ณ ํ์ ํฉ๋๋ค(์ ํ๊ธฐ ์์ด ํ์ํ ํ๋์ ์ ์ฒด ํ์ด์ง์ ์ ํ๊ธฐ๋ก ์๊ฐํํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ตฌ์ฑ ์์์์ ์ฌ์ฉ๋๋ "๊ณต์ " ๊ตฌ์ฑ ์์ ํ๋). ํธ์ด์คํ
์ด ํผ๋๋ ์ ์์ต๋๋ค. directives:
์ ์ธ์ ๊ทธ๋ ์ง ์์ต๋๋ค.๋ด SVG ๊ตฌ์ฑ ์์์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ ์์๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์ ๋ ํฐ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ํด๋์ค ์ ํ๊ธฐ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๊ณณ(!)์์ ๊ตฌ์ฑ ์์ ์ธ์คํด์คํ๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ง ์๋๋ก ๋ฒ์๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ์์ง ๋ชจ๋ฆ ๋๋ค.
์์ฆ์ ๋๊ท๋ชจ ํ๋ก์ ํธ์์ "๋ฒ ํ" ๋ฐ "๋ฆด๋ฆฌ์ค ํ๋ณด"(ASP.NET Core๊ฐ ๋ ๋ค๋ฅธ ์ ๋ช ํ ์์)์ ์๋ฏธ๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ด ์ ํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์ ๊ทธ๋๋ก ์ด๋์์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋์ผ๋ก ์ค๋จ์ํฌ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ง๋ฉดํ๋ฉด ์๊ฐ๋ณด๋ค ์ค๋ง์ค๋ฝ์ต๋๋ค. ๊ทธ๋ฌํ ๋ณํ์ ํจ๊ป ์ค๋ ์ฝ์์ด ํ๋ฃจ๋นจ๋ฆฌ ๊ฒฐ์ค์ ๋งบ๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค.
ngModules๋ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ตฌ์ฑ ์์ ์์ค์์ ์ ์ธ/์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๋ฉด ๊ทธ๋ ์ง ์์ต๋๋ค.
์์ ์
๋ค์ํ ๋ํ ์์๊ฐ ํฌํจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์ต๋๋ค(์ผ๋ถ ๊ฐ๋จํ ๋ํ ์์ - ์ด๋ฅผ ๋จ์-1 ๋ฐ ๋จ์-2๋ผ๊ณ ๋ถ๋ฅด๊ณ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ๋ ๋ณต์กํ ๋ํ ์์๋ฅผ ๋ณตํฉ 3์ด๋ผ๊ณ ํฉ์๋ค).
ํ์ฌ ๋๋ ๊ฐ๋จํ ํด๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค (๋ถ๋ช ํ ์ฑ์ ์ด๊ฒ์์ ๋ฒ์ด๋ฌ์ต๋๋ค)
- dialogs
- simple-1 (containing single component and template for simple-1 dialog)
- simple-2 (containing single component and template for simple-2 dialog)
- complex-3 (contains the main complex-3 component plus a number of other internal components)
- internal-component-1
- internal-component-2
- internal-service-3
๋์๊ฒ ์ด๊ฒ์ ๊ฒฉ๋ฆฌ๋ ๊ธฐ๋ฅ ๋ชจ๋์ ๋ฃ์ ์ ์๋ ์๋ฒฝํ ๊ธฐ๋ฅ ์ธํธ์ ๋๋ค. ๊ทธ๋์ ๋๋ ๋ง๋ถ์ธ๋ค
dialogs.module.ts
- simple-1
- simple-2
- complex-3
- internal-component-1
- internal-component-2
- internal-service-3
๊ทธ๋ฆฌ๊ณ Simple1Component, Simple2Component ๋ฐ Complex3Component๋ฅผ DialogsModule์ ์ ์ธ์ผ๋ก ์ถ๊ฐํฉ๋๋ค. ์๋ฒฝํ๊ณ ์ ์๋ํ๋ฉฐ ์์ ํ ์๋ฏธ๊ฐ ์์ต๋๋ค.
ํ์ง๋ง...
complex-3์ ๋ชจ๋ ๋ด๋ถ ๊ตฌ์ฑ ์์๋ ์ด๋ป์ต๋๊น? ์ด์ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
์ด๋ค ์ค ์ด๋ ๊ฒ๋ ์ค์ ๋ก ์๋ฏธ๊ฐ ์์ผ๋ฉฐ ์์ฉ ํ๋ก๊ทธ๋จ์ด ํ์ฅ๋จ์ ๋ฐ๋ผ ๋ ์ฌ์ด์ ์ถฉ๋๋ง ์ฆ๊ฐํ ๊ฒ์ ๋๋ค.
๋์๊ฒ ํฉ๋ฆฌ์ ์ด๊ณ /๋ช ๋ฐฑํ๊ณ /์ ์งํ ์ ์๋ ์ ์ผํ ์๋ฃจ์ ์ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ต์์ ๊ตฌ์ฑ ์์(simple-1, simple-2, complex-3)๋ฅผ ๋ด๋ณด๋ด์ง๋ง complex-3 _component_๊ฐ ์์ฒด ๋ด๋ถ ๊ตฌ์ฑ ์์๋ฅผ ์ ์ํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
/ ์ฐธ์กฐ: @robwormald
๋๋ @kylecordes ๊ฐ ์๋ก์ด ngModules๋ฅผ ์ถ๊ฐํ๋ ๋์ ๊ธฐ์กด Typescript ๋ชจ๋ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ฝ๋์ ์ฝ์ค ๊ทธ๋ ์ธ ์ปฌ๋ ์ ์ ์ ์ํ๋ ๊ฒ์ ๋ํด ์ด์ ์ ๋งํ ๊ฒ์ ๋ํด ์๊ฐํ์ต๋๋ค. Typescript ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ผ๋์ผ ๋ฐฉ์์ผ๋ก ngModules๋ฅผ ์ ์ํ๋ ์์ ๋ฅผ ์ ์ถํ๊ณ ์ถ์ต๋๋ค. ์๊ฒฌ๊ณผ ์๊ฐ์ ํ์ํฉ๋๋ค.
๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์ณค์ ์๋ ์์ง๋ง ์ง์ฐ ๋ก๋๋์ง ์์ ๋ชจ๋์์ ์ข ์์ฑ ์ฃผ์ ์ด ์๋ํ๋ ๋ฐฉ์์ "๋ํ ํ๋ก์ ํธ"์์ ํฐ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค(๋ด ๋ฌธ์ ๋ ์๋๋ฉฐ ์ด๋ฏธ ๊ณ ํต๋ฐ๊ณ ์์ต๋๋ค).
์ด๊ฒ์ ํฅ๋ฏธ ๋กญ๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ Angular1์ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ค์ํ ๋ชจ๋์ ๋ํ ํจํค์ง๋ฅผ ์ ์ํ๊ธฐ ์ํด requirejs๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค(๊ฐ ๋ชจ๋์๋ 10-20๊ฐ์ ์ง์๋ฌธ/์๋น์ค/ํํฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค). ์ด๋ฌํ ํจํค์ง๋ฅผ ํ๋ก๋์ ์ฉ ๋จ์ผ ํ์ผ๋ก ๋ฌถ์ต๋๋ค(์ฃผ ์ง์๋ฌธ ์ ์ธ). ์ง์๋ฌธ์ ์ฌ์ฉ๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ฐ ๋ก๋๋ฉ๋๋ค(ํ์ํ ์ง์๋ฌธ์ ์ง์ฐ ๋ก๋ํ๋ ํต์ฌ ์ง์๋ฌธ์ด ์์ต๋๋ค).
์ฐ๋ฆฌ์ ์์ฉ ํ๋ก๊ทธ๋จ ๋ผ์ฐํ ํ์ด์ง ํ ํ๋ฆฟ์ cms ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ณด๊ด๋๋ฉฐ cms ์ฌ์ฉ์๋ ๋ค๋ฅธ ํ์ด์ง ํ ํ๋ฆฟ ๊ฐ์ ๊ธฐ๋ณธ ์ง์๋ฌธ ๊ธฐ๋ฐ UI ์์ ฏ์ ๋์ด๋ค ๋์ ์ ์์ต๋๋ค(์ด๊ฒ์ด ๋ธ๋ผ์ฐ์ ๋ก๋ ์ ๊ธฐ๋ณธ ์คํฌ๋ฆฝํธ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ง์๋ฌธ์ ๋ํ ์ง์ฐ ๋ก๋ ์ง์์ด ํ์ํ ์ด์ ์ ๋๋ค. ์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ถ๋ถ์ ์ง์๋ฌธ ๊ธฐ๋ฐ ์์ ฏ์ ๊ธฐ๋ฐ์ผ๋ก ํจ)
Angular1์ ์ฌ์ฉํ๋ฉด ๋ ์ง์คํฐ ๊ณต๊ธ์์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ์ ๋ชจ๋์ ์ง์๋ฌธ์ ์ง์ฐ ๋ก๋ํ ์ ์์ต๋๋ค.
์ด ์ ํ์ ๊ตฌ์ฑ ์์๋ฅผ ๋ชจ๋์ ์ง์ฐ ๋ก๋ํ๊ณ Angular2์์ dom์ผ๋ก ์ปดํ์ผํ ์ ์์ต๋๊น?
๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ngModules๊ฐ ๋ฌธ์ ๋ฅผ ์ฐพ๋ ์๋ฃจ์ ์ด๋ผ๊ณ ์ ์ํ ๊ฒ์ ๋์ํฉ๋๋ค. ๋ด ์๊ฐ์ LazyLoading์ ์ ์ฌ์ ์ธ ์ด์ ์ ๊ตฌ์ฑ ์์ ์ง์๋ฌธ/ํ์ดํ ์ข ์์ฑ์ ๊ฐ์ ์ฌ์ฉ ์ค๋จ์ ์ ๋นํํ์ง ์์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ด๊ฐ ํ๋ ธ์ ์๋ ์์ง๋ง ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ngModules๊ฐ ์ ๊ณตํ๋ ์ ์ผํ ์ง์ ํ ์ด์ ์ธ Lazy Loading์ ์ค์ง์ ์ธ ์ด์ ์ ์ค์ ๋ก ๋ณด์ง ๋ชปํ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ง๋ ngModules๋ ๊ฐ๋ฐ ๊ตฌ์กฐ/ํจํด์ ๋ ์ข๊ฒ ๋ง๋ค๊ธฐ ์ํด ์๋ํ๊ณ ์์ ๊ฒ์ ๋๋ค(๊ทธ๋ฆฌ๊ณ ์๋ง๋ ์ฑ๊ณตํ ๊ฒ์ ๋๋ค). ๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง API๋ฅผ ๋ณด๊ณ ๋ ผ์ํ ๊ฒ์ด ๊ฑฐ์ ์๋ค๋ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด ๋ ๋ณต์กํ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๊ณ ์์ต๋๋ค. ๋ฐ๋ฅด๊ณ ์ ์งํฉ๋๋ค.
๋ํ ๋ค๋ฅธ ๋ชจ๋ ์์คํ ์ด ์ ๋ง๋ก ํ์ํฉ๋๊น?
NgModule์ด ์ด์ ์ ์ฒ๋ฆฌํ ํ์๊ฐ ์์๋ ์๋ก์ด ์ข ๋ฅ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค๋ ์ ์ ์๋ฌด๋ ์ด์๋ฅผ ์ ๊ธฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ๋๊ตฌ๋ณด๋ค๋ RC5 ์ด์ ์ ๋จ์ํจ, ํนํ ๋งค์ฐ ์์ ํ๋ก๊ทธ๋จ์ด ์์ด์ง ์ ์ ๋์ด ํ๊ฐํฉ๋๋ค. ๋๋ ๋ํ ์ฌ๋๋ค์๊ฒ Angular 1์๋ ์์ฒด ๋ชจ๋ ์์คํ ์ด ์์ง๋ง Angular 2์์๋ ๊ธฐ๋ณธ ์ธ์ด์ ๋ชจ๋ ์์คํ ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์ฌ๋๋ค์๊ฒ ๋งํ ์ ์๋ ๊ฒ์ด ๋งค์ฐ ๊ทธ๋ฆฌ์์. ์ฃ์กํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ค์ ๋ก ๋ง์ ๊ธฐ์ ์ฑ ์์ ๋ฐ ๋๊ธฐ์ ์ ๊ตฌ์ถํ๋ ค๋ ๋๊ธฐ์ ์ ๊ธฐํ ์์ฌ ๊ฒฐ์ ๊ถ์๋ฅผ ํฌํจํ์ฌ ์ง์ฐ ๋ก๋ฉ ๋ฐ ํ ํ๋ฆฟ ์ฌ์ ์ปดํ์ผ์ ๋งค์ฐ ๊ด์ฌ์ด ์๋ ์ฌ๋๋ค์ด ๋ง์ด ์์ต๋๋ค. ๋ ๋ค ์ค์ง์ ์ผ๋ก ๊ฐ๋ฅํฉ๋๋ค. NgModule์ ์ํด.
๊ทธ๋๋ ํ ๊ฐ์ง ๋. ์๋ก์ด Angular ๋ชจ๋์ ๋ํด ๊ฐ์ฅ ๋ง์์ ๋ค์ง ์๋ ๋ถ๋ถ์ ์ด๋ฆ์ ๋๋ค. ๋ชจ๋์ด๋ผ๋ ๋จ์ด๊ฐ ๋๋ฌด ์ค๋ฒ๋ก๋๋์์ต๋๋ค. ์ ๋ ์ด์ ์ฌ๊ธฐ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์๊ฒ ์ด๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค. ์ฐ๋ฆฌ๋ "ํจํค์ง"๋ผ๋ ๋จ์ด๋ฅผ ๋์ ์ข์ํฉ๋๋ค. ๋น์ทํ ์์ด๋์ด๋ฅผ ์ ํฌ์ฐฉํ๊ณ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ๊ฒฝ์ ์ ํ์ด ๋ง์ด ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ์์.
@kylecordes ์ด๋ฆ์ ๋ํ ๋ฌธ์ https://github.com/angular/angular/issues/10087
๊ฑฐ๊ธฐ์ ์ ์๋ ๋ ผ๋ฆฌ๋ '๋ชจ๋'์ด๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ํ ๋ถ์ ๊ฒฉํ์ง ์์ต๋๊น? ๊ทธ ์ด์์ ์๋๋๋ผ๋ ๋ง์ ๊ฐ๋ ๊ณผ ์ถฉ๋ํ๊ธฐ ๋๋ฌธ์ ๋๊น?
@Barryrowe ๋ ์ค์ค๋ก ๋ ์ ๋งํ ์ ์์์ต๋๋ค. ์ค์ ๋ก ๋๋ถ๋ถ์ ์ฑ์ด ์ด์ ์ ์ป์ง ๋ชปํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฒฐ๊ตญ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋ฉ๋๊น? ๋ด๊ฐํ์ง ํฌ๋ง.
๊ทธ๋ฌ๋ ์ด ์๋ก์ด ๊ฑฐ์น ๋ชจ๋ ์์คํ ์ ๊ธฐ๋ณธ ๋ชจ๋ ์์คํ ๊ณผ ์์ ํ ์ง๊ตํ๋๋ก ๋ง๋๋ ๊ฒ์ด ์ ๋ง๋ก ํ์ํ์ง, ์๋๋ฉด ๊ฐ ์ต์์ ๋๋ ํ ๋ฆฌ์ ๊ทธ ์์ ํฌํจ๋ ๋ชจ๋ Es6 ๋ชจ๋์ ์๋ฌต์ ์ผ๋ก ๋ง๋ค ์ ์์๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ฑฐ์น NgModule๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์๋ง๋ ์ด๋ฌํ ๊ท์น ๊ธฐ๋ฐ ๋ฉ์ปค๋์ฆ์ด ํ์ฌ ๋ฉ์ปค๋์ฆ ์์ ์ถ๊ฐ๋ ์ ์์ผ๋ฏ๋ก ์ด๋ฌํ ๊ท์น์ ๋ฐ๋ฅด๋ ค๋ ํ๋ก์ ํธ์ ๋ํด NgModule ์์ฉ๊ตฌ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ํต์ฌ์ ๋๋ค. ESModules๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๋ฐ ๋งค์ฐ ์ ์๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์ ์์ค์์ ๋จ์ํ ๋ค์ ๋ด๋ณด๋ด๊ธฐ๋ง ํ๋ฉด API์ ์ต์์ ์์ค์์ ๊น์ด ์ค์ฒฉ๋ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ๋ํ ์ผ๋ฐ์ ์ผ๋ก ํ๋ ์์ํฌ์ ๋ ๋ง์ ์ ํ์ ๊ท์น์ ์ถ๊ฐํ๋ ๊ฒ์ ์ฐฌ์ฑํฉ๋๋ค.
๋ด๊ฐ angular2๋ฅผ ์ฒ์ ๋ดค์ ๋ ๋๋ '์ด๋ด, ๊ทธ๋ค์ ์ด๊ฒ์ ๊ฐ์ง๊ณ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ณ ์๋ค. ๋ง์น ๊ทธ๋ค์ด angular 1์์ ๋ญ๊ฐ๋ฅผ ๋ฐฐ์ด ๊ฒ ๊ฐ๋ค'๊ณ ์๊ฐํ๋ค. Angular 1์์ ๋ด๋ถ ๋ชจ๋์ ๋ฒ๋ฆฌ๊ณ ๋์ ES ๋ชจ๋์ ์ฌ์ฉํ์ผ๋ฉฐ ๋ค๋ฅธ ๋ณ๊ฒฝ ์ฌํญ(๊ตฌ์ฑ ์์, typescript ๋ฑ)๋ ํ์ํ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์์ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด ๊ธฐ๋ค๋ฆด์๋ก ๊นจ๋ ๋ณ๊ฒฝ ์ฌํญ, ๋ฌธ์ ๋ถ์กฑ ๋ฐ ๋น์ฝํ ์ค๋ฅ ๋ฉ์์ง ๋๋ฌธ์ ์ ๋ฅผ ์์ธ ๋ฆฌ๊ฒ ๋ง๋ญ๋๋ค. ์ด์ ์ด NgModules๋ฅผ ์ฌ์ฉํ๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก Angular 1 ์ดํ ๋ณ๊ฒฝํ ํ๋ ์ด์์ ํ๋ฅญํ ์์ ์ ์คํ ์ทจ์ํฉ๋๋ค.
์ค์ ๋ก Angular 2๋ AngularJS๊ฐ ๊ฐ๋ฐ๋์์ ๋ ์ฌ์ฉํ ์ ์์๋ ํ๋ถํ ์ ํฅ ์น ๊ธฐ์ ์คํ์ ํ์ฉํด์ผ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ Angular 2์ ๋ํด ๋ด๋ฆฐ ๋ง์ ์ค๊ณ ๊ฒฐ์ ์ ๋ํ ์ ๋นํ๋ "์น ๊ตฌ์ฑ ์์๋ ์ง์๋์ด์ผ ํจ"์ด์์ง๋ง ์์ด๋ฌ๋ํ๊ฒ๋ ํ๋ ์์ํฌ๋ ์ ์ ๋ ๋ง์ ๋ฐฉ์์ผ๋ก ํ์ค์์ ๋ฒ์ด๋๊ณ ์์ต๋๋ค. ์ด์ ํ์ค์ด ๋์ ๋ ํ์ค์์ ๋ฒ์ด๋ ์ข์ ์ด์ ๊ฐ ์์ต๋๋ค.
ํ๋ ์์ํฌ๊ฐ ํต์ฌ ๋๊ตฌ๋ฅผ ์ต๋ํ ํ์ฉํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด, TypeScript ์ ์ธ์ ์ ํํ ๊ด์ฉ์ ์ด์ง ์์ผ๋ฉฐ any
๋ฐ any[]
๋ก ๊ฐ๋ ์ฐจ ์์ต๋๋ค. ๋ํ API์ ์ฌ์ฉ์ฑ๊ณผ ๋๊ตฌ์ฑ์ ํฅ์์ํค๋ ๊ฐ๋ ฅํ ์ธ์ด ๊ธฐ๋ฅ์ ๋ฌด์ํฉ๋๋ค. export declare type Type = Function
์ ๊ฐ์ ํ์ค์ค๋ฌ์ด ๋ด์ฉ๋ ํฌํจ๋์ด ์์ต๋๋ค.
ํฅ๋ฏธ๋กญ๊ฒ๋ ์๋น ์์ ๊ฒฐ์ ์ด Dart์ ๊ด๋ จ๋ ๊ฒ์ผ๋ก ํ๋ช ๋์์ต๋๋ค. Dart๋ ๋๋ถ๋ถ์ Angular ์ฌ์ฉ์๊ฐ ์ ๊ฒฝ ์ฐ๋ ๊ฒ์ด ์๋๋๋ค. TypeScript์ ๋น๊ตํ์ฌ ์ ํ์ด ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง์ ๋ํ ๊ฐ๋ ์ด ๋งค์ฐ ๋ค๋ฆ ๋๋ค. Dart <-> JavaScript interop์ ์ข ์ข ์์์ด ์๋๋๋ค.
@aluanhaddad , dart ๊ตฌํ์ ์ต๊ทผ์ ๋ณ๋์ ํ๋ก์ ํธ๋ก ๋ถ๊ธฐ๋์์ผ๋ฏ๋ก ๊ทํ์ ์ฐ๋ ค ์ค ์ผ๋ถ๊ฐ ๊ณง ํด๊ฒฐ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ ์ฒด LOC ๋ฐ ๊ตฌ์ฑ ์์ ์ข ์์ฑ์ ์ ์ ์ ๋ชจ๋ธ๋ง ์ธก๋ฉด์์ ์๋นํ ์์ค์ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋์์ต๋๋ค. ๋ด ๊ตฌ์ฑ ์์ ํ์ผ์ ์ฝ๊ฐ ๋ ๊นจ๋ํ์ง๋ง ๋ช ์์ ๋ฐ ์ ์ ํ ์ข ์์ฑ ์ ์๋ฅผ ํฌ์ํ๊ณ ์ค๋ณต ๋๋ .module ํ์ผ์ด ์ถ๊ฐ๋ฉ๋๋ค.
์์ฉ๊ตฌ๋ฅผ ์ค์ด๋ ๊ฒ์ ์ข์ ์ผ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง ๊ณผ๋ํ ์ ์๋ค๊ณ ์ฃผ์ฅํ๊ณ ์ถ์ต๋๋ค. ๋์ฑ์ด, ์ด ํน์ ํ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ๊ฐ์ ๋ ธ๋ ฅ์ ์์ ํ ๊ฐ์์ ๋ฐ๋๋๋ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ์ ์์ง์์ผ๋ก ๋ ์ ์ค๋ช ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋ Angular๊ฐ ๋ ๋ณต์กํ ๋น ๋ฅธ ์์์ ํฅํ ๊ฒฝํฅ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํด์ฒด์ธ ์ค์ ๊ณผ ๊ด๋ จํ์ฌ ์ด๋ฏธ ์ฒ๋ฆฌํด์ผ ํ ๊ฒ์ด ์๋นํ ๋ง๊ณ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ ์ดํดํด์ผ ํ๋ ํ์ผ ๋ฐ ํญ๋ชฉ ๋ชฉ๋ก(๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ๋ ๊ฒฝ์ฐ)์ด ๋์ด๋๊ณ ์์ต๋๋ค.
. @jbalbes ๊ฐ์ฌํฉ๋๋ค, ๋ฐ๊ฐ์ต๋๋ค.
@radusuciu ๋น์ ์ด ์ ๋์ ์ผ๋ก ๋ง์ต๋๋ค. ์ด๊ฒ์ ์์ฉ๊ตฌ์ ๊ฐ์๊ฐ ์๋๋ผ ํด๋น ์์ฉ๊ตฌ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ์์ญ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ฏธ ๋งํ๋ฏ์ด ๊ตฌ์ฑ ์์ ์์ค ๋ฒ์ ์ง์ ๊ณผ NGModule ์์ค ๋ฒ์ ์ง์ ๊ฐ์ ์ถฉ๋์ด ์๋ ์ฌ๋์ ์์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณ ์ฌ์ฉ๋ฒ๊ณผ ์๋ฏธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์์์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๊ตฌ์ฑ ์์, ์ง์๋ฌธ, ํ์ดํ ๋ฐ ์๋น์ค๋ฅผ ์ ํํ ์ ์๋ ์ธ๋ถํ๋ ๋ฒ์ ์ง์ ์ ๋๋ค.
๋ชจ๋์ด ์ฑ ์์ฑ์์๊ฒ ๋ชจํธํ ์ค์ ๊ฐ์น์ ๋ณต์ก์ฑ์ ๋ ์ถ๊ฐํ๋ค๋ ๊ฒ์ ๋์๊ฒ ์์ ๋๋ผ์์ ๋๋ค. ๊ทธ๊ฒ๋ค์ ์๋ ๋์์ธ์ ์ผ๋ถ๊ฐ ์๋์๊ณ ๋ค๋ฅธ ์ฃผ์ ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฉด ๋ค๋ฅธ ๊ฒ๋ค์ด ๋ฒฝ์ ๋ถ๋ชํ ์๋ํ๋๋ก ๋ง๋ค ์ ์์๊ธฐ ๋๋ฌธ์ ๋ฆ๊ฒ ์ถ๊ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค(์ง์ฐ ๋ก๋ฉ, ์ปดํ์ผ ๋ฑ...).
์ฑ ๊ฐ๋ฐ์ ๋ํ ๋ชจ๋ ์๋ฏธ์ "๋ค๋ฅธ ์ฝ์๋ ๊ธฐ๋ฅ์ด ์๋ํ๊ฒ ํ๋ ๊ฒ"์ ๋ํ ๋ชจ๋ ์๋ฏธ๋ ์ถ๊ฐ๋์์ ๋ ์์ ์์ ๋์์ง๋ง ๋ ๋ง์ ์ฑ์ด RC5๋ก ๋ณํ๋จ์ ๋ฐ๋ผ ๋ ๋ช ํํด์ง๊ธฐ ์์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ด ์ฑ์ ๋ชจ๋๋ก ๋ณํํ๋ ค๋ ์๋์กฐ์ฐจ ์์ํ์ง ์์์ต๋๋ค. ์๋ง๋ RC4์์ ์ฃฝ์ ๊ฒ์ ๋๋ค. ๋๋ฌด ๋ง์ ๋ถ๋ถ์ ์์ ํ ์ฌ์์ ํด์ผ ํ๊ณ ๋ด๊ฐ ์ป์ ์ ์๋ ๋ชจ๋ ๋ ธ๋ ฅ์ ํจ์ฌ ๋ ํฐ ๋ฐํ์ ๋ฒ๋ค๋ก ๋ค์ ์ฃผ์ ๋ณ๊ฒฝ RC์ ๋ ๊ฐ๊น์์ง๋ ๊ฒ์ ๋๋ค. . RC๋ ์งํํ ์๋ก ๋ ์์ ์ ์ด๊ณ ์์ฑ๋๊ฐ ๋์์ ธ์ผ ํ๋๋ฐ, ๊ทธ๋ ์ง ์์ต๋๋ค.
Gang, NgModule์ ๋ง์ ์ฌ๋๋ค์ด ์ ๋ณ์ ์ผ๋ก ์ค๋ช ํ๋ฏ์ด ์ง์ฆ์ค๋ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก๋ ๊ทธ๋ ๊ฒ ํฐ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ์ฌ๊ธฐ(Oasis Digital / Angular Boot Camp)์์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์๋ง์ ์์ ๊ฒ๋ค์ RC5๋ก ์ ๋ฐ์ดํธํ์ผ๋ฉฐ, ์ด๊ฒ์ (์ค๋ซ๋์์ ์ฐ๊ตฌ์ ์ดํด ๋์) ์๋ฃ๋์์ต๋๋ค.
๋ชจ๋ ์ฌ๋์ ์ฑ์ ๋ค๋ฅด๊ฒ ์ํฅ์ ๋ฐ์ต๋๋ค. ๋ํ Angular 2์ ๋ณ๋ ๋ฐ ๋ณ๊ฒฝ์ ๋ํ ๊ทํ์ ํ๋๋ ์ฑ ์ ๊ณต์ ์ง์คํ๋ ๊ฒฝ์ฐ์ Angular 2์ ๋ํ ๊ต์ก ๋ฐ ์ง์๋ ํ๋งคํ๋ ๊ฒฝ์ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ ์๊ฒ RC5๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๋ชจ๋ ์์ ์ ์์ ํ ์ฃฝ์๊ณ ๋ ธ๋ ฅ์ ๋ญ๋นํ์ต๋๋ค. ์ค์ ๋ก ๋ถ์ ์ ์ธ ์ด์ (๋ ํฐ ๋ฒ๋ค)์ ์ ๊ณตํ๋ฏ๋ก ์ ๋นํํ๊ธฐ ์ด๋ ต์ต๋๋ค.
RC6*์ ๋๋ฌํ๊ธฐ ์ํด ์ฐ๋ฆฌ ํ๋ซํผ์์ 5์ผ ๋์ ํธ์ํ๋ ๊ฒ์ ์ด๋ฉด์์ ๋ด ์๊ฐ์ ๋งํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๋ด ์๋ ์๊ฒฌ์ด ์ฌ์ ํ ์ ํจํ์ง๋ง ์ด ์ด์ ํ์ ๋๋ฌํ ๊ฒ์ ๋ํ ์๋๊ฐ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ์ฅ ํฐ ์ด๋ ค์์ ๊ณ์ํด์ ์๋ก์ด ๋ผ์ฐํ
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๋น์ด ์๋ path: ''
๊ท์น์ด ๋๋ฌด ๋ง์ต๋๋ค! (๋๋ ์ฌ๊น๋๋ค) ํ์ง๋ง ๊ทธ๊ฒ์ ์๋ง๋ ์ฐ๋ฆฌ๊ฐ ์ถ์ํํ ๊ฒ์
๋๋ค.
nightlies์ NgModules์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๊ฐ์ ๋์ด ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ์์ ํ๊ธฐ๊ฐ ์กฐ๊ธ ๋ ์ฌ์์ง๊ณ ์์ต๋๋ค. ๊ตฌ์ฑ ์์ ๋ฐ ์ง์๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ฐฉ๋ํ NgModule ์ข ์์ฑ ํธ๋ฆฌ๋ฅผ ํ์ํ์ง ์๋๋ค๋ ์ถฉ๋ถํ ์ ๋ณด๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ง ์์ ๊ฒฝ์ฐ ํธ์ถ๋ฉ๋๋ค. ์ง๊ธ ์ฐ๋ฆฌ๊ฐ ์ง๋ฉดํ ์ฃผ์ ๋ฌธ์ ๋ ๋ช ๋ฐฑํ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์๋ ํ์ด์ง์์ ๊ธฐ๋ฅ์ด ๋๋ฝ๋์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๊ตฌ์ฑ ์์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ธ๋์ง ์์๊ฑฐ๋ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์กฐ๊ธ ๊น๋ค๋กญ์ง๋ง ๊ต์ก์ ๋ฐ์ผ๋ฉด ์ถฉ๋ถํ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ํ ์คํธ๋ ์ด์ ์ฐ๋ฆฌ์ ๋ค์ ๋จ๊ณ๋ก ์์ ํ ๋ฌผ ์์์ ์ฃฝ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ฅ ํธ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐ๋ฆฌ๋ ๊ฒฐ๊ตญ ๊ฑฐ๊ธฐ์ ๋๋ฌํ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ฌํธํก์ ํ๊ณ ๋ฉฐ์น ๋์ ๋ค๋ฅธ ์ผ์ ํ๋ค๊ฐ ๋ถ์ด๋ฒ๋ ธ์ต๋๋ค. ๊ทธ๊ฒ์ด ๋ฌด์์ด๋ ์ฐ๋ฆฌ๋ ๋ค์ ๋ผ์ด๋ฉ์ ์ํด ๊ฝ ์ก๊ณ ์์ต๋๋ค! ์๋ ํฌ๋ ์ด๊ฒ์ผ๋ก ์ธํด ์ํฅ์ ๋ฐ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ํ์ด์ ๋น๋๋ค. ์ด ๋ฌธ์ ์ ๋ํด Angular ํ์ ๋ํ๊ฐ ์์์ผ๋ฉด ์ข์์ ํ ๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ง๋ฉดํ ๊ฐ์ฅ ์ด๋ ค์ด ๋ฌธ์ ๋ ์์ฌ ์ํต์ ๋ถ์กฑ์ด์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ ํ NgModules์ ๋ํ ์นด๋์ ๋ฌด์์ด ์๋์ง ์์ง ๋ชปํฉ๋๋ค. ์ง๋ ์ฃผ ํ์ ๋ฉ๋ชจ์๋ ํต์ฐฐ๋ ฅ์ด ์ ๊ณต๋์ง ์์์ต๋๋ค. ์ด๋ฒ ์ฃผ์ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ๋ด ์๋ค!
@SaltyDH ๊ท์คํ ํผ๋๋ฐฑ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ปค๋ฎค๋์ผ์ด์
์ ๋ํ ๋ถ๋ง์ ์ ๋ง ์ ์ ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ตฌํ ๋ด๋น์๋ ์ ๋ฆด๋ฆฌ์ค๋ฅผ ๋น๋ํ๊ณ ๋ฌธ์ ๋ด๋น์๋ ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
๋ฌธ์๋ ์ด๋ฏธ ์ฝ๋ฉ๋ ํ์๋ง ๋ฌธ์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ช
๋ฐฑํ ์ด์ ๋ก ๋ค์ ๋ค์ณ์ ธ ์์ต๋๋ค. ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ๋ ํ๋ค๊ณ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ์์
์
๋๋ค.
์ถ์๋ ๋ ๋ค์ ๋ฆด๋ฆฌ์ค๋ก ์ ํํ๊ฑฐ๋ nightlies๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์์ง ๋ชจ๋ ๊ฒ์ด ์ ๋ฌ๋์ง ์์๋ค๊ณ ๋ถํํ๋ ๊ฒ์ ๋ค์ ๋ถ๊ณตํํฉ๋๋ค.
Angular ํ์ ๋ํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ์์๊ฒ ์ด๋ ค์์ ์ผ๊ธฐํ ์ ์๋ ๊ฒ์ด ๋ฌด์์ธ์ง ๋ฏธ๋ฆฌ ์ ์ ์์ต๋๋ค.
Gitter ๋ฐ ๋ฌธ์ ์ ๋ํ ์ง์์ ์ ๊ณตํ๋ Angular ํ์ ๊ตฌ์ฑ์์ด ํญ์ ์์ต๋๋ค.
๋ํ ์์์ Angular ํ ๊ตฌ์ฑ์๊ณผ ์์ฒ ๋ช
์ ๊ฐ๋ฐ์๊ฐ ์๋ ํต์ ๋ถ๋ด์ด ์๋นํ ๋น๋์นญ์ ์ด๋ผ๋ ์ ์ ์๊ณ ์์ด์ผ ํฉ๋๋ค.
๋๋ ์ด๊ฒ์ด ๋ง์คํฐ ๋น๋(๊ฑฐ์ RC6)์์ ๋ ์ฝ๋ค๋ ๋ฐ ์์ ํ ๋์ํฉ๋๋ค.
@kylecordes ์ด๋ค ๋ฉด์์ ๋ง์คํฐ์์ ๋ ์ฝ๊ฒ ์์ ํ ์ ์์ต๋๊น?
NgModules์ ๋ํ ๋์์ธ ๋ฌธ์(์ด์ ๋์์ธ ๋ฌธ์๊ฐ ์์ฑ๋์์ ๋ AppModules๋ก ์๋ ค์ง)๋ RC5๊ฐ ์ถ์๋๊ธฐ ํ ๋ฌ ์ ์ ์ถ์๋์์ผ๋ฉฐ, ์ ๋ ๊ทธ ๋ฌธ์์ ๋ํด ์ด๋ ์ ๋ ์ค๋นํ์ต๋๋ค.
๋ํ NgModule์ ์๋ก์ด ๊ฐ๋
์ด๊ธฐ ๋๋ฌธ์ ์์ ํ ํ์
ํ๊ณ ์คํ ์ฑ์ ๋ํ ์ฑ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒ์ด ์ด๋ ค์ ์ต๋๋ค.
๋์ ๋ด๊ฐ ํ ๊ฒ์ ๋จผ์ NgModules์ ๋์์ค์ Angular 2 ์ ํ๋ฆฌ์ผ์ด์
์ ์ค๊ณํ๊ธฐ ์ํด NgModules์์ ์๊ฐํ๋ ๋ฐฉ๋ฒ์ ์์ ํ ์ดํดํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ NgModules๋ฅผ ์ ์ฉํ์ฌ ์๊ฐ ํ์ต ์ฑ์ ๋ง๋ค์์ต๋๋ค.
๋ ๋ฒ์งธ ๋จ๊ณ๋ - ํ์ฌ ์ฑ์ด ๋ชจ๋์์ ์ด๋ป๊ฒ ๋ถ๋ฆฌ๋ ์ ์๋์ง ์๊ฐํ ๋ค์ ํํฅ์์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒ์
๋๋ค. AppModule๋ก ์์ํ์ฌ ํ ๋ฒ์ ํ๋์ ๋ชจ๋์ ์์ฑํฉ๋๋ค. ์ด๊ฒ์ ์ ๋ง ๋์์ด ๋์๊ณ ์ต์ข
์ฑ์ด ๋ ์ฒด๊ณ์ ์ผ๋ก ๋ณด์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์, Gitter๋ RC5๊ฐ ์ถ์๋๊ธฐ ์ ์๋ NgModule์ ๋ํ ๋์์ ์ ๊ณตํ๋ ๋ฐ ์ ๋ง ๋์์ด ๋์์ต๋๋ค. RC5 ์ดํ์๋ ํจ์ฌ ๋ ์ ๋ฐฐ์ธ ์ ์๋ ๋ฌธ์์ ๋ธ๋ก๊ทธ๊ฐ ์์ต๋๋ค.
@zoechi ์ด ํ ๋ก ์ ๋๋ฌด ๋ง์ด ๋ฐฉํดํ์ง ์๊ณ ๋ด ์๊ฒฌ์ ๋ช ํํ ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋ฌธ์๋ฅผ ์ ํ ์ธ๊ธํ์ง ์์์ผ๋ฉฐ, ๋๋ถ๋ถ์ ์ดํด๋ ์ฌ๊ธฐ GitHub์์ ์ปค๋ฐ๊ณผ ๋ฌธ์ ๋ฅผ ๊ฒํ ํ๋ ๋ฐ์ ๋น๋กฏ๋์์ต๋๋ค. ์ ๋ ๊ด์ฐฎ์ต๋๋ค. ์ ์ข์ ๊ฐ์ ์ด ๋ฌธ์ ์ ๋ํ ํํ์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ์ฌ 61๊ฐ์ ๋๊ธ์ ๋ฌ๊ณ ์์ผ๋ฉฐ ๊ณ์ฐํ๊ณ ์์ต๋๋ค. "์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ์ ๋ํ ๋ชจ๋ ์ฌ๋๋ค์ ์ฐ๋ ค๋ฅผ ์๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด Angular 2์ ๋ํ ์ต์ ์ ์ ๊ทผ ๋ฐฉ์์ด๋ผ๊ณ ์ง์ ์ผ๋ก ๋ฏฟ์ผ๋ฉฐ, ์ด๋ก ์ธํด ๋ฐ์ํ ์ด๋ ค์์ ์ธ์ํ์ง๋ง ์ ํ์ ๋ฏธ๋๋ฅผ ์ํด์๋ ๋ ์ข์ต๋๋ค." Gitter๋ ํ๋ฅญํ์ง๋ง ๊ฐ๋ณ ๋ฉ์์ง๋ Angular 2์ ๋ค์ํ ์ธก๋ฉด์ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ ์ฌ๋๋ค์ ๋ฐ๋ค์์ ์ข ์ข ๊ธธ์ ์์ต๋๋ค. ์ด ๋งค์ฒด๋ฅผ ํตํด ์ฐ๋ฝํ์ง๋ง ์๊ฐ๋ ์ฐจ์ด๋ ๋ค๋ฅธ ์ฐ์ ์์๋ก ์ธํด ๊ถ์ ์๋ ํผ๋๋ฐฑ์ ์ป์ ์ ์์์ต๋๋ค. ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋์์ด ๋ ๊ฒ์ ๊ฐ๋ ํ์บ์คํธ https://devchat.tv/adv-in-angular/106-aia-angular2-rc5-and-beyond์ Adventures์ ๋๋ค. ๋๋ถ์ NgModule ์ ๊ทธ๋ ์ด๋๋ฅผ ์งํํ ์ ์๋ค๋ ์์ ๊ฐ์ด ์๊ฒผ์ต๋๋ค.
๋ชจ๋ ์ ์ผ ์ข๋ค.
ํผ๋๋ฐฑ์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ต๋ณ์ ๋ฐ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ ์ ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ์ง๋ ์ฃผ์ ๋งค์ฐ ๋ฐ๋นด์ต๋๋ค(๋ด๋ถ Google ์ฑ์ NgModules๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ ๋๋ฌธ์ ๋ฆฌํฉํ ๋ง์ ๊ณ ํต๋ ํจ๊ป ๋๊ผ์ต๋๋ค).
์ฌ๊ธฐ์์ ๋ช ๊ฐ์ง ์ง๋ฌธ๊ณผ ์คํด๋ฅผ ํด๊ฒฐํ ์ ์๋์ง ๋ณด๊ฒ ์ต๋๋ค.
@NgModule() (๋ฐ @Component ๋ฐ ๊ธฐํ Angukar ๋ฐ์ฝ๋ ์ดํฐ)์ ๋ํด ๊ฐ์ฅ ๋จผ์ ์ดํดํด์ผ ํ ๊ฒ์ ์ด๊ฒ์ด ์์ ํ ์ปดํ์ผ ์๊ฐ ๊ตฌ์ฑ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ต๊ทค๋ฌ ์ปดํ์ผ๋ฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋๋ก ํ๊ธฐ ์ํด ์กด์ฌํฉ๋๋ค.
๋ฐ์ฝ๋ ์ดํฐ๊ฐ ํ๋ ์ผ์ (๋จ์ํ) ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
//simplified Component decorator
export function Component(componentConfig){
return function(componentClass){
Reflect.defineMetadata('annotations', componentConfig, componentClass);
}
}
์ด๋ค ์์ผ๋ก๋ ๋ฐ์ฝ๋ ์ดํ ๋ ํด๋์ค์ ๋์์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์์ ํ์ง ์์ต๋๋ค. ๋จ์ํ ์ผ๋ถ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฒจ๋ถํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. Angular๋ ํด๋น ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๊ณ ํ ํ๋ฆฟ์ ์ปดํ์ผํฉ๋๋ค.
JiT ๋ชจ๋์์๋ "Just in Time"์ด ๋ฐ์ํฉ๋๋ค. bootstrapModule์ ํธ์ถํ๊ณ ์ฒซ ๋ฒ์งธ ๊ตฌ์ฑ ์์ ๋ ๋๋ง ์ฌ์ด์ Angular์ ์ปดํ์ผ๋ฌ๊ฐ Reflect API๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค์ ์ฐ๊ฒฐ๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.
let metadata = Reflect.getOwnMetadata('annotations', componentClass);
๊ทธ๋ฌ๋ AoT ๋ชจ๋์์๋ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค. ๋น๋ ์ ์ฐ๋ฆฌ๋ _์ ์ ์ผ๋ก_(์ฆ, ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ) ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ค์บํ์ฌ ์์ค ์ฝ๋์์ ๋์ผํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํฉ๋๋ค.
์ด๊ฒ์ ๋จ์ผ ๊ตฌ์ฑ ์์๋ฅผ ๋ถํธ์คํธ๋ฉํ ๋ ์ ์๋ํ์ง๋ง ์ฌ๋ฌ ๋ฃจํธ ๊ตฌ์ฑ ์์๋ฅผ ๋ถํธ์คํธ๋ฉํ๊ฑฐ๋ ์ธ์ฆ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ๋ถํธ์คํธ๋ฉํ๋ ๋ฑ ๋ ๋ณต์กํ ์์ ์ ์ํํ๋ ๊ฐ๋ฐ์๋ก๋ถํฐ ๋ง์ ํผ๋๋ฐฑ์ ๋ค์์ต๋๋ค.
๋ฐ๋ผ์ @Component ๋ฐ์ฝ๋ ์ดํฐ๋ Component๋ฅผ ์ ์ ์ผ๋ก ๋ถ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง _Application_์ ์์ ์ ์ผ๋ก ์ ์ ์ผ๋ก ๋ถ์ํ๋ ๊ธฐ๋ฅ์ ์์์ต๋๋ค.
"์์ฉ ํ๋ก๊ทธ๋จ"์ด๋ผ๋ ์ฐ์ฐ ์๋์ ์๋ ๊ฒ๋ค
NgModules๋ ์ ์ ์ผ๋ก ๋ถ์ ๊ฐ๋ฅํ ๊ธฐ๋ฅ ์ธํธ์ ๋ํ ์์ด๋์ด๋ฅผ ์๊ฐํฉ๋๋ค. ํฅ๋ฏธ๋ก์ด ์ ์ AoT ์ปดํ์ผ ๋ชจ๋์์ ๋ฃจํธ ๋ชจ๋์ ๋ถ์ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ๋ชจ๋์ ๋ํด ModuleFactory๋ฅผ _์์ฑ_ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ชจ๋ ๋ฒ์ ์ผ๋ก, ํ ํ๋ฆฟ์์ ์ ์ ์ผ๋ก ์ฐธ์กฐํ๋ ํฉํ ๋ฆฌ์ "entryComponents"๋ก ํ์
Ahead-of-Time ์ปดํ์ผ์ ํ์ํ ์ ๋ณด๋ฅผ ์ด๋ฏธ ์ถ์ถํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํธ๋ฆฌ ์์ดํฌํ ์ ์์ต๋๋ค. ์์ฑ๋ ๋ฃจํธ Module_Factory_์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ ๋ก ์ฌ์ฉ๋๋ ์ฝ๋๋ง ํฌํจ๋์ด ์์ผ๋ฏ๋ก ๋ชจ๋ํ์ ๋ํ ํจ๋ํฐ๋ฅผ ์ง๋ถํ์ง ์๊ณ ๋กค์ ๋ฐ webpack2์ ๊ฐ์ ๋๊ตฌ๊ฐ _๋์ฑ ํจ์จ์ ์ผ๋ก ์๋ํ ์ ์์ต๋๋ค.
๋ค์ ํ์ ์์ ๋ ๋ง์ ๊ฒ์ ๋ฐ๋ฅด์ญ์์ค ...
@robwormald ์ด๋ฐ ์ข ๋ฅ์ ๋ฐฐ๊ฒฝ ์ ๋ณด์ ๋ํ ๊ฐ์ฌ์ ์์ ์ด๋ชจํฐ์ฝ์ ๋ฃ์ ์ ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค!
NgModules๊ฐ ํด๊ฒฐํ๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
DialogService ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ๋น๋ํ๋ ค๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
์ญ์ฌ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
@Injectable()
export class MyDialogService {
//inject the dynamic compiler
constructor(private componentResolver:ComponentResolver){}
//accept a component and a viewContainerRef
showDialog(component:Type, target:ViewContainerRef){
//compile the component into a factory, async
return this.componentResolver.resolveComponent(component)
.then(componentFactory => {
//dynamically insert the compiled componentFactory into the view:
return target.createComponent(componentFactory);
})
}
}
...๋น์ ์ด ์ข์ํ๋
myDialogService.showDialog(MyRandomDialogComponent).then(...)
์ฌ๊ธฐ์ ์ฃผ์ํ ์ -
์ด ๋ฌธ์ ๋ ๋์ ๊ตฌ์ฑ ์์ ์ฝ์ (๊ผญ ์ง์ฐ ๋ก๋ฉ์ ์๋ฏธํ์ง๋ ์์)์ ์ํํ๋ _any_ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ฐ์ํฉ๋๋ค. ๋ํ ์์, ๋ผ์ฐํฐ ๋ฑ์ ๋ชจ๋ ์ ํ๊ธฐ(foo-bar) ๋์ ComponentTypes(ํด๋์ค)์ ์ํธ ์์ฉํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
๋ฐ๋ผ์ NgModule ๋ฐ์ฝ๋ ์ดํฐ์ entryComponents ๋ฐฐ์ด์ Component๋ฅผ ์ถ๊ฐํ ๋:
@NgModule({
declarations: [ MyRandomDialogComponent ],
entryComponents: [ MyRandomDialogComponent ]
})
export class MyApp {}
์ด๊ฒ์ด ์ปดํ์ผ๋ฌ์๊ฒ ์๋ ค์ฃผ๋ ๊ฒ์ "MyRandomDialogComponent์ ์ปดํ์ผ๋ MyRandomDialogComponentNgFactory ๊ฐ์ ๋งคํ์ ์์ฑ"ํ๊ณ _์ด๋ฅผ ์ ์ธ๋ NgModuleFactory์ ์ ์ฅํ๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์์ dialogService์ NgModule ๊ธฐ๋ฐ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@Injectable()
export class MyDialogService {
//inject the component factory resolver
constructor(private componentFactoryResolver:ComponentFactoryResolver){}
//accept a component and a viewContainerRef
showDialog(component:Type, target:ViewContainerRef){
//*retrieve* the componentFactory by component, sync
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(component)
//add the componentFactory to the view, sync
return target.createComponent(componentFactory);
}
}
์ด์ entryModules์ ์ถ๊ฐํ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋๊ธฐ์ ์ผ๋ก ๊ฒ์ํ์ฌ ๋ทฐ์ ๋์ ์ผ๋ก ์ฝ์ ํ ์ ์์ผ๋ฉฐ ์ฝ๋๋ ํ์ฌ ์๋ ๋ชจ๋์ ๋ฐ๋ผ ๋ณ๊ฒฝํ ํ์๊ฐ _์์ต๋๋ค_, ํ์ฌ/๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ปดํ์ผ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ๋ ผ๋ฆฌ.
@robwormald ์ค๋ช ๊ฐ์ฌํฉ๋๋ค
ํ ๊ฐ์ง ์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ง์๋ฌธ/ํ์ดํ ์ ์ธ์ ์ ๊ฑฐํด์ผ ํฉ๋๊น? NgModule๊ณผ ๊ณต์กดํ ์ ์๋ ์ด์ ๊ฐ ์์ต๋๊น?
์ ๋ ์ ๋ฅผ ํฌํจํ ์ฌ๋๋ค์ด NgModule์ ๋ํ "์๋ก์ด ์์ด"๋ ์ด์ ๋ํ ์คํด๊ฐ ์๋๋ผ ๋ง์ ์ฌ๋๋ค๊ณผ _์ ์๋ํ๋_ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์ผ์ ํ๋ "์ค๋๋ ๋ฐฉ์"์ด ํนํ ์ด ๋ฆ์ RC ๋จ๊ณ์์ ๊ฐ์ ๋ก ์ ๊ฑฐ๋ฉ๋๋ค. ๋๋ ์ด๊ฒ์ด NgModule ์์ฒด์ ๋ํ ์ด๋ค ์ ํญ๊ณผ๋ ์ค์ํ ์ฐจ์ด์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ์ง์๋ฌธ/ํ์ดํ ์ ์ธ์ ์ ๊ฑฐํ๊ธฐ ์ํ ํ ์์ฒญ์ด ์คํ๋์์์ ์ ์ ์์ต๋๋ค(https://github.com/angular/angular/pull/10912) - ๋ฌด์์ด๋ ์ค์ ๋๊ธฐ ์ ์ ์ด ์์ ์์ ์๋ต์ ์ป์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ฒฐ์.
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. Angular๋ ์์ฌํ ์ฌ์ง ์์ด ํจ๊ป ์์ ํ๋ ๊ฒ์ด ์ฆ๊ฑฐ์ ๊ณ ์ง๋ 1๋ ๋์ ํ์ ๋ ธ๊ณ ์ ๊น์ ๊ฐ์ฌ๋ฅผ ๋๋ฆฝ๋๋ค+
์ฌ๊ธฐ์ "์ ์ญ ๋ฒ์"์ ๋ํ ๋ช ๊ฐ์ง ์ค๋ช ์ด ์์ต๋๋ค. ์ด๋ ์ปดํ์ผ๋ฌ์ ๋ชจ๋์ ๋ฉ์ปค๋์ฆ์ ์คํดํ๋ ๊ฒ์ ๋๋ค(์์ ํ ์ดํดํ ์ ์๊ณ ๋ณต์กํ ๋ด์ฉ์ ๋๋ค).
์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋จ์ผ NgModule๋ก ๋คํํ๋ ๊ฒ์ $rootScope์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๋คํํ๋ ๊ฒ์ด Angular1์์ "์ ์"์ด์๋ ๋ฐฉ์์ผ๋ก "์ ์"์ ๋๋ค(์ฝ๊ธฐ: ์๋ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ณ๊ฐ ์ข์ง ์์)
Angular 1์์ ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๊ฐ์ ธ์ค๋ฉด ๋ชจ๋ ๊ฒ์ด ๋จ์ผ ์ธ์ ํฐ ๋ฐฑ์ ๋ฒ๋ ค์ง๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ "์ค์ผ"๋์์ต๋๋ค.
Angular2์์ NgModues์๋ ์ค์ผ ์์ด ๊ตฌ์ฑํ ์ ์๋ ๋งค์ฐ ๊ฐ๋ ฅํ ๋ฒ์ ์ง์ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค. ๋ค์ ์ปดํ์ผ๋ฌ๋ก ๋์๊ฐ๋๋ค.
Angular๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ๊ณ ์ปดํ์ผํ ๋ ๋ง๋๋ ๊ฐ ๊ตฌ์ฑ ์์๋ _์ ์ธ๋ ์ปจํ ์คํธ์์ ์ปดํ์ผ๋ฉ๋๋ค_
์๋ฅผ ๋ค์ด - ์์ฉ ํ๋ก๊ทธ๋จ์์ ๊ณต์ ํ๋ ค๋ ์ผ๋ถ ๊ธฐ๋ฅ์ด ์๋ SharedModule์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
@Component({
selector: 'shared-component-one',
template: `
<div>Shared Component One</div>
<shared-component-two>
`
})
export class SharedComponentOne {}
@Component({
selector: 'shared-component-two',
template: `
<div>Shared Component Two</div>
`
})
export class SharedComponentTwo {}
@NgModule({
declarations: [ SharedComponentOne, SharedComponentTwo ],
exports: [ SharedComponentOne ]
})
export class SharedModule {}
SharedComponentOne๊ณผ SharedComponentTwo๋ SharedModule์์ _์ ์ธ๋_ - ์ ์ธ์ _์์ ๊ถ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๋ ๊ตฌ์ฑ ์์๋ SharedModule์ด ์์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ SharedComponentOne์ ๋ชจ๋์์ _exported_๋ฉ๋๋ค. SharedComponentTwo๋ SharedModule๋ก _private_ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.
SharedModule
๋ฅผ ๊ฐ์ ธ์์ ๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ญ์์ค.
@Component({
selector: 'some-component',
template: `
<div>hello from some component</div>
<shared-component-one></shared-component-one>
`
})
export class SomeComponent {}
@NgModule({
imports: [ SharedModule ],
declarations: [ SomeComponent ]
})
export class SomeModule {}
...์ปดํ์ผ๋ฌ๊ฐ SomeComponent
์ปดํ์ผ์ ์์ํ๋ฉด shared-component-one
SharedModule
( SharedComponentOne
๋ด๋ณด๋ด๊ธฐ)๋ฅผ SomeModule
๋ก ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์
ํฅ๋ฏธ๋กญ๊ฒ๋ ์ปดํ์ผ๋ฌ๋ ์ค์ ๋ก SharedComponentOne์ ์ปดํ์ผํ ๋ SharedModule "๋ด๋ถ"์์ ์ปดํ์ผํ๋ฏ๋ก ์ธ๋ถ ์ธ๊ณ์ ๋ ธ์ถ๋์ง ์์ SharedModule ๋ด์ ํญ๋ชฉ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๊ฒ์ Component.directives๋ก ์์ ํ๋ ๋ฐฉ๋ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ๋ฉฐ ์ด ๊ฒฝ์ฐ ๋์ผํฉ๋๋ค.
ํญ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ๊ฒ์ด ์๋ค๋ฉด ์๊ฐํด๋ณด์ญ์์ค.
@Component({
selector: 'my-tabs',
template: '...'
})
export class TabsComponent {}
@Component({
selector: 'my-tab',
template: '...'
})
export class TabComponent {}
์ด ๋ ๊ตฌ์ฑ ์์๋ ๋ชจ๋ ์ต์์ ์์ค์ด๋ฉฐ ์์กดํ ๊ณ์ธต์ ๊ด๊ณ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ์ฌ๋๋ค์ด ํ๋ ์ผ์ข ์ ๊ด์ต์ ํญ๋ฐ๋ก ์ด์ด์ก์ต๋๋ค.
export const TAB_DIRECTIVES = [ TabsComponent, TabComponent ]
๋ ๋ณต์กํ ํญ ๊ธฐ๋ฅ์๋ ํญ์ ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ๋ ์๋น์ค๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ํด๋น ๊ฒฝ์ฐ๋ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค...
export const TAB_PROVIDERS = [ ... ]
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ์์ถ ๋ฐ ์์ ์ ํ์ํ ๋ชจ๋ ๊ฒ์ ๊ธฐ์ตํ๋ ์ฐ์ต์ด ๋ฉ๋๋ค...
import {TAB_DIRECTIVES, TAB_PROVIDERS}
๊ทธ๋ฐ ๋ค์ ์ฌ์ฉํ๋ ค๋ _๋ชจ๋ ๊ณณ์์_ ์ฌ๋ฐ๋ฅธ ์์น์ ์ด๋ฌํ ๋ชจ๋ ๊ฒ์ ์ ๊ณตํฉ๋๋ค. ๋ํ ์ด ์์ ์์ ๊ธฐ๋ฅ์ ํ์ํ ๋ชจ๋ ๊ฒ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์์ด๋ฒ๋ฆฌ๊ณ ์ด์ํ ์๋ฆฌ ์๋ ์ค๋ฅ๋ก ๋๋๊ฑฐ๋ ํ์ํ ๋ชจ๋ ์ปจํ ์คํธ ์์ด ๊ตฌ์ฑ ์์๊ฐ ์ปดํ์ผ๋๋ ๊ฒ๋ ๋งค์ฐ ์ฝ์ต๋๋ค.
NgModule์ ์ฌ์ฉํ๋ฉด ๋จ์ผ ๋จ์๋ก ํจํค์งํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌํ ์ ์์ผ๋ฉฐ ๊ด๋ จ ์๋ ์์น์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ฌ๋ฌ ๋ชจ๋์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ๋ถ์ฐ๋์ด ์์ ์ ์๋ Material Design๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ ๋์ผํ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ ์๋ฏธ ์ฒด๊ณ๋ฅผ ํ์ฉํ์ฌ ์ด์์ฑ์ ๋์ฑ ๋์ผ ์ ์์ต๋๋ค.
@NgModule({
exports: [ TabsModule, NavbarModule ]
})
export class MaterialSharedModule {}
๋จ์ผ ๋ชจ๋์ ๊ฐ์ ธ์ค๋ฉด ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ AoT ์๊ฐ์๋ ์ฌ์ฉํ๋ ํญ๋ชฉ๋ง ์์ฑ๋ ์ฝ๋๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
Component.directives/pipes๋ฅผ ์ ๊ฑฐํ ์ด์ ์ ๋ํด ์๋ฐฉํฅ์์ ๋ง์ ํผ๋๋ฐฑ์ ๋ค์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋์ผํ ๊ฒ์ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ๋์ ํจํด์ด๋ผ๊ณ ์๊ฐํ๋ฏ๋ก ์ฌ๋๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ๋ ์ ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ์ ํํ์ผ๋ฉฐ ์ด์ ์ Component.directives์์ ์ ๊ณตํ ๋ช ์์ ๋ฒ์๋ฅผ ์ํ๋ ์ฌ๋๋ค์ ๋ค์์ ํตํด _same_ ๊ธฐ๋ฅ์ ์ํํ ์ ์์ต๋๋ค. ๋ชจ๋ ์์ค์์ ๋ฒ์ ์ง์ .
RC5์์ ์ฐ๋ฆฌ๋ Component.directives๋ฅผ "์ ์ญ" ๋ฒ์๋ก ์ผ์ข ์ ์๋ ํธ์ด์คํ ์ ์ํํ์ต๋๋ค. ์ด๋ ์ ํ์ ์ํํ๊ฒ ํ๊ธฐ ์ํ ์๋์์ผ๋ฉฐ ๋๋ถ๋ถ์ ์ฌ๋๋ค์๊ฒ ํจ๊ณผ๊ฐ ์์์ง๋ง ์ด์ ๊ณผ ์๋ก์ด ๋์์ด ํผํฉ๋์ด ๋ช ๊ฐ์ง ์ด์ํ ์ค๋ฅ์ ๋์์ ์ผ์ผ์ผฐ์ต๋๋ค. ์ด๊ฒ์ RC6์์ ์ฌ๋ผ์ง๋๋ค(์ค๋ฅ ๋ฉ์์ง๊ฐ ๊ฐ์ ๋จ).
๊ฒ์์ด ๋ฆ๊ฒ ๋ณ๊ฒฝ๋ ์ด์ ์ ๋ํด์๋ ์ฌ๊ณผํ ์ ๋ฐ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ๋ฌ๋ถ๋ณด๋ค ๋ง์ง๋ง ์๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. ๊ฒฐ๊ตญ, ์ฐ๋ฆฌ๋ ์ด์ ์ ํ๋ก ํธ ์๋ ์์ญ์์ ํ ๋ฒ๋ ํด๋ณธ ์ ์ด ์๋ ๋ฐฉ์์ผ๋ก ๋ง ๊ทธ๋๋ก ํ๋ ์์ํฌ๋ฅผ ๊ตฌ์ถํ๊ณ ์์ผ๋ฏ๋ก ์์์น ๋ชปํ ๋ฌธ์ ์ ๋์์ธ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๊ทธ๋ฌํ ๊ฒฝ์ฐ ์ค ํ๋์์ผ๋ฉฐ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ ์ ํต์ฌ ํ ์ฌ์ด์์ ๊ฐ๋ ฅํ๊ฒ ๋ ผ์๋๊ณ ์กฐ์ฌ๋์์ต๋๋ค. ๋ค์ ํ ๋ฒ ๋งํ์ง๋ง ๋ฌธ์ ๋ฅผ ์ผ์ผ์ผ ์ฃ์กํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ต์ข ๊ฒฐ๊ณผ๋ _์์ฉ ํ๋ก๊ทธ๋จ_์ ๊ตฌ์ถํ๋ ํจ์ฌ ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ์ฌ๊ธฐ์ ์๋ ์ด์ ์ ๋๋ค.
๊ธฐ๋ค๋ ค ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ค๋ฃจ์ง ์์ ๋ค๋ฅธ ์ง๋ฌธ์ด ์์ผ๋ฉด ์ด๊ฒ์ ์ด์ด ๋๊ฒ ์ต๋๋ค.
๋กญ
์ํ์ด, @robwormald
๋ช ๊ฐ์ง ๊ด์ฐฐ ์ฌํญ์ ๋ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค.
Rob์ _declarations_, _imports_ ๋ฐ _exports_์ ์ง์คํ์ต๋๋ค. ๋ชจ๋ _Providers_๊ฐ ๋ค๋ฆ ๋๋ค.
@Component.providers
๋ชฉ์จ! @Component.directives
๋ฐ @Component.pipes
๋ง ์ฌ๋ผ์ง๋๋ค.
@NgModules.providers
๋ฐ @Component.providers
๋ ๋ค ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
a) @NgModules.providers
"๋ฉ์ธ" ์ธ์ ํฐ(์ด์ฌํ ๋ก๋๋ ๋ชจ๋์ ์ฑ ๋ฃจํธ ์ธ์ ํฐ)์ ๊ณต๊ธ์๋ฅผ ์ถ๊ฐํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ _ํ์ฅ_ํฉ๋๋ค. ์ด๊ฒ์ด RouterModule
๊ฐ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ์ง ์๊ณ ๋ ์ฑ์ ๋ผ์ฐํ
์๋น์ค๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
b) @Component.providers
_encapsulates_ ๊ตฌ์ฑ ์์ ์ธ์คํด์ค(๋ฐ ๊ตฌ์ฑ ์์ ํ์ ํธ๋ฆฌ) ๋ฒ์ ๋ด์์ ์๋น์ค ์ ๊ณต.
๋ ์ ๊ทผ ๋ฐฉ์ ๋ชจ๋ ์๋ก ๋ค๋ฅธ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค.
๋์ ์ผ๋ฐ์ ์ธ ์กฐ์ธ: _์ค๋ @Component
์ ์ ๊ณต์๊ฐ ์๋ค๋ฉด ๊ฑฐ๊ธฐ์ ๋์ญ์์ค_
์ฑ์ ๊ตฌ์ฑํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ๋๋ค. Angular ๋ชจ๋ ์ฅ์๋ ๋ชจ๋๋ฆฌ์ Angular ๋ชจ๋์์ ๊ธฐ๋ฅ ๋ชจ๋ ๋ก์ ๋ฆฌํฉํ ๋ง์ ๋ํ ์งง์ ์น์ ์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ ๊ฝค ์ฝ์ต๋๋ค(์ ์ด๋ ๋ช ๋ฒ์ ํด๋ณธ ์ ์ด ์์ต๋๋ค.).
๋ด ์ฑ์์ ์์ฐ์ค๋ฌ์ด ์ด์์๋ฅผ ์ฐพ์ต๋๋ค. ๋ ๋ฏธ์ณ ๊ฐ์ง ์์. ๋๋ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ชจ๋ํํ์ง ์์ต๋๋ค.
๋จธํฐ๋ฆฌ์ผ ๋์์ธ์ด ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์ด์ ๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ ์ธ๋ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ธฐ ์ํจ์ ๋๋ค.
๊ทธ๋ค์ ๋จ์ํ ๋ชจ๋ ๊ฒ์ ๋ค์ ๋ด๋ณด๋ด๋ ์ฃผ๋ฐฉ ์ฑํฌ ๋ชจ๋์ ๊ฐ๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋น์ ์ ๊ทธ๊ฒ์ ๊ฐ์ ธ์ค๊ณ ์๋ฃํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ด ์ฑ์ ์กฐ์ ํ๋ ๊ฒฝ์ฐ ์ํ๋ MD โโ๋ถํ๋ง ๋ด๋ณด๋ด๋ ์ ์ฌํ _์ฌ๋ด๋ณด๋ด๊ธฐ ๋ชจ๋_์ ๋ง๋ญ๋๋ค.
์ด๊ฒ์ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณต๊ธ์ ์ฒด๊ฐ ๋ฐ๋ฅผ ์ ์๋ ํจํด์ด๋ฉฐ ํ์ฌ์์ ์น์ธํ ์น์ธ๋ ๊ฐ์ ํธ์ "ํคํธ"๋ฅผ ์์ฒด์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๊ธฐ์ ์์ ์๋ฏธ๊ฐ ์์ ์ ์์ต๋๋ค.
์ปดํ์ผ๋ฌ๋ ์ด์ ๋ฌด์ธ๊ฐ๊ฐ ๋น ์ก์ ๋ ์๋ ค์ฃผ๋ ํจ์ฌ ๋ ๋์ ์์ ์ ์ํํฉ๋๋ค. ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด๊ณ ๊ตฌ์ฑ ์์ ์ ํ๊ธฐ ์ด๋ฆ์ _ํญ์, ํญ์ ํ์ดํ์ ์ถ๊ฐ_ํ๋ฉด ์ปดํ์ผ๋ฌ์์ ์ ์ธ๋์ง ์์ ๊ตฌ์ฑ ์์๊ฐ ์์ ๋ ์๋ ค์ค๋๋ค. ๋ํ ์ ์ธ๋์ง ์์/์ธ์ํ ์ ์๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฐ ์ง์๋ฌธ์ ์ ํํฉ๋๋ค.
RC5 ์ด์ ๋ฒ์ ์์ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ฉด ์์ค๊ฐ์ ๋๋ผ๊ฒ ๋ฉ๋๋ค. ์ด์ directives
๋ฐ pipes
๋ชฉ๋ก์์ ์ข
์์ฑ์ ๋ฐ๊ฒฌํ๋ ์ง๋ฃจํ ์์
์ ์ํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ณต์ ์ ๊ฑฐํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๊ฐ์ฅ์๋ฆฌ์ ์ฌ๋ ๊ฒ์ ๋ณธ์ง์ ์ธ ๋ถํธํจ์
๋๋ค.
์. ๋น์ ์ ๊ทธ๊ฒ์ ๋ํด ํ์ผ๋ก๋ถํฐ ๋
ผ์์ ์ป์ง ๋ชปํ ๊ฒ์
๋๋ค. ์๋์ ์ด์ง ์์์ต๋๋ค. NgModule
๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์์๋ค๋ฉด ๋ฒ ํ ๋ฒ์ ์ผ๋ก ์ ๊ณตํ์ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ IMO๋ RC๊ฐ ๋ฌด์์ธ์ง์ ๋ํ ์ผ๋ถ ๊ฐ๋ ์ ๋งน๋ชฉ์ ์ผ๋ก ๋ฐ๋ฅด๊ณ ์๋ชป๋ ์ ํ์ ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ์ฌ๋ฐ๋ฅธ ์ ํ์ ๋ฐฐ์กํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ํ ... ๋งํ๊ธฐ๊ฐ ๊ทธ๋ค์ง ์์์ด ๋์ง๋ ์์ง๋ง ... ์ต๊ทผ์ ๋ค๋ฅธ ์ฃผ์ ์ํํธ์จ์ด ํ์ฌ๋ฅผ ๋ณธ ์ ์ด ์๋ค๋ฉด "๋ฆด๋ฆฌ์ค ํ๋ณด"์ ๋ํด ๋๋ฑํ๊ฒ ์ ์ฐํ ๊ฐ๋ ์ ๋ฐ๊ฒฌํ์ ๊ฒ์ ๋๋ค. ์ด๋ค ์ด์ ์์์ธ์ง ์ฐ๋ฆฌ ์ ๊ณ๊ฐ ๊ฐ๋ ๋ฐฉ์์ ๋๋ค.
์ ๋ ์ง๊ธ ์ฌ๋ฌ ์ฑ์ ์ ํํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค๋ ๊ทธ๋ ๊ฒ ํ๋๋ก ๋์์ต๋๋ค. "_๊ทธ๋ค์ด ๋ด ์น์ฆ๋ฅผ (๋ค์) ์ด๋ํ์ต๋๋ค_" ๋จ๊ณ๋ฅผ ์ง๋๋ฉด ๊ฝค ๊ธฐ๊ณ์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ด๊ณ ๋ชจ๋๊ฐ ๋ ๋์ ์์น์ ์๋ค๊ณ ์๊ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด์ฉ๋ฉด ๊ทธ๋ค์ ๋์๊ฒ ์น์ ํ๊ฒ ๋ํ๋ ๊ฒ์ผ ์๋ ์์ต๋๋ค. OTOH, ๋๋ ๊ทธ๋ ๊ฒ ์ข์ ์ฌ๋๋ค๊ณผ ์ด์ธ๋ฆฌ์ง ์์ต๋๋ค ;-)
(๋ํ, re: ์ด๋ฆ)
์ฐ๋ฆฌ๋ ์ด๋ฆ์ ์ฃฝ๋๋ก ์์ ๊ฑฐ๋ฅผ ๋ชฐ์๋ค. ๊ทธ๊ฒ๋ค์ ์ฒ์์ AppModules๋ผ๊ณ ๋ถ๋ ธ์ง๋ง(๊ตฌ์ฑ ์์๋ณด๋ค ๋ ๋์ ์์ค์ธ "์ฑ"์ ์ค๋ช
ํ๊ธฐ ๋๋ฌธ์), ์ถฉ๋ถํ ๊ด๋ฒ์ํ ์ฉ์ด๊ฐ ์๋์์ต๋๋ค. ํจํค์ง, ๋ฒ๋ค, ๋ฐฐ๋ด, ๊ธ๋ก๋ธ ๋ฑ
ES ๋ชจ๋์ ๋์ฒดํ๋ ๊ฒ์ด ์๋์ ๋ช ์ฌํ์ญ์์ค. ํธ๋ฆฌ ์ ฐ์ดํน๊ณผ ES ๋ชจ๋์ด ๋ชจ๋ Angular ๊ฐ๋ฐ์์๊ฒ ๋ ์ ์๋ํ๋๋ก ํ๋ ํ์ฅ์ด๋ฉฐ ์๋ฏธ์ ์ผ๋ก๋ ES ๋ชจ๋์ด ์๋ํ๋ ๋ฐฉ์(๊ฐ์ ธ์ค๊ธฐ, ๋ด๋ณด๋ด๊ธฐ, ์ ์ธ)๊ณผ ์ ์ฌํฉ๋๋ค.
๊ทธ๋์ ๋ค์ด๋ฐ์ด ์ด๋ ต๋ค. NgModule์ ๋๋ค.
์ฐ๋ฆฌ๋ 2.0.0์ ๋ํ ์์ ํ API์ด๋ฏ๋ก ๋ฆด๋ฆฌ์ค ํ ๋ช ๊ฐ์ ๋์ ์ด๋ค ํจํด์ด ๊ฐ๋ฐ๋๊ณ ์ด๋์์ 2.1์ ๋ํด ๋ ๋์ ์ถ๋ก ์ ํ ์ ์๋์ง ํ์ธํฉ๋๋ค.
๋งค์ฐ ํต์ฐฐ๋ ฅ ์๋ ์๊ฒฌ์ ์ฃผ์ @robwormald @wardbell ์๊ฒ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋์๊ฒ ๊ฐ์ฅ ํฐ ์๋ก๋
"์ฐ๋ฆฌ๋ 2.0.0์ ๋ํด ์์ ํ API์ด๋ฏ๋ก ๋ฆด๋ฆฌ์ค ํ ๋ค์ ๋ช ๋ฌ ๋์ ์ด๋ค ํจํด์ด ๊ฐ๋ฐ๋๊ณ ์ด๋์์ 2.1์ ๋ํด ๋ ๋์ ์ถ๋ก ์ ํ ์ ์๋์ง ๊ด์ฐฐํ ๊ฒ์ ๋๋ค."
๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ช ์ฃผ ์ ์ ์ด๋ฏธ ๋ค์๋ ๊ฒ์ด์ง๋ง ์ง๊ธ์ ์ด ๋ชจ๋ ํผ๋๋ฐฑ๊ณผ ํจ๊ป NgModules์ ๋งฅ๋ฝ์์ ๊ตฌ์ฒด์ ์ ๋๋ค. ์ด์ฌํ์ ๊ฐ์ ๋งํ ์ ์๋ ์์ ๊ฐ์ด์์ต๋๋ค. ์ฌ๊ธฐ๊น์ง ์๋ฃ๋์์ต๋๋ค. ์ด์ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋๋ฅผ ๋ง์น ์๊ฐ์ ๋๋ค. ๋ํ ์ด ์ด์ ํ์ ๋๋ฌํ ์ ์ฒด ng2 ํ๊ณผ ์ปค๋ฎค๋ํฐ์ ์ถํ์ ์ธ์ฌ๋ฅผ ์ ํ๊ณ ์ถ์ต๋๋ค! ์์ผ๋ก์ ํฅ๋ฏธ์ง์งํ ์๊ฐ๋ค.
๋๋ ์์งํ ๋น์ ์ด @SaltyDH๋ผ๊ณ ๋งํ ์ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค. Angular 2 ์ดํ์ด ๋๋ฌ์ต๋๋ค.
๊ทธ๋ ๋ค๊ณ Angular 2๊ฐ ์งํํ๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ํฅํ ๋ฆด๋ฆฌ์ค๊ฐ ์์ ๊ฒ์ ๋๋ค. ํ์ง๋ง 2.0์ผ๋ก ์ด์ด์ง๋ ์ดํ์... ๋!
์ ์งํจ๊ณผ ๋ช ์์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ๋๋จํ ๊ฐ์ฌํฉ๋๋ค. ์ ๋ง ๋์์ด ๋ฉ๋๋ค.
NgModule์ฉ API์ ์ด๋ฆ ์ง์ ๋ฐ ๋ณต์ ์ ๋ํ ๊ฐ๋จํ ์๊ฐ์ ์ฝ๊ฐ ๋ฒ๊ฑฐ๋กญ๋ค๊ณ ์๊ฐํฉ๋๋ค.
IMO:
@NgModule({
declarations: [ SharedComponentOne, SharedComponentTwo ],
exports: [ SharedComponentOne ]
})
export class SharedModule {}
...๋ค์๊ณผ ๊ฐ์ด ๋ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ ์์ต๋๋ค.
@NgModule({
private: [ SharedComponentTwo ],
public: [ SharedComponentOne ]
})
export class SharedModule {}
1) ๋ช ๋ช ์ ๋ํ WRT(๊ณต๊ฐ ๋ฐ ๋น๊ณต๊ฐ ๋ ์ ์ธ ๋ฐ ๋ด๋ณด๋ด๊ธฐ), ๋ณธ์ง์ ์ผ๋ก ์์ @robwormald ๋ฐฉ์์ด๋ฉฐ ๋ง์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ค๋ช ํ๊ณ ์๋ค๊ณ ํ์ ํฉ๋๋ค.
2) (์ด๋ฆ ์ง์ ๋ฌด์) ์ SharedComponentOne
๋ฅผ ๋ฐ๋ณตํด์ผ ํฉ๋๊น? "์์ถ"์ธ ๊ฒฝ์ฐ "์ ์ธ"์ด์ด์ผ ํ๋ฏ๋ก ๊ทธ๋ฐ ์์ผ๋ก ๋์๊ฐ๋ฅผ ์ ๊ฑฐํ ์ ์๋ค๊ณ ๋งํ ์ ์์ต๋๊น?
๋งค์ฐ ์ฃผ๊ด์ ์ธ ๊ฒ์ ๋ํ ๋์ 2์ผํธ ๐ - ์์ธํ ์ค๋ช ์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
@robwormald @wardbell ์์ธํ ์ค๋ช ๊ฐ์ฌํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์ค๋ ๋์ ์๋ถ๋ถ์์ ๋งํ๋ฏ์ด NgModules
๋ ์ฐ๋ฆฌ๊ฐ ๋ ์ ์ ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ต๊ทผ์ ์๋ ํ
ํ๋ฆฟ ๊ธฐ๋ฐ ์์์ ๋ํ Validator ์ง์๋ฌธ์ ๋ง๋๋ ๊ฒ์
๋๋ค. RC5 ์ด์ ์๋ ์์์ ์์ฑํ๋ ๊ตฌ์ฑ ์์์์ ๊ฐ ์ง์๋ฌธ์ ๊ฐ์ ธ์์ผ ํ์ต๋๋ค. ์ด์ VaildatorModule
์ ํจํค์งํ๊ณ ํ์ํ ๊ณณ๋ง๋ค ๋ชจ๋์ ๊ฐ์ ธ์ต๋๋ค. ๋์ค์ ์ถ๊ฐํ๋ ๋ชจ๋ Validator๋ ValidatorModule
๋ฅผ ๊ฐ์ ธ์จ ๋ชจ๋์์ ์๋์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ข
์์ฑ์ ๋ํ ๊ฑฑ์ ์์ด ํ
ํ๋ฆฟ์ ์
๋ฐ์ดํธํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
@JamesHenry declarations
, imports
๋ฐ exports
๋ import
, export
๋ฐ declare
์ ๊ฐ์ด NgModules๋ฅผ ES6 ๋ชจ๋๊ณผ ํจ๊ป ์ ์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ES6 ๋ชจ๋์
๋๋ Sugaring์ ๋์ํฉ๋๋ค. ๋ด๋ณด๋ธ ๊ฒ๋ค์ ๋ง์ ์ฒ๋ผ ์ ์ธ ์๋์ผ๋ก ์คํ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
@์ ์์คํจ๋ฆฌ
1) ์ฐ๋ฆฌ๋ ๋ฉํ ๋ชจ๋ธ์ด es ๋ชจ๋์ด ์๋ํ๋ ๋ฐฉ์์ ๋ ๊ฐ๊น๊ธฐ ๋๋ฌธ์(์ ์ด๋ ๋ฒ์ ์ง์ ์ธก๋ฉด์์) ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ๋ฅผ ๊ณ ์ํ์ต๋๋ค. ๋ชจ๋์์ ํญ๋ชฉ์ ์ ์ธํ๊ณ , ๋ค๋ฅธ ๋ชจ๋์์ ํญ๋ชฉ์ ๊ฐ์ ธ์ค๊ณ , ์ฌ์ฉํ ์ ์๋๋ก ๋ด๋ณด๋ด๊ธฐ ๋ค๋ฅธ ์ฌ๋.
2) if it is an "export" it must be a declaration, so it could just be desugared that way?
-> ์์ MaterialModule ์์ ์ ๊ฐ์ด ngModule์ ์ฌ์ฉํ์ฌ ๋ค์ ๋ด๋ณด๋ด๊ธฐ ์ ๊น์ง ์๋ํฉ๋๋ค. ngModule์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ชจ๋์์ ์ ์ธ๋ ๊ฒ์ ๋ค์ ๋ด๋ณด๋ผ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ถ๋ก ์ด ๋ฌด๋์ง๋๋ค.
@robwormald ์ข์ ๋๊ธ! ํ์คํ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์๋ฐ์ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ง๊ธ @NgModule
๋ฅผ ์ฌ์ฉํ๋ ๋ํ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ ์์ผ๋ฉฐ ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ ์์๋ฅผ entryComponents
์ ๋ฑ๋กํ๋ ๊ฒ์ ์์ด๋ฒ๋ ค ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ๋ ๋์ ์ด๋ ค์์ ๊ฒช๊ณ ์๋ ์ฌ์ฉ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ถ๋ช
ํ ๋ช
ํํ์ง ์์ง๋ง ๊ณ ๊ธ ๊ธฐ๋ฅ์ด๋ผ ์ดํด๊ฐ...
์๊ฐ์ด ์ง๋๋ฉด ๊ฐ๋ผ์์ ๊ฑฐ๋ผ๊ณ ํ์ ํด์
@shlomiassaf ๊ฐ์ฌํฉ๋๋ค!
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ธ๊ธํด์ผ ํฉ๋๋ค.
Angular์ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ๋ ๋ผ์ฐํฐ๊ฐ entryComponents์ ๋ฐ๋ก ์ ์๋ผ๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ ์ ์ธ ๋ฐ ๊ฒฝ๋ก ๊ตฌ์ฑ์ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ์ง๋ง entryComponents์๋ _not_ ์ถ๊ฐํฉ๋๋ค. (๊ธฐ์ต - entryComponent === ์ ํ์๊ฐ ์๋ ํด๋์ค๋ก ์ฐธ์กฐํ๋ ค๋ ๊ฒ)
๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํ์ฉํ ์ ์๋ ๋ฉ์ง ํธ๋ฆญ์ด ์์ต๋๋ค ANALYZE_FOR_ENTRY_COMPONENTS
๋ผ๋ ๋ง๋ฒ์ ํ ํฐ์ด ์์ต๋๋ค. https://github.com/angular/angular/blob/master/modules/%40angular/router/src/ ๋ฅผ ์ฐธ์กฐํ์ธ์. ๋ผ์ฐํฐ๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์
๋ฐ๋ผ์ ๋์ ์ผ๋ก ์ฝ์ ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
@NgModule({
providers: [ DialogService ]
})
export class DialogModule {
static withComponents(componentList): NgModuleWithProviders {
return {
ngModule: DialogModule,
providers : [
{ provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: componentList, multi: true }
]
}
}
}
์ฒ๋ผ ์ฌ์ฉ
@NgModule({
declarations: [ MyConfirmDialog, MyQuestionDialog ],
imports: [
DialogModule.withComponents([ MyConfirmDialog, MyQuestionDialog ])
]
})
export class MyAppModule {}
๊ทํ์ ์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ์๋ํ ์๋ ์๊ณ ์๋ํ์ง ์์ ์๋ ์์ต๋๋ค.
@JamesHenry declarations
๊ฐ private
์ ํผ๋๋์ง ์๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. _์ด ๋ชจ๋์ ์ด ๊ตฌ์ฑ ์์๋ฅผ ์ ์ธํฉ๋๋ค_. ๋น์ ์ ๊ณต๊ฐ ๋๋ ๋น๊ณต๊ฐ์ ๋ํด ์ด๋ ํ ์ง์ ๋ ํ์ง ์์ต๋๋ค. ์์ ๊ถ ์ฃผ์ฅ์ ํ๊ณ ์์ต๋๋ค.
ES6 ๋ชจ๋์์ ์ผ์ด๋๋ ์ผ๊ณผ ์ ๋ง ๋น์ทํฉ๋๋ค. ํ์ผ ๋ด์์ ์ ์ํ๋ ๋ชจ๋ ๊ฒ์ ํด๋น ํ์ผ์ ์ํด ์ ์๋ ๋ชจ๋์ "์์"๋ฉ๋๋ค. ๊ณต๊ฐ ์ฌ๋ถ๋ export
ํค์๋ ์ฌ์ฉ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
๊ทธ๋ฆฌ๊ณ ES6 ๋ชจ๋๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ ธ์จ ํญ๋ชฉ์ _๋ค์ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค_.
์ ๋ declarations
๋ฅผ ๋์ผํ ๋ฌผ๋ฆฌ์ ํ์ผ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ชจ๋ ๊ตฌ์ฑ ์์, ์ง์๋ฌธ ๋ฐ ํ์ดํ๋ฅผ ๋ฐฐ์นํ์ง ์์๋ ๋๋ "ํธ๋ฆญ"์ผ๋ก ์๊ฐํ๊ณ ์ถ์ต๋๋ค(์๋ํ ๊ฒฝ์ฐ ES6 ๋ชจ๋์์ ์ํํด์ผ ํ๋ ๊ฒ์ฒ๋ผ ์ด๋ฌํ ๋ชจ๋ ํด๋์ค๋ ๋์ผํ ES6 ๋ชจ๋์ ์ํฉ๋๋ค.
๋ฐ๋ผ์ ์ ์๊ฒ declarations
๋ ์ด๋ฌํ ํ์ผ์ ํ๋์ ์์ฒญ๋๊ฒ ํฐ ํ์ผ์ ๋ถ์ฌ๋ฃ๋ ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ด์จ๋ _my_ ๋ฉํ ๋ชจ๋ธ์
๋๋ค.
ํ ๊ฐ์ง ์ฃผ๋ชฉํด์ผ ํ ์ ์ ๋ชจ๋ ์ปจํ ์คํธ์์ ๊ณต๊ธ์์ ๊ตฌ์ฑ ์์ ๊ฐ์ ๋ ผ๋ฆฌ์ ์ฐจ์ด์ ๋๋ค.
๊ณต๊ธ์์ ๊ตฌ์ฑ ์์๋ ๊ฐ์ ์์น( NgModuleMetadataType
)์์ ์ ์ธ๋๋ฏ๋ก ๊ฐ๋ฐ์๋ ๊ณต๊ธ์๊ฐ ๊ตฌ์ฑ ์์์ฒ๋ผ ๋์ํ๋ค๊ณ ์ง๊ด์ ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋์ ๊ณต๊ธ์๊ฐ ํด๋น ๋ชจ๋์ ๋ํ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. .
๊ณต๊ธ์๋ DI์ ์ํด ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๋ฌผ๋ก ์ฌ์ค์ด ์๋๋ฉฐ ์ค์ ๋ก๋ ์์ฉ ํ๋ก๊ทธ๋จ ์์ค์
๋๋ค.
๋ชจ๋์ ๊ตฌ์ฑ ์์๋ ๋ด๋ณด๋ด์ง ์์ผ๋ฉด ๋น๊ณต๊ฐ์ด๋ฏ๋ก ํผ๋์ ์ผ์ผํฌ ์ ์์ต๋๋ค.
๋๋ ๋ชจ๋์ ๊ฐ๋ ์ ์ข์ํฉ๋๋ค. IMO API์ ์ ์ผํ ๋ฌธ์ ๋ ๋ชจ๋ ๋ด์์ ๋์ผํ ์์น์ ์ ์ธ๋ ๊ณต๊ธ์์ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ๋ ๊ฒ์ ๋๋ค... ์ ๊ท ์ฌ์ฉ์์๊ฒ๋ ์ดํดํ๊ธฐ ์ด๋ ค์ด ๊ฒ์ ๋๋ค.
@wardbell ๊ฐ์ฌํฉ๋๋ค Ward ์ ๋ง ์ ๋ง ๋๋จํฉ๋๋ค! ํ ๋ก ์์ ๋ฐฉ๊ธ ์ธ๊ธํ ๋ด์ฉ์ ๋ช ํํ ํ๊ธฐ ์ํด Angular 2๊ฐ API๊ฐ ์์ฑ๋์๋ค๊ณ ๋งํ ๋ ์ฌ๊ธฐ์ ๋งํ๋ ๋ค์์คํ์ด์ค๋ ๋ฌด์์ ๋๊น? @๋ชจ๋/???
@robwormald ๊ฐ์ฌํฉ๋๋ค! ์ข์ ํ!!!
์คํ๋ง ํ๋! ์ํํฉ๋๋ค.
๋๋ Google ์ง์์ด ์๋๋ฉฐ ์๋ง๋ Google ์ง์์ด ๋งํ ์ ์์ ๊ฒ์
๋๋ค. ๋๋ ๋ด ๋ ๋์ผ๋ก ๋ณด๊ณ ์๋ ๊ฒ๋ง ๋ณด๊ณ ํ ์ ์์ต๋๋ค. @angular/
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธํธ์์ ๋งค์ฐ ์ฌ๊ฐํ API ์ ์ง๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ถ์ ๋ณด๋ฅ๋ฅผ ์ ๋นํํ ๋งํผ ์ถฉ๋ถํ์ง ์๊ฑฐ๋ ๊น์ง ์๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ ์์ ์๋ ์ข์ ์์ด๋์ด๊ฐ ์์ต๋๋ค. ๊ทธ๋์ผ ํ๋ค. ์ข์ ์์ด๋์ด๋ ๋ฉ์ถ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ _์ด๊ฒ์ด Angular 2.0_์ด๋ผ๊ณ ๋งํ ๋๊ฐ ๋์์ต๋๋ค.
์ง๊ธ๊ณผ "์ต์ข " ์ฌ์ด์ ์ฌ์ฉ๋์ง ์๋ API์ ์ ๊ฑฐ๋ฅผ ์ฝ์ํ์ต๋๋ค. ๊ทธ๊ฒ์ ์กฐ์ ์ด ์์ต๋๋ค ... ๋๊ตฌ๋ ๋ง์คํฐ๋ฅผ ๋ณด๋ฉด ์ ์ ์์ต๋๋ค. ๋๋ ๊ฒ ๊ฐ์์.
@wardbell ์์ถ์ ๋ํด ๋ง์ํ์ ๋ด์ฉ์ ๊ทธ๋๋ก ๋ฐ์ํฉ๋๋ค.
index.ts๋ ํ๋ ๋ค์์ผ๋ก ์ฑ์์ก์ต๋๋ค.
export * from 'a.component'
export * from 'b.component'
export * from 'c.component'
export * from 'p.directive'
export * from 'x.service'
export * from 'z.pipe'
์ด์ export * from my.module
๋ก ์ค์ด๋ญ๋๋ค.
NgModule ๋ด๋ณด๋ด๊ธฐ์์ ๋ชจ๋ ๋ฌผ๊ฑด์ ๊นจ๋ํ๊ฒ ์ ์งํ์ญ์์ค.
exports: [ AComponent, BComponent, CComponent, PDirective ]
๋ฑ
@wardbell ์ ์๊ฐ @NgModules.providers
๋ @NgModules.rootProviders
๋๋ @NgModules.appProviders
$์ด์ด์ผ ํ์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๊ณต๊ธ์์ ๋งฅ๋ฝ์ ๋ช ํํ๊ฒ ์ค๋ช ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@shlomiassaf ์คํด์ ์์ง๊ฐ ์์ต๋๋ค. @NgModules.providers
์ ํจ๊ณผ๋ ์ด๋ ฌํ ๋ชจ๋๊ณผ ๊ฒ์ผ๋ฅธ ๋ชจ๋์์ ๋ค๋ฆ
๋๋ค. ์ง์ฐ ๋ก๋๋ ๋ชจ๋์ ์์ฒด ํ์ ์ธ์ ํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ฆ, _ํด๋น ์ ๊ณต์๊ฐ _root_ ์ธ์ ํฐ๊ฐ ์๋ _child_ ์ธ์ ํฐ์ ์ถ๊ฐ๋ฉ๋๋ค. ๊ทธ๋์ ๋ง์ฝ lazy๊ฐ lazy๊ฐ lazy๋ฅผ ๋ก๋ํ๋ค๋ฉด ๊ทธ๊ฒ์ ์งํ๋ฉ๋๋ค.
์๋ง๋ ๋ค๋ฅธ ์ด๋ฆ์ด ์์์ ๊ฒ์
๋๋ค. ๋น์ ์ _๊ทธ_๊ฐ ์ด๋ป๊ฒ ๋๋์ง ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ rootProviders
๋ ๋ด๊ฐ ๋ฐฉ๊ธ ๋งํ ์ด์ ๋๋ฌธ์ ๊ฐ์ ๋์ง ์์์ ๊ฒ์
๋๋ค.
@wardbell ์ ๋์ํ์ง๋ง ๊ทธ ์๋๋ฆฌ์ค์ ๋ํด ์๊ฐํ์ง ์์์ต๋๋ค.
์ธ์ฌํ ๋ต๋ณ๊ณผ ์ํต์ ๊ฐ์ฌํ๋ค๋ ๊ฐ์ ์ ๋ํ๊ณ ์ถ์์ต๋๋ค. ์ด๊ฒ์ด ์ค์ ๋ก rc-to-final ์ฑ์ฅํต์ ๋ง์ง๋ง์ด๋ผ๋ฉด ์ฐ๋ฆฌ๋ ๊ฒฝ์ฃผ๋ฅผ ์์ํฉ๋๋ค. ๊ฐ์ฌ ํด์!
๋ค๋ฅธ ์ฌ๋๋ค์ด ๋งํ๋ฏ์ด ํ์ ํผ๋๋ฐฑ์ ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฐ๋ฐ ๋จ๊ณ์์ ์ด๋ฌํ ์ข
๋ฅ์ ๋ณ๊ฒฝ์ ๊ทผ๋ณธ์ ์ธ ์ค๊ณ ์ค๋ฅ๋ฅผ ์์ํฉ๋๋ค.
์ฐ๋ฆฌ ์์ ์๊ฒ ์ ์งํฉ์๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ ์ด๋ฌํ ์ค์๋ฅผ ์ ์ง๋ ์ต๋๋ค. ๋ฐ๋ผ์ ํ๋จํ๋ ๊ฒ์ ์๋ฌด ๊ฐ์น๊ฐ ์์ง๋ง ์ ๊ฐ ์ค์๋ฅผ ํ๋ฉด ์ ๋ฅผ ๊ฒธ์ํ๊ฒ ๋ง๋ค๊ณ ๋์ค์ ๋ ์ ์คํ๊ฒ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋๋ ๊ทธ๊ฒ์ด Angular ํ์ ๋์ผํ ์ํฅ์ ๋ฏธ์น๊ณ ์๋ค๋ ์ธ์์ ๋ฐ์ง ๋ชปํ์ต๋๋ค.
์ ๋ ์ ์ธ์ ๋์ผํ ๋ฌผ๋ฆฌ์ ํ์ผ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ชจ๋ ๊ตฌ์ฑ ์์, ์ง์๋ฌธ ๋ฐ ํ์ดํ๋ฅผ ๋ฐฐ์นํ ํ์๊ฐ ์๋๋ก ํ๋ "ํธ๋ฆญ"์ผ๋ก ์๊ฐํ๊ณ ์ถ์ต๋๋ค. ๋์ผํ ES6 ๋ชจ๋์ ์ํจ).
๋ฐ๋ผ์ ์ ์๊ฒ ์ ์ธ์ ์ด๋ฌํ ํ์ผ์ ํ๋์ ์์ฒญ๋๊ฒ ํฐ ํ์ผ์ ๋ถ์ฌ๋ฃ๋ ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ด์จ๋ ๋ด ๋ฉํ ๋ชจ๋ธ์ ๋๋ค.
@wardbell ์ด์ฉ๋ฉด ๊ทผ๋ณธ์ ์ธ ๊ฒ์ ๋์น๊ณ ์์์ง๋ ๋ชจ๋ฅด์ง๋ง NgModule.declarations
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ESModules ์ค ์ผ๋ถ๋ง ๋ค์ ๋ด๋ณด๋ด๊ณ ์ ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ๊ณผ ๊ทผ๋ณธ์ ์ผ๋ก ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์ด๋ฌ๋ํ๊ฒ๋ ESModule์ ์ฃผ์ ํ๊ณ๋ ๋
ผ๋ฆฌ์ ๋ชจ๋์ด ์๋ ๋ฌผ๋ฆฌ์ ๋ชจ๋์ ๊ฐ๋
๋ง ์ ๊ณตํ๋ค๋ ๊ฒ์
๋๋ค. NgModule
๊ฐ ์ด๋ป๊ฒ ๊ฐ์ ๋๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด๋ ์ง๊ณ ๊ตฌ๋ฌธ์ด ๋ค๋ฅผ ๋ฟ ์ถ์ํ ์์ค์ ์๋ฏธ ์๋ ์์ค์ผ๋ก ์ฌ๋ฆฌ์ง ์์ต๋๋ค.
๋ํ NgModules๋ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋ฌธ์ ๋ฅผ ์์ ํ ํด๊ฒฐํ์ง ๋ชปํฉ๋๋ค.
์ ์ฒด Function[]
ํจํด์ ๋ชจ๋ ๋ฉด์์ ๋ถํฌ๋ช
ํฉ๋๋ค. ๊ฒ์ ๊ฐ๋ฅ์ฑ์ 0์ผ๋ก ๋จ์ด๋จ๋ฆฝ๋๋ค. ๊ณต๊ธ์ ๋ฐฐ์ด์ ๋ฌด์์ด ์๋์ง ํ์ธํ๋ ค๋ฉด ์์ค๋ฅผ ์ฝ์ด์ผ ํฉ๋๋ค. NgModule.exports
๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
๊ทธ๋ฌ๋ IMO๋ RC๊ฐ ๋ฌด์์ธ์ง์ ๋ํ ์ผ๋ถ ๊ฐ๋ ์ ๋งน๋ชฉ์ ์ผ๋ก ๋ฐ๋ฅด๊ณ ์๋ชป๋ ์ ํ์ ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ์ฌ๋ฐ๋ฅธ ์ ํ์ ๋ฐฐ์กํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ํ ... ๋งํ๊ธฐ๊ฐ ๊ทธ๋ค์ง ์์์ด ๋์ง๋ ์์ง๋ง ... ์ต๊ทผ์ ๋ค๋ฅธ ์ฃผ์ ์ํํธ์จ์ด ํ์ฌ๋ฅผ ๋ณธ ์ ์ด ์๋ค๋ฉด "๋ฆด๋ฆฌ์ค ํ๋ณด"์ ๋ํด ๋๋ฑํ๊ฒ ์ ์ฐํ ๊ฐ๋ ์ ๋ฐ๊ฒฌํ์ ๊ฒ์ ๋๋ค. ์ด๋ค ์ด์ ์์์ธ์ง ์ฐ๋ฆฌ ์ ๊ณ๊ฐ ๊ฐ๋ ๋ฐฉ์์ ๋๋ค.
@wardbell ์ ์๊ฒ RC์ ๋ํ ๊ฐ์ฅ ํฐ ๋ถ๋ง์ ng-conf์ google i/o๋ก ์ธํด Beta๊ฐ RC๋ก ํธ์๋์๋ค๋ ์ธ์์ ๋๋ค. ์ง์ ์ ์ด๋ฃจ๊ธฐ ์ํด์๋ ๊ทธ ์ด์ ๋ฅผ ๋ถ๋ช ํ ํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ _๋ง์ผํ _์ด์๊ณ ๊ธฐ์ ์๋ก์ ์ฐ๋ฆฌ๋ ์ฑ์์ ๋ํ ์ด๋ฌํ ์ ์ฐํ ๊ฐ๋ ์ ์ถ์ธ์ ๋ง์ ์ธ์์ผ ํฉ๋๋ค. ๋ฒ ํ๊ฐ ์๋ช ์ ์์๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฒ ํ๋ฅผ ํ๋งคํ๋ ๊ฒ์ด ์ณ์ ๊ฒ์ธ์ง์ ๋ํ ๋ ผ์๊ฐ ์๋ ๊ณ๊ณก์์ ์ ๋ช ํ ์๋์ฐจ ์ ์กฐ์ ์ฒด๋ฅผ ์๊ณ ์์ ๊ฒ์ ๋๋ค. ๊ณผ์ฅํ๊ณ ์ถ์ง๋ ์์ง๋ง ๊ธฐ์ ์๋ก์ ์ฐ๋ฆฌ ์ฐ์ ์ด ์๋ชป๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ ์ฐ์ ์ด ๊ทธ๋ ๊ฒ ๊ฐ๊ณ ์๋ค๋ฉด ๋ฐ๋์ ๋งํด์ผ ํฉ๋๋ค.
ngmodule ์ ๊ทผ ๋ฐฉ์์ ์ข์ํ์ง๋ง @robwormald ์ง๋ฌธ์ด ์์ต๋๋ค.
๊ตฌ์ฑ ์์, ์ง์๋ฌธ ๋ฐ ํ์ดํ๊ฐ ์๋ ๊ณต์ ์๋น์ค๊ฐ ์์ต๋๋ค. ์๋น์ค( forRoot
)๋ง ์๊ณ ๋ชจ๋ ๋น์ฆ๋์ค ๋ชจ๋ธ ํด๋์ค๋ฅผ ํฌํจํฉ๋๋ค. app.module
๋ ServerApiModule.forRoot()
$๋ฅผ ๊ฐ์ ธ์ค๋ฏ๋ก ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์์ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋น์ค ๋ฐ ๋น์ฆ๋์ค ๋ชจ๋ธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ ๋ชจ๋์ด ์ด ๊ณต์ ๋ชจ๋์ ๊ฐ์ ธ์์ผ ํฉ๋๊น? ๊ธฐ์ ์ ์ผ๋ก ์ด๊ฒ์ ํ์ํ์ง ์์ง๋ง(์ค๋ฅ ์์) ์๋ฏธ๋ก ์ ๊ด์ ์์๋ ์๋ฏธ๊ฐ ์์ต๋๋ค(์ค๋ฅ ์์). ๊ทธ๋ฐ ์ข
๋ฅ์ ๋ชจ๋๋ก ๋ฌด์์ ํด์ผ ํฉ๋๊น? ์์
ํ ๊ฒ์ธ๊ฐ ๋ง ๊ฒ์ธ๊ฐ? ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ ๋ฒ์งธ ๊ฐ๋ฅ์ฑ์ ์ข์ํฉ๋๋ค. '๋๋ ๊ธฐ๋ฅ ๋ชจ๋์ด๊ณ ์ด ์๋น์ค๊ฐ ํ์ํ๊ณ ์ด ๋น์ฆ๋์ค ๋ชจ๋ธ ํด๋์ค๊ฐ ํ์ํฉ๋๋ค'๋ผ๊ณ ๋์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค!
๊ทธ๋์ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/๋ชจ๋๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ngModule๋ก ๊ณ ํต์ ๋๋ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๋ฌ ๋ฒ ๋งํ๋ฏ์ด ๋ ๊ฐ์ง ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ํผํฉํ์ง ๋ง์ญ์์ค. ๊ทธ๊ฒ์ ํผ๋ ์ค๋ฌ์ธ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ ๊ตฌ์ฑ ์์์ ๋ํด ngModule์ ์ ์ธํ๋ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๋ํด ํจ์ฌ ๋ ๋ง์ ๋ณด์ผ๋ฌ ์ฝ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ฐฉ๋ฒ์ ๋๊ท๋ชจ์์๋ ์๋ํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฌ๋ฃ์ ๊ฐ์ ๊ตฌ์ฑ ์์ ๋ฐ ๋ชจ๋ ์ ์ธ์ ํผํ๊ธฐ ์ํด ๋ค์ ์คํ์ธ ComponentModule์ด๋ผ๋ ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ๊ฐํ์ง ๋ง์ญ์์ค.
์ด์ชฝ์ผ๋ก? ๊ตฌ์ฑํ์ด ๋ณด์ด๋ฉด. ๋๋ ๊ทธ๊ฒ์ด ngModule์ ์ผ๋ถ์ฌ์ผ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๋ง์ ๊ตฌ์ฑ ์์๋ฅผ ํจ๊ป ๋ฌถ๋ ๊ฒฝ์ฐ๊ฐ ์๋ ๊ฒฝ์ฐ NgModule์ ์ฌ์ฉํ ์ ์์ต๋๋ค. "์ด์ ๊ตฌ์ฑ ์์"์ ๊ฐ์ ๋ ๋ฆฝ ์คํํ ๊ตฌ์ฑ ์์๋ฅผ ์ํ๋ฉด ComponentModule์ ์ฌ์ฉํ๊ณ ๋ชจ๋ ์ข ์์ฑ์ ์๊ณ ์์ผ๋ฉฐ ๋ค๋ฅธ ๋ชจ๋์ ๋ํ ๋ชจ๋ ์ข ์์ฑ์ด ๋ ์ ์์ง๋ง ์ผ๋ถ๋ ์๋๋๋ค.
@nathraQ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๋ํด NgModule์ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ ๊ทธ๋ด ์ ์๋ค๋ฉด NgModule์ด ๋์ ๋์ง ์์์ผ ํ๊ณ ๊ตฌ์ฑ ์์๊ฐ ๋ฐฉ๊ธ ํฅ์๋์ด์ผ ํฉ๋๋ค. ์์ฉ๊ตฌ์ ๊ด๋ จํ์ฌ Angular 2๋ ๋๋ฌด ๋ฌด๊ฑฐ์์ ์ด ์์ ์์ ๊ฑฐ์ ์ค์ํ์ง ์์ต๋๋ค.
์์ฒด ๋ชจ๋ ์์คํ ์ด ์๋ ๋ง์ ํ๋ ์์ํฌ๋ ๊ตฌ์ฑ์ ๋ ์ด์์ ๋ฐ ๊ฐ์์ฑ์ ์ํ ํ์ค ํจํด์ ์ค์ ํ๊ธฐ ์ํด ๊ท์น์ ๋งค์ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉํ์ต๋๋ค. ํ ํ๋ช ํ ์ฌ๋์ ์ฌ์ค ์ดํ์ ๊ด์ต์ ์ ์ํ ์ ์๋ค๊ณ ๋งํ์ต๋๋ค. ๊ทธ๋ค์ ์ฒ์๋ถํฐ ๊ฑฐ๊ธฐ์ ์์ด์ผํฉ๋๋ค. ๋๋ ์ด ์ฃผ์ฅ์ ํ์์ ์ด์์ง๋ง ์ด ์คํจ๋ ๊ทธ๊ฐ ์ณ์๋ค๋ ๊ฒ์ ์ฆ๋ช ํฉ๋๋ค.
@aluanhaddad ์ฃ์กํฉ๋๋ค. ๋์ํ์ง ์์ต๋๋ค. ๋ง์ถคํ ์ข ์์ฑ ๊ด๋ฆฌ(์: ์ด ์ค๋ ๋์ ์์)๊ฐ ์๋ Angular 1.x์ ํ ๋ชจ๋์ ๋ํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์์ง๋ง ์ปจํธ๋กค๋ฌ, ์ง์๋ฌธ ๋ฐ ์๋น์ค ์งํฉ์ ๋ฒ๋ค๋ก ๋ฌถ๋ ๋ชจ๋์ ๋ํ ์ฌ์ฉ ์ฌ๋ก๋ ์์์ต๋๋ค.
๋ ๋ค ์ ์ฉํฉ๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฌ๋์ด ์ดํดํ ์ ์๋๋ก ํตํฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํฉ๋๋ค.
์์ฐ, ๊ธด ๊ธ์ ์ฝ์์ต๋๋ค :์ค๋ง์ผ:
์๋ก์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ฅ๋จ์ ์ ์ ์ ์์ง๋ง Angular 1์์ ๋ฌธ์ ๊ฐ ์์๋ ํ ๊ฐ์ง ์๋๋ฆฌ์ค์ ๋ํด ์๊ฐํ๊ฒ ๋์์ต๋๋ค.
@wardbell @robwormald -
SharedModule ํจํด์ ์ฌ์ฉํ๊ณ ๊ตฌ์ฑ ์์์ ๋ํด ๋์ผํ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๋ ๊ฐ์ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ui-bootsrap vs angular-strap someone?)๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ my-selectbox
๋ผ๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๋ ๋ค ๊ฐ์ ธ์ค๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๊น? ์ค๋ฅธ์ชฝ?
์ฌ๊ธฐ์์ ์ฝ์ ํ ๊ฐ์ง ์๋ฃจ์
์ ์ฌ์ฉ์ ์ ์ ๋ชจ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ฅผ ๋ค์ ๋ด๋ณด๋ด๋ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์
๊ทธ๋ ์ด๋๋ ๋๋ง๋ค ๋ํผ ๋ชจ๋์ ๊ณ์ ์
๋ฐ์ดํธํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋์?
๋ํ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์์ฒด ๊ตฌ์ฑ ์์ ์ ํ๊ธฐ๊ฐ ์์ ์ ์์ต๋๋ค(๋ ๋ฒ ์ด์ ๋ฐ์ํ ์ ์๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์์).
์ด ๋ฌธ์ ์ ๋ํ ๊ถ์ฅ ์๋ฃจ์
์ด ์์ต๋๊น? ์๋๋ฉด "๋ํผ ๋ชจ๋"์
๋๊น?
(์ ํ์์ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ฌ๋ฏธ๊ฐ ์์์ต๋๋ค.)
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์ด๋ฆ ๊ณต๊ฐ ๋๋ ์ ๋์ฌ๋ ํ๋ก์ ํธ์ ๊ท๋ชจ์ ์๊ด์์ด ์ผ๋ฐ์ ์ผ๋ก ์ข์ ์๊ฐ์ ๋๋ค. ์, ์๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๋ ์ฌ์ํ ๊ฒ์ผ ์ ์์ง๋ง ํ์ฌ ๋ชจ๋์ด ํฌํจ๋๋ ์ฆ์ ๊ฑฐ์ ํ์ ์ฌํญ์ด๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ์ต์ํ ๋ค๋ฅธ ๋ชจ๋์ด ์ ๋ฐ์ดํธ๋๋๋ผ๋ ์ถฉ๋์ด ๋ฐ์ํ์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์ฌํ ์ ์์ต๋๋ค. , ํ์ง๋ง ๊ฐ๋ฐ์๋ ์ข ์์ฑ ํธ๋ฆฌ๋ฅผ ๋ฐ๋ฅผ ํ์ ์์ด ๊ฐ ๋ชจ๋์ ์ํ ํญ๋ชฉ์ ์ฝ๊ฒ ์๋ณํ ์ ์์ต๋๋ค.
@nathraQ ์ด ๋ชจ๋ ํจํด์ ECMAScript ๋ชจ๋๋ก ๋ฌ์ฑํ ์ ์์ต๋๋ค. NgModule
์ ๋์
์ ์ฐ๋ฆฌ๋ฅผ ์๋ฌด๋ฐ๋ ์ป์ง ๋ชปํ์ผ๋ฉฐ AngularMaterial๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด์ ์ ์ ๊ณต๋ ์บก์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด ๊ตฌ์ฑ ์์๋ฅผ NgModules๋ก ์ ํํ๊ณ ์๋ค๋ ์ฌ์ค์ด ์์ ์ ์ฆ๋ช
ํฉ๋๋ค.
@aluanhaddad NgModules๋ ES ๋ชจ๋๊ณผ ๋งค์ฐ ๋ค๋ฅธ ์์ ์ ์๋ํ๊ณ ์์ผ๋ฉฐ ๊ตฌ์ฑ ์์ ์บก์ํ๋ ๋์ฒดํ์ง ์์ต๋๋ค. ์ฆ, ES ๋ชจ๋๊ณผ ๊ตฌ์ฑ ์์ ๋ชจ๋ ํต์ฌ ์ฑ ์์ ๋ณ๊ฒฝํ์ง ์์์ต๋๋ค. NgModules๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ์ํคํ ์ฒ๋ฅผ ์ค๋ช ํ๋ ๋งค์ฒด์ด๋ฉฐ, ์ด๋ Angular๊ฐ ์๋๋ฅผ ๋ ์ ์ดํดํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ทธ ์ค ES ๋ชจ๋๋ก๋ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ๊ตฌ์ฑ ์์๋น ํ๋์ NgModule์ ๋ฐ๋ผ์ผ ํ ๊ฒฝํ์ ๊ท์น์ด ์๋๋๋ค.
๋จ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ฌํ ์ด์ ์ผ๋ก๋ถํฐ ๋ง์ ์ด์ ์ ์ป์ง ๋ชปํ๋ ๊ฒ์ ์ฌ์ค์ด์ง๋ง ์ด๋ฌํ ๊ฒฝ์ฐ NgModules๋ ์ด์จ๋ "์ฑ๊ฐ์ฌ"์ด ์ ์ด์ผ ํฉ๋๋ค.
@emilio-martinez , @aluanhaddad ๊ฐ ์ด ๊ฒ์ฒ๋ผ ES6๊ณผ "๊ธฐ์กด Angular 2 way"๋ ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๋ค์์คํ์ด์ค๋ฅผ ์ ๊ณตํ์ต๋๋ค.
์ ๋ Angular 1์ ์ฌ์ฉํ์ฌ ๋งค์ฐ ํฐ ํ๋ก์ ํธ์์ ์์
ํ์ต๋๋ค. mb-product-list
๋ผ๋ ์ด๋ฆ์ ์ ํ๊ธฐ๊ฐ ์์ผ๋ฉด ๋๊ท๋ชจ ํ๋ก์ ํธ(5๋ช
์ด์์ ๊ฐ๋ฐ์ ํ์์๋)์ธ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ฌ๋๊ณผ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ถฉ๋ํ ์ ์์ต๋๋ค.
๋ ๋ง์ ๋ค์์คํ์ด์ค๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ๋ฉด mb-somefeature-product-list
๋ก ๋๋ฉ๋๋ค. ์ด๋ ํ
ํ๋ฆฟ์ ๋๋ฝ๊ฒ ๋ณด์ด๊ฒ ํฉ๋๋ค.
directives
๋ฉํ๋ฐ์ดํฐ๋ก ์ธํด ng2์์ ํด๊ฒฐ๋ ๊ฒ์ ๋ณด๊ณ ๋งค์ฐ ๊ธฐ๋ปค์ต๋๋ค.
์ํ๋ ํจํค์ง๋ฅผ npm์ผ๋ก ์ค์นํ๊ณ ๊ตฌ์ฑ ์์๋ณ๋ก ํ์ํ ํจํค์ง๋ง ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
ngModules๋ ์ฒญํฌ๋ฅผ ๋น๋๊ธฐ์์ผ๋ก ๋ก๋ํ๋ ๋ฐ ๋์์ด ๋๊ณ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ ๊ฒ ์์ฑํ๊ณ ์์ฐ์ฑ์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋๋ ์ด์ ์ด ์์ต๋๋ค.
๊ทธ๋ฌ๋ SharedModule
ํจํด์ ์ฌ์ฉํ๋ฉด ng1์์์ ๊ฐ์ด ์ ์ญ ๋ค์์คํ์ด์ค๊ฐ ๋์
๋ฉ๋๋ค.
์ ์ด๋ ๊ณต๊ธ์์ ๊ฒฝ์ฐ ํ์ผ ์์น์ธ ES6 ํ ํฐ์ ์ํด ๋ค์์คํ์ด์ค๊ฐ ์ง์ ๋ฉ๋๋ค.
๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๊ธฐ ๋๋ฌธ์ ๋์ผํ ์ ํ๊ธฐ๋ฅผ ๊ฐ์ง ๊ตฌ์ฑ ์์๊ฐ ๋ ๊ฐ ์๋ค๋ ์๋ฆฌ๊ฐ ๋ค๋ฆฝ๋๋ค.
ํ์ฌ ๋๋ ๋ก์ปฌ ๊ณต์ ๊ตฌ์ฑ ์์์์ ์ถฉ๋ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ํน์ ๋ค์์คํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์์ผ๋ฉด ํฉ๋๋ค.
"์ ํ์ ์ฌ์ ์"์ ๊ฐ์ ๊ฒ.
๊ทธ๊ฒ ๋ด๊ฐ ๋ฌผ์ด๋ณธ๊ฑฐ์ผ
์์ธํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํด ์ฃผ์ @robwormald ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํ์ง๋ง ์ ์ ๊ฐ์ ์ด๋ณด์์ ํ ๊ฐ์ง(๋๋ถ๋ถ ์ ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์์
๋๋ค). ์ ๋ Angular 2์ typescript๋ฅผ ๋ฐฐ์ฐ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ES6 ๋ชจ๋ ๊ฐ๋
์ ๋์๊ฒ ํ๋ฆฟํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ณต์กํ ์์ฉ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ด ๊ตฌ์ฑ ์์ ์๊ฐ ๊ฑฐ์ 60์ธ ๋ถ์ ์ฑ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ RC4์์ ์ ์ง์ฌ์ง ๊ฒ ๊ฐ์์. ๋ผ์ฐํฐn์ด ์ ์ฒด ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์ธ ์ธ์ ์ฐ๋ฆฌ๋ ์ด๋ค ์ข
๋ฅ์ ๋ผ์ฐํ
๋ ์ฌ์ฉํ์ง ์์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ํญ ๊ธฐ๋ฐ ์ฑ์ผ๋ก ๊ณํํ๊ณ ์์ต๋๋ค. ๋ ๊ฐ์ ๋ฉ์ธ ํญ์ด ์์ต๋๋ค(1.Analysis 2.Dashboard).
๋ถ์ ํญ์๋ ๊ฐ๊ฐ ๋จ์ผ ๋ถ์์ด ์๋ ์ฌ๋ฌ ํญ์ด ์์ต๋๋ค. ๋์๋ณด๋๋
์ฌ๋ฌ ํญ์ด์ง๋ง ๊ฐ ํญ์ ์๋์ ์ ์ฅ๋ ์ฌ๋ฌ ๋ถ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๋ถ์ ์น์
. ๋ฐ๋ผ์ ์ฌ๋ฌ ํญ์์ ์๋ค๋ก ์ด๋(๋์๋ณด๋ ๋ฐ ๋ถ์ ๋ชจ๋์์)
๋ํ ๋์๋ณด๋ ํญ๊ณผ ๋ถ์ ํญ ๊ฐ์ ์ ํํ๋ฉด ๋ผ์ฐํ
์ด ์ ๊ณต๋์ง ์์ ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ์ ๋ชฉ์ (๋ด๊ฐ ๋ฉ์ฒญํ ๋ง์ ํ๋ค๋ฉด ์ ์ ํด ์ฃผ์ธ์).
์ด์ RC5 NgModule์ ์ฐ๋ฆฌ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊นจ๋ ์ข
๋ฅ์
๋๋ค. ์ฐ๋ฆฌ๋ ์ ๋ง ๋ฐฉ๋ฒ์ ๋ชจ๋ฆ
๋๋ค
์ฐ๋ฆฌ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ค์ ๋์์ธํ์ญ์์ค. ์ ํ๋ฆฌ์ผ์ด์
์์ AoT ์ปดํ์ผ์ ์ค์ ๋ก ์ฌ์ฉํ ์ ์์ต๋๊น? ์๋
์ ์ฒด AoT๋ ๋ผ์ฐํ
์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๊น?
@shairez NgModules๋ ์ ํํ ์ด๋ฐ ์ข ๋ฅ์ ๋ค์์คํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ๋ถ๋ถ์ ์ข ๋ ๋ช ํํ ํ์๋ฉด...
์ฌ๊ธฐ์ ๊นจ๋ฌ์์ผ ํ ํต์ฌ์ ๊ตฌ์ฑ ์์๊ฐ ์ ์ธ๋ ๋ชจ๋ "๋ด๋ถ"์ ๋ค์๊ฐ ์ปดํ์ผ๋๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ณด๋ ค๋ฉด https://plnkr.co/edit/9w10b1Y8Bjr5DDIxOwnC?p=preview ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋ ๊ฐ์ ์ถฉ๋ํ๋ ์ ํ๊ธฐ( my-generic-selector
)๊ฐ ์์์ ์ฃผ๋ชฉํ์ธ์. ๊ฐ ๊ธฐ๋ฅ ๋ชจ๋์ ๊ทธ ์ค ํ๋๋ฅผ ๊ฐ์ ธ์ค๊ณ "์ ์ญ" ๋ค์์คํ์ด์ค๋ฅผ ์ค์ผ์ํค์ง ์๊ณ ํด๋น ๋ชจ๋ ๋ด๋ถ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ฌ์ฉ
<my-app>
<!-- belongs to FeatureModuleOne -->
<feature-one></feature-one>
<!-- belongs to FeatureModuleTwo -->
<feature-two></feature-two>
</my-app>
ํ์ฅ
<my-app>
<!-- belongs to FeatureModuleOne -->
<feature-one>
<!-- the generic imported in FeatureModuleOne -->
<my-generic-selector></my-generic-selector>
</feature-one>
<!-- belongs to FeatureModuleTwo -->
<feature-two>
<!-- the generic imported in FeatureModuleTwo -->
<my-generic-selector></my-generic-selector>
</feature-two>
</my-app>
์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ฅ 1๊ณผ ๊ธฐ๋ฅ 2๋ฅผ ์ปดํ์ผํ ๋ ์ปดํ์ผ๋ฌ๊ฐ ์ํ ๋ชจ๋์ ์ปจํ ์คํธ์์ ์ปดํ์ผํ๋ฏ๋ก ์ถฉ๋ ์์ด ์ ์ญ ๋ฒ์๋ฅผ ์ค์ผ์ํค์ง ์์ต๋๋ค.
@robwormald ๋ฌผ๋ก , ๊ทธ๊ฒ์ ๊ต์ฅํ๊ณ ๊ทธ๋ฐ ์๋ฏธ์์ Angular 1๋ณด๋ค ๋ซ์ต๋๋ค.
๋ด๊ฐ ์ด ์ฌ์ฉ ์ฌ๋ก ๋ ๋ฌธ์ ์์ ์ ์ํ ์ ์ญ SharedModule์ ์ฌ์ฉํ๋ ํจํด์ ์ฐธ์กฐํ๋ ๊ฒ์ด์์ต๋๋ค.
$#$ SharedModule
$#$ ๋ด๋ถ์ GenericSelectorFeatureOne
์ GenericSelectorFeatureTwo
๋ฅผ ๋ชจ๋ ์ ์ธํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์๊น์?
๋๋ SharedModule
์ ์ ์ฉํ ๊ณตํต ๊ตฌ์ฑ ์์๊ฐ ๋ง์ด ์๊ณ ๋ชจ๋ ๊ธฐ๋ฅ ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ ์ถ์ต๋๋ค.
๋ด ๊ธฐ๋ฅ ๋ชจ๋์ ์ถฉ๋ ์ ํ๊ธฐ๊ฐ ์๊ฑฐ๋ ์ผ๋ถ ํ์ฌ์ SharedModule
๋ด๋ณด๋ธ ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ ์ถฉ๋ ์ ํ๊ธฐ๊ฐ ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๊น?
@shairez ๋๋ ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์ด "SharedModules"์ ์๋ก ๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ต๋๋ค. ๋ชจ๋์ด ์ ๋ ดํ๋ฏ๋ก ๋ง์ ๋น์ฉ์ด ๋ค์ง ์์ต๋๋ค.
๋ฌธ์๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ผ๋ฉด PR์ ๊ธฐ๊บผ์ด ํ์ํฉ๋๋ค.
์ ๊ฐ ์ฐพ๋ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค ํ ์คํธ ํด๋ณด๊ฒ ์ต๋๋ค.
๋ชจ๋์ ์์ฑํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ ๋์ ์์ด๋์ด๊ฐ ์์ง ์์ต๋๋ค. ๊ทธ๋์ ์ฌ๊ธฐ์ ์ง๋ฌธํ์ต๋๋ค. ํ์ง๋ง ์ผ๋จ ๋ค์ค ๊ณต์ ๋ชจ๋ ์๋ฃจ์ ์ ํ ์คํธํ๋ฉด @ ์ ๋ ผ์ํ ๋ ๋ง์ ์๋ฃ๊ฐ ์์ ๊ฒ์ ๋๋ค.
๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค @robwormald !
https://angular.io ์์ ์ฌ์ฉํ ์ ์๋ ์ต์ ๋ฌธ์์๋ NgModule
๊ฐ ์๋ชป ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ์ฝ๊ฒ ๋ํ๋ ์ ์๋ ์ํฐ ํจํด ๋ฐ ๋ฒ๊ทธ์ ๋ํ _๋ง์_ ๊ฒฝ๊ณ ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด
๊ณต์ ๋ชจ๋์์ ์ฑ ์ ์ฒด ์ฑ๊ธํค ๊ณต๊ธ์๋ฅผ ์ง์ ํ์ง ๋ง์ธ์. ๊ณต์ ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ์ง์ฐ ๋ก๋ ๋ชจ๋์ ์๋น์ค์ ์์ฒด ๋ณต์ฌ๋ณธ์ ๋ง๋ญ๋๋ค.
๊ทธ๊ฒ์ ์คํ๋ ค ๋ฌธ์ ์ ๋๋ค. _๋จผ์ ์๋ํ๊ฒ ํ ๋ค์ ๋น ๋ฅด๊ฒ_์ ์๋๋๊ณ ์ง์ ํ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ฅธ๋ค๋ฉด ๊ฒฝํ์ ๋ฉํธ๋ฆญ๊ณผ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ฅ๋จ์ ๋ฐ๋ผ ์ด๋ฌํ ๋ชจ๋์ ์ฐฝ๋ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ค ๋ชจ๋์ด ๋น ๋ฅด๊ฒ ๋ก๋๋๊ฑฐ๋ ๋๋ฆฌ๊ฒ ๋ก๋๋๋์ง ์กฐ์ ํด์ผ ํ ๊ฒ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋์ด ๋๋ฆฌ๊ฒ ๋ก๋๋๋์ง ๋๋ ๋น ๋ฅด๊ฒ ๋ก๋๋๋์ง ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ์จ์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋ฌธ์์ ๋ค์ ์น์ ์ ๋ณ์นํ๋ฉด ๋ ์ฌ๊ฐํด ๋ณด์ด๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ชจ๋์ ๋ชจ๋ Http ์์ฒญ์ ๋ํ ํน์ ํค๋๋ฅผ ์ถ๊ฐํ๋ ์ฌ์ฉ์ ์ง์ HttpBackend๊ฐ ํ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ชจ๋๋ HttpBackend๋ฅผ ์ฌ์ฉ์ ์ง์ ํ๊ฑฐ๋ ๋จ์ํ HttpModule์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ์ด ๋ชจ๋์ HttpBackend ๊ณต๊ธ์๋ฅผ ์ฌ์ ์ํ์ฌ ํน์ ํค๋๋ฅผ ์์ ์ ์์ต๋๋ค. ์๋ฒ๋ ์ด ๋ชจ๋์ http ์์ฒญ์ ๊ฑฐ๋ถํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํธ ๋ชจ๋์ธ AppModule์์๋ง HttpModule์ ๊ฐ์ ธ์์ ์ด ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ์ญ์์ค.ํด๋์ค์ ๋ชจ๋์ ๋ค์ ๋ด๋ณด๋ผ ์ ์์ต๋๊น?
์ ์ ์ผ๋ก!
๋ชจ๋์ ๋ค๋ฅธ ๋ชจ๋์ ํด๋์ค๋ฅผ ์ ํ์ ์ผ๋ก ์ง๊ณํ๊ณ ํตํฉ๋ ํธ๋ฆฌํ ๋ชจ๋๋ก ๋ค์ ๋ด๋ณด๋ผ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ชจ๋์ ๋ด๋ณด๋ธ ๋ชจ๋ ํด๋์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ค์ ๋ด๋ณด๋ด๋ ์ ์ฒด ๋ชจ๋์ ๋ค์ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค. Angular์ ์์ฒด BrowserModule์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ๋ชจ๋์ ๋ด๋ณด๋ ๋๋ค.
๋ด๋ณด๋ด๊ธฐ: [CommonModule, ApplicationModule]
๋ชจ๋์ ์์ฒด ์ ์ธ, ์ ํํ ๊ฐ์ ธ์จ ํด๋์ค ๋ฐ ๊ฐ์ ธ์จ ๋ชจ๋์ ์กฐํฉ์ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ฌธ์์์๋ ์ฌ์ฉ์๊ฐ ํน์ ๋ชจ๋์ ๋ค์ ๋ด๋ณด๋ด๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ผ๋ฉฐ ๋์์ ๊ทธ๋ ๊ฒ ํ๋ฉด ๋งค์ฐ ํธ๋ฆฌํ๋ค๊ณ ๋งํฉ๋๋ค.
NgModule
re-exports์ ๊ฐ๋
์ ํต์ ๊ฐ ๋ํ๋ค๋ ์ ์ ์ ์ธํ๊ณ ES Module re-exports์ ๊ฐ๋
๊ณผ ์ ์ฌํฉ๋๋ค. JavaScript๋ ์ ์ ์ผ๋ก ๋ฒ์๊ฐ ์ง์ ๋๋ฉฐ(์, this
๋ ๊ทธ๋ ์ง ์์์ ์๋๋ค) ์ด๊ฒ์ด ์ต๋ ์ฅ์ ์ค ํ๋์ด๋ฉฐ ๋งค์ฐ ์ ์ฐํ ๊ตฌ์ฑ๊ณผ ์ ๋ณด ์๋์ ํ์ฉํฉ๋๋ค. JavaScript๋ ์๋์๋ ์ง์ํ๋ฏ๋ก ํญ์ ๋ฒ์๋ฅผ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
ํ์ง๋ง ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ์ง์นจ์ ์์ ๊ฐ ๋ชจ๋ @angular/* ํ๋ ์์ํฌ ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. ์ด๋ค์ ๊ฐ๋ฑ์ ์ง๊ด์ ์ผ๋ก ๋ฐฉ์งํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ๋๋ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ฒน์น์ง ์๋ ์ธํ๋ผ ์์ค์ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ์ฉ์ ์ ์ ๋ชจ๋์ ๋ง์ ๊ณ์ธต์ ๊ฐ๋ก์ง๋ฌ ์ ๋จํ ์ ์์ผ๋ฉฐ ๋ค์ํ ๋์์ ํฅ์์ํค๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ก๊น ๋ชจ๋์ ๋ผ์ฐํฐ ๋ฐ Http ์๋น์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์ํ ์ ์์ผ๋ฉฐ ๋์์ ๊ด๋ฆฌ ์ฌ์ฉ์์๊ฒ ์ ๋ณด๋ฅผ ํ์ํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณตํ๊ณ ์์ ๋ชจ๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ ์ ์์ต๋๋ค.
๋ค์ ๋ด๋ณด๋ด๊ธฐ๊ฐ ์ ์ด์ธ์ง์ ๋ํด ์๋ฌด ๋ง๋ ํ์ง ์๋ ๋ฌธ์... ๋ชจ๋ A๋ CommonModule์ ๋ค์ ๋ด๋ณด๋ ๋๋ค. ๋ชจ๋ B๋ ๋ชจ๋ A๋ฅผ ๋ค์ ๋ด๋ณด๋ ๋๋ค. ๋ชจ๋ C๋ ๋ชจ๋ B๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ด๋ ๋ชจ๋ C๊ฐ ์ด์ CommonModule์ ์ง์๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ์ ๋๊น?
@Martin-Wegner ์ฌ๊ธฐ์ ์ค๋ช ๋ ๋๋ก ์ ์ด์ ์ ๋๋ค. https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#! #q-์ฌ์์ถ
@aluanhaddad ์ด๋? ํ๋ ์ด์์ ํ์ด ์๋ ์ ์ด์ ์ฌ์์ถ์ ๋ํ ๋จ์ด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค...
@aluanhaddad ๊ฐ Angular ๋ฌธ์์์ ๊ฐ์ ธ์จ ๋ด์ฉ์ ์ฝ์ผ๋ฉด Angular 2์ ๋ํด ๋ฐฐ์ด ๋ชจ๋ ๊ฒ์ ์ฌ๊ณ ํด์ผ ํ๊ณ ๋ ๋์ ๋ฐฉ์์ผ๋ก ์ข ์์ฑ์ ์ฒ๋ฆฌํ๋ ํ๋ ์์ํฌ๊ฐ ์์ ์๋ ์์ต๋๋ค.
๋ด๊ฐ ์ดํดํ๋ ๋๋ก. HttpModule์ ๊ฐ์ ธ์ค๋ ์ฑ ๋ชจ๋์ด ์๊ณ Http ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค๊ฐ ํฌํจ๋ ๊ธฐ๋ฅ ๋ชจ๋์ด ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ฅ ๋ชจ๋ ์์ค์์ HttpModule์ ๊ฐ์ ธ์ค์ง ์๊ณ ์ฑ ๋ชจ๋ ์์ค์์ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ๋ง์ ์ฑ ๋ชจ๋ ๊ฐ์ ๊ณต์ ๋๋ ๊ธฐ๋ฅ ๋ชจ๋์ ์์ฑํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ฑ ๋ชจ๋์์ HttpModule์ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ๋ด ๊ธฐ๋ฅ ๋ชจ๋์ด HttpModule์ ์์กดํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ ๋ง ์ถ์
ํ๊ณ NgModule ์ ์์ PeerDependecies์ ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ง์ด ๋ถ์กฑํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ค ์๋
. Angular 2๊ฐ ๋ถ์์ง๋ ๋๋์
๋๋ค. ๋ค์ ์์ํ๊ณ Angular 2๋ฅผ ํฌ๊ธฐํ๊ณ Angular 3์ผ๋ก ์์ํ ๋๊ฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋น์ ์ด ๋ฐฉ๊ธ ๋งํ ๊ฒ์๋ ์ค์ ๋ก ๋ง์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ ์์ํ๋ค
Angular2๋ ์๋
๋ถํฐ ์ฌํ์ ํ๊ณ ์๋๋ฐ ๋๊ทผ๊ฑฐ๋ฆด ์ด์ ๊ฐ ์์์ต๋๋ค.
์ง๊ธ๊น์ง ๋ณธ ๋ชจ๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์๋ ๋ถ๊ตฌํ๊ณ (์ํ์์ ๋ฒ ํ๋ก,
๋ฐ RC). ๊ทธ ๋จ๊ณ์์ ์ดํดํ ์ ์๊ณ ์ข
๊ต์ ์ผ๋ก ๋ถ์ด ์๊ธฐ ๋๋ฌธ์
๋ฏธ๋๋ฉ๋ฆฌ์คํธ Backbonejs์์ ๋๋ฅผ ์ ํ์ํค๋ ๋ฐ ์ฌ์ฉํ ์ฒ ํ.
๋์๊ฒ ์ด ngModules์ ์ ์ฒด ์์ด๋์ด๋ ๋ค์ ๋ฐ๋๋๋ ๊ฒ์ผ๋ก ํ๋ช
๋์์ต๋๋ค.
์์ฐ์ ์ธ. ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ๋ณต์ํ์ ์๋ ๋ชจ๋ ์๊ฐ์ ์ง์ผ๋ณด๋ ๊ฒ์ ์ฌํ ์ผ์
๋๋ค.
๋ฏธ๋๋ฉํ๊ณ ๋ถํ์ง ์๋ "๊ตฌ์ฑ ์์"์ ํ๋ถํ ์ฅ์ ์
์ ๋ ๋ญ๋น.
2016๋
8์ 29์ผ ์ค์ 9์ 44๋ถ์ "Daniel Schuba" [email protected] ์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@aluanhaddad https://github.com/aluanhaddad ์์ ๊ฐ์ ธ์จ ๋ด์ฉ ์ฝ๊ธฐ
๋๋ ๋ด๊ฐ ๊ฐ์ง ๋ชจ๋ ๊ฒ์ ์ฌ๊ณ ํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
Angular 2์ ๋ํด ๋ฐฐ์ ๊ณ ์๋ง๋ ํ๋ ์์ํฌ๊ฐ ์๋๋ผ๋
๋ ๋์ ๋ฐฉ์์ผ๋ก ์ข ์์ฑ์ ์ฒ๋ฆฌํฉ๋๋ค.๋ด๊ฐ ์ดํดํ๋ ๋๋ก. HttpModule์ ๊ฐ์ ธ์ค๋ ์ฑ ๋ชจ๋์ด ์๊ณ ๋ด๊ฐ
Http ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค๊ฐ ํฌํจ๋ ๊ธฐ๋ฅ ๋ชจ๋์ด ์์ผ๋ฉด ์ ๋ฉ๋๋ค.
๊ธฐ๋ฅ ๋ชจ๋ ์์ค์์ HttpModule์ ๊ฐ์ ธ์ค์ง๋ง ์ฑ ๋ชจ๋ ์์ค์์๋ ๊ฐ์ ธ์ต๋๋ค. ๊ทธ๋์ ๋ญ
๋ง์ ์ฑ ๋ชจ๋ ๊ฐ์ ๊ณต์ ๋๋ ๊ธฐ๋ฅ ๋ชจ๋์ ์์ฑํ๋ฉด? ๋๋ ๊ฐ์ง๊ณ ์๋ค
์ฑ ๋ชจ๋์์ ๊ฐ์ ธ์ค๋ HttpModule์์ ์ค์ ๋ก. ๋๋ ๋งํ ์ ์๋ค,
๋ด ๊ธฐ๋ฅ ๋ชจ๋์ HttpModule์ ์์กดํฉ๋๋ค. ์ ๋ง ์ถ์ ํ๊ณ
์ฆ, NgModule ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ง์ด ๋ถ์กฑํฉ๋๋ค.
ํผ์ด ์์กด์ฑ.
์ค ์๋ . Angular 2๊ฐ ๋ถ์์ง๋ ๋๋์ ๋๋ค. ํ ์๊ฐ์ด ๋ ๊น ๋๋ ต๋ค
๋ค์ ์์ํ๊ณ Angular 2๋ฅผ ํฌ๊ธฐํ๊ณ Angular 3์ผ๋ก ์์ํฉ๋๋ค.โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/angular/angular/issues/10552#issuecomment -243066961,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AF675h8_np9i5cHgL8mMOOu8vMMQmWKkks5qkpv8gaJpZM4Jee-o
.
๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ๋๊ตฐ๊ฐ ๋๋ฅผ ๊ณ ์น ์ ์์ต๋๊น?
๋ค์๊ณผ ๊ฐ์ด ์ฑ์ ๊ตฌ์ฑํ ์๊ฐ์ ๋๋ค.
์ฑ
|--๋ฒ๋ฅ /
|----๋ง์ ๊ตฌ์ฑ ์์.
|----LawNG ๋ชจ๋.
|--์ฌ์ฉ์/
|----๋ง์ ๊ตฌ์ฑ ์์
|----์ฌ์ฉ์NG ๋ชจ๋
|--AppNG ๋ชจ๋
|--SomeFirstLeveComponents
Angular Material๋ก ์์ ํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ๋ด๊ฐ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๊ฐ ์์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ๊ฐ ๋๋ฌด ๋ง๋ค๋ ๊ฒ์ด ๋ค์ ์ซ์์ต๋๋ค. ์ด์ NG ๋ชจ๋์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค. ํ์ง๋ง ๊ธฐ๋ฅ๋น ํ๋์ ng ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ๊ณ ๋ คํ๋ ๊ฐ ng ๋ชจ๋์ ๋ํด ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ํํด์ผ ํฉ๋๋ค. ๋ฃจํธ ๋ฟ๋ง์ด ์๋๋๋ค. ๋ง๋์?
์๋๋ฉด ๋ชจ๋ x๋ฅผ ์์ฑํ์ฌ y(Material) ๋ค๋ฅธ ๋ชจ๋์ ๋ค์ ๋ด๋ณด๋ด๊ณ ํ์ํ ๋ชจ๋๋ก ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ์ผ ์ ์์ต๋๊น?
@ReneVallecillo ๋ง์ต๋๋ค. ๊ฐ ๊ธฐ๋ฅ ๋ชจ๋์์ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ๋๋ ๋ค๋ฅธ ๋ชจ๋๊ณผ ํจ๊ป ๊ณต์ ๋ชจ๋(์ข ์์ฑ ์จ๊ธฐ๊ธฐ)์ ์ถ๊ฐํ์ฌ ๋ค์ ๋ด๋ณด๋ด๊ณ ์ด ๊ณต์ ๋ชจ๋์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ค๋ฅธ ๋ชจ๋๋ก ๋ค์ ๋ด๋ณด๋ด๋ฉด ์ฆ์ ์์ง ๋ชปํ๊ณ ๋ณด์ง ์๊ณ ๋ ์ค๋ณต ๊ฐ์ ธ์ค๊ธฐ๊ฐ ์์ ์ ์์ต๋๋ค.
@robwormald ์์ ๊ทํ์ ์๊ฒฌ ์ ๋ํ ๋ต๋ณ:
๊ทธ๋ฌ๋ AoT ๋ชจ๋์์๋ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค. ๋น๋ ์ ์ฐ๋ฆฌ๋ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ๊ฒ์ํ์ฌ ์์ค ์ฝ๋์์ ๋์ผํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ผ๋ก(์ฆ, ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ) ์ถ์ถํฉ๋๋ค.
์ด๊ฒ์ ์๋ณธ ์์ค ์ฝ๋์์ ์ ์ ์ผ๋ก ๋ชจ๋์ ์ถ์ถํ๊ณ ์์ผ๋ฏ๋ก ๋์ ์ผ๋ก ๋ชจ๋์ ํจ๊ณผ์ ์ผ๋ก ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
๋ง์ด๊ทธ๋ ์ด์ ์ ๋ ์ฝ๊ฒ ํ๊ธฐ ์ํด ๋์ ์ผ๋ก ๋ชจ๋์ ์์ฑํ๋ ํจ์๋ฅผ ๋ง๋ค๊น ์๊ฐํ์ต๋๋ค. ์ด ๊ฐ์:
function createModule (entryComponent: Type, dependencies: Type[]) {
@NgModule({
imports: [CommonModule, FormsModule],
declarations: [entryComponent, ...dependencies],
exports: [entyComponent]
})
class FeatureComponent {}
return FeatureComponent;
}
๋ฐ๋ผ์ ์ด๊ฒ์ (์๋ง๋?) JIT ์ปดํ์ผ์์ ์๋ํ์ง๋ง AoT๊ฐ ์์ค ์ฝ๋๋ฅผ ์ ์ ์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ AoT์์๋ ์๋ํ์ง ์์ต๋๊น?
ES@next.... @aluanhaddad ์ ์๋์ ์ด๋ฌํ ๋ถํ์ํ ๋ณต์ก์ฑ์ ๋ช ๊ฐ์ง ๋งค์ฐ ์ข์ ์ ์ ์ง์ ํฉ๋๋ค.
์ํฉ์ด ์ด๋ ๋ค ๋ณด๋ ์ด๊ฒ์ด ์๋ํ ๋ฐฉํฅ์ด๋ผ๋ฉด ๋ด ์์ /ํ์ด Angular 2๋ก ๋์๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด "๋ซํ"๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
@DaSchTour ์ฒ๋ผ ํ๊ณ ๋ค๋ฅธ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ๋ฅผ ์กฐ์ฌํด์ผ ํ ์๋ ์์ต๋๋ค. ์ํ๊น๊ฒ๋ ๋ช ๋ฌ ์ ๋ง ํด๋ NG2๋ ํจ๊ป ์์ ํ๋ ๊ฒ์ด ์๋นํ ์ฆ๊ฑฐ์ ๊ณ ๋ด๊ฐ ๋ถ๋ช ํ ์ ํํ ์ ํ์ด์๊ธฐ ๋๋ฌธ์ ๋๋ค.
@iyobo ์ ํ์ ์ด๊ธฐ ๊ณ ํต ์ธ์ NgModules์ ๋ํ ํผ๋๋ฐฑ์ _๋๋ถ๋ถ(๊ทธ๋ฆฌ๊ณ ์ ๋ _๋ง์_์ ๊ฐ๋ฐ์์ ์ด์ผ๊ธฐ)์ ๊ธ์ ์ ์ด์์ต๋๋ค.
hello world ์ฑ์์ ๋ฐ๋ก๋ฐ๋ก ๋ณด๋ฉด "๋ณต์กํ๋ค"๊ณ ์ฃผ์ฅํ ์ ์์ง๋ง(์ ์ค๋ช ์ ๋ฐ๋ฅด๋ฉด "ํ์ ์๋"์ ์ค์ ๋ก ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค.) ๊ธฐ๋ฅ ๊ตฌ์ฑ, ๊ฒ์ผ๋ฅธ ๋ผ์ฐํ ๋ฐ AoT๋ ๋ชจ๋ NgModules๋ก ํจ์ฌ ๋ ๊ฐ๋จํด์ก์ต๋๋ค. ์ค๋์ ์ ํ์ด ์ฃผ์ด์ง๋ค๋ฉด ๋๋ ์ฌ์ ํ NgModules๋ฅผ ํ๋ ์์ํฌ์ ์ถ๊ฐํ๊ธฐ๋ก ์ ํํ ๊ฒ์ ๋๋ค.
์ ๋ @robwormald ์ ํจ๊ป ์์ต๋๋ค. RC4/5์์ NgModules๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ ๋์ ์ด๊ธฐ ๊ณ ํต์ ๋ชจ๋ ๋จ์ผ ๊ตฌ์ฑ ์์/ํ์ดํ๋ฅผ ์๋ก ์์ฑ๋ ํ์ด์ง๋ก ๊ฐ์ ธ์ฌ ํ์๊ฐ ์๋ค๋ ์ด์ ์ ํ์ธํ ํ ๊ด๋ฆฌํ ์ ์์์ต๋๋ค.
NgModules๋ ์ข ๋ ๋ณต์กํด์ง๊ณ ๊ณต์ ๊ตฌ์ฑ ์์๊ฐ ๋ง์์ง๋ฉด ๋น์ ๋ฐํ๊ธฐ ์์ํฉ๋๋ค.
SharedModule์ ๊ฐ์ ธ์์ ์๋ฃํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค.
@robwormald ๋ , Ng2์ ํ์ฌ ๋ฐฉํฅ์ ๋์ํ์ง ์๋๋ค๋ ๊ฐ๋ ์ "hello world" ์์ค ์ฑ์์๋ง ์๋ํ๋ค๋ ์ฌ์ค์ ์ ๊ฐํ ์ฃผ์ฅ์ด ์๋๋๋ค.
๋น์ ์ด ๋งํ๋ ์ด "๊ธฐ๋ฅ์ ๊ตฌํํ"๋ ์๋ก์ด ๊ฒ์ด ์๋๋๋ค. ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๊ฐ๋ณ ์ ํ/์๋ฃจ์
์ ๋ง๊ฒ ํ์์ ๋ฐ๋ผ ํญ์ ์ค๊ณ๋์ด ์จ ๊ฒ์
๋๋ค.
์ฆ, ์์ฒด์ ์ผ๋ก ํ์ํ ๊ฒ์ ์ ์ธํ๋ ๊ตฌ์ฑ ์์๋ณด๋ค ๋ ํฐ ๊ตฌํํ๋ ์ฌ์ ํ ์์ต๋๋ค.
์ด์ ์ง์ฐ ๋ก๋ฉ, ๋ค๋ก ๋น๊ฒจ์ ์กฐ๊ฐ๋์์ ์ฌ๋ฌผ์ ๋ณด๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ์ง์ฐ ๋ก๋ฉ์ ์ฃผ์ ์ด์ ์ ์ฑ์ ๋ก๋ฉ ์๋๋ฅผ ํฅ์์ํค๋ ๊ฒ์ ๋๋ค. ๋๋ ์ฐ๋ฆฌ ๋๋ถ๋ถ์ด ์ด ์์ ์ ์ํํ๋ ํ์ดํ๋ผ์ธ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์นํฉ์ผ๋ก ์ถ์, ์์ถ ๋ฐ ์ฌ๋ฌ ์ฑ ์ง์ ์ ์ ์ ๋ ฅํฉ๋๋ค.
NgModules๋ ์ค์ ๋ฌธ์ ์ ๋ํ ์๋ฃจ์ ์ด ์๋๋ผ ๋ฌธ์ ๋ฅผ ์ฐพ๋ ์๋ฃจ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ๋ค์ ๋งํ์ง๋ง, ๋ด๊ฐ ๋ชจ๋ ๊ฒ์ ์๋ค๊ณ ์ฃผ์ฅํ ์๋ ์์ต๋๋ค...
NgModules๋ฅผ ๋์ ํ๋ ๊ฒ์ด ์ข์ ์๊ฐ์ธ์ง ๊ทธ ์๊ฐ์ด ๋ณด์ฌ์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. Angular 2๋ ํ์ฌ ํน์ ๋์์ธ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ ๊ฐ์ต๋๋ค. ๊ธฐ์ ์์ค์ด ๋ค๋ฅธ ํ, ๋์ด๊ฐ ๋ค๊ณ ์ฌ๋ฌ ์ธ๋์ ๊ฐ๋ฐ์๋ฅผ ํตํด ์ ๋ฌ๋๋ ์ฝ๋์ ๊ฐ์ ๊ฒ์ ๋ํด ์๊ฐํ ์ฌ๋์ ์๋ฌด๋ ์์ต๋๋ค. ์ด์์ ์ธ ์ธ๊ณ์์๋ ํ๋ฅญํ ์์ด๋์ด์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก NgModules๋ ์๋ก์ด ํ๋ก์ ํธ์ ๋ํ ๊ต์ก ๋ฐ ๋์ ๋จ๊ณ์์ ๋ง์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ๋ง์ ํจ์ ๊ณผ ๋๋ ํ๋ฅผ ๋์ ํฉ๋๋ค. ๊ตฌ์ฑ ์์ ์์ค์์ ์ ์ธํ ๋์ ๊ฐ์ด ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด์ง ์์ต๋๋ค. ์ข ์์ฑ์ ๋ชจ๋์ ์จ๊ฒจ์ ธ ์์ผ๋ฉฐ ๊ตฌ์ฑ ์์๊ฐ ์๋ ๋ชจ๋์ ๋ํ ์กฐ์ฌ๋ฅผ ์์ํด์ผ ํ๋ ๊ฒ์ ์๊ฐ ๋ฌธ์ ์ผ ๋ฟ์ ๋๋ค.
์ต๊ทผ์ ๋ ํฐ ์์ฉ ํ๋ก๊ทธ๋จ์ NgModules๋ก ์ ํํ ํ, ๋๋ ๊ทธ๊ฒ๋ค์ด ๋๋ถ๋ถ ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค(์ด์ ์์ ์ ๋ง์ณค์ผ๋ฏ๋ก ํ์คํ ์ดํด๊ฐ ๋ฉ๋๋ค). ์ค์ ๋ก ์ฃผ์ ๋ฌธ์ ๋ ๋ค๋ฅธ ๊ตฌ์ฑ ์์ ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ธ๋ฐ, ์ด๋ ์ด์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ ๋ฐฉ์๊ณผ ์ ๋ง์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฒ์ ๋๋ค(์ ์ด๋ ์ ์๊ฒ๋ ๊ทธ๋ฌ์ต๋๋ค).
๊ทธ๋ฌ๋ ๊ทธ๊ฒ๋ค์ด ์ ์ผํ ํด๊ฒฐ์ฑ ์ผ๋ก ์กด์ฌํด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ตฌ์ฑ ์์๊ฐ ๋งค์ฐ ์ผ๋ฐ์ ์ผ๋ก ๊ตฌ์ถ๋๋ ๋ฐฉ์์ ์ดํด๋ณด๋ฉด ๋งค์ฐ ์์ฃผ ๋ ์์ ๊ณ ๋๋ก ์ ๋ฌธํ๋ ํ์ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋ฉ๋๋ค. ํด๋น ์ปจํ ์ด๋ ๊ตฌ์ฑ ์์ ์ธ๋ถ์ ๋ชฉ์ ์ด ์๋ ์ด๋ฌํ ํ์ ๊ตฌ์ฑ ์์์ ๊ฒฝ์ฐ ์์ ๋ฒ์ ๋ชจ๋์์ ํ์ ๊ตฌ์ฑ ์์๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ ์ ๋ง ์ง๋ฃจํ๊ณ ๋น ๋ฅด๊ฒ ๋ฒ์ ์ง์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
NgModules์ ๊ตฌ์ฑ ์์๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ ์ง์๋ฌธ์ ํด๋น ๊ตฌ์ฑ ์์ ๋ด์์๋ง ์ ์ฉ๋๋ ๋ก์ปฌ ๋ฒ์ ์ข
์์ฑ์ผ๋ก ์ ์ํ ์ ์๋๋ก ํ๋ ๋ฉ์ปค๋์ฆ์ด ์๋ค๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค( directives
๋ชฉ๋ก์ด ๋ชจ๋ ์ด์ ์ ์๋ํ๋ ๋ฐฉ์๊ณผ ๊ฐ์).
Full NgModules๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ ์ฌ๋๋ค์ ์ํ ๋์ ์ด ์๋ค๋ @poke ์ ์ ์์ด ๋ง์์ ๋ญ๋๋ค.
NgModules๋ ์ปดํ์ผ ๋ฐ ์ง์ฐ ๋ก๋ฉ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด RC5์ ์ถ๊ฐ๋์์ต๋๋ค. ์๋ ๋ง์คํฐ ํ๋์ ์ผ๋ถ๊ฐ ์๋๋ฏ๋ก ์ผ๋ถ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ์ง ์์ต๋๋ค(ํนํ ์๋ "๊ตฌ์ฑ ์์๋ ์" ๋์์ธ).
๋ฌผ๋ก ๊ทธ๋ค์ ๋ช ๊ฐ์ง๋ฅผ ์์ ํ๊ฑฐ๋ ํ์ฑํํ์ง๋ง ๊ณ ์ ํ ๋ณต์ก์ฑ๋ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. ๋ชจ๋ ๋ชจ๋ฒ ์ฌ๋ก์ ์ ๊ทผ ๋ฐฉ์์ด ์์ง ํด๊ฒฐ๋์ง ์์ ๊ฒฝ์ฐ ํนํ ์ด๋ ค์ด ์ผ์ธ ์ฌ๋๋ค์ด ๋ฐฐ์ฐ๊ณ ์ค๊ณํด์ผ ํ ๋ ๋ง์ ๊ฒ๋ค์ด ์์ต๋๋ค. ์กฐ๊ธฐ ์ฑํ์ ๋ง์ ๊ณ ํต์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ ๋ RC4๋ฅผ ํ๋ ๊ณผ์ ์์ ๊ทธ ์ฌ์ค์ ๋ฐฐ์ ์ต๋๋ค.
๋๋ ์๋์ ๊ตฌ์ฑ ์์ ์ค์ฌ ๊ณํ์ด ๋ ๋ง์์ ๋ค์๊ณ ์ด๊ฒ์ด ์๋ง๋ ๋ด๊ฐ ์ง๊ธ ํด๋ฆฌ๋จธ/์น ๊ตฌ์ฑ ์์์ ๋ ์ ํฉํ๋ค๊ณ ์ฐพ๋ ์ด์ ์ผ ๊ฒ์ ๋๋ค. ๋ชจ๋์ Angular 1๋ก ๋ฐ ๋จ๊ณ ํํดํ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
์ฒ์์๋ ํ์ดํ์ ์ง์๋ฌธ์ ์ ๊ฑฐํ๋ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ ํญํ์ง๋ง ์ง๊ธ์ ์ต์ํด์ง๊ณ ์ฒ์ ์๊ฐํ๋ ๊ฒ๋งํผ ๋์์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ์ฌ๋ฌ ์์ค์์ ์ฌ๋ฌ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ํ์๋ก ํ๋ ์ ๋ง ๋ณต์กํ ์ฑ์์ NgModules๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ค ์ ์์ต๋๊น? ๋ด๊ฐ ๋ณธ ๋ชจ๋ ํํ ๋ฆฌ์ผ, ์์ ๋ฐ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ๋ชจ๋์ด ์์ฒด ํญ๋ชฉ์ ์บก์ํํ๊ณ ์ผ๋ถ๋ฅผ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๊ฒ์(๋ด๋ณด๋ด๊ธฐ)ํ๋ ์ฌ์ด ๋ฐฉ๋ฒ๋ง ๋ณด์ฌ์ค๋๋ค.
์ค์ ํ๋ก์ ํธ์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณ์ธต์ ์ฒด์ธ์ด ์๋ ๊ต์ฐจ ํ์ ์ข ์์ฑ์ด ๋ง์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ํด ์ ํํ ์ง์ ๋ ์์ ์ํด ๋ฌด์ธ๊ฐ์ ๊ฐ๋ ์ ์ฆ๋ช ํ๋ ๊ฒ์ ์ด๋ป๊ฒ ๋ ์๋ชป๋ ๊ฒ์ ๋๋ค.
@Angular2 ์ ๋ชจ๋ ์์ฑ์๋ฅผ ์ํด: NgModules์ ๋ถ์ ์ ์ธ ๋ถ๋ถ์ด ๋ฌด์์ธ์ง ์์งํ ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น? ๋๋ ๋น์ ์ด ๋ชจ๋ ์ข์ ๊ฒ๋ค์ ๊ดํ ์ฑ ์ ์ธ ์ ์๋ค๋ ๊ฒ์ ์๋๋ค. ๊ด์ฐฎ์. ๊ทธ๋ฌ๋ ๋๋ ํญ์ ๋น์ ์ด ๊ทธ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ์ง ์์ผ๋ฉด ๋ช ํํ์ง ์์ ์จ๊ฒจ์ง ๋์ ๊ฒ๋ค์ ๋ค๋ฃจ์ด์ผํฉ๋๋ค.
์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ์ฌ๋ฌ ์์ค์์ ์ฌ๋ฌ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ํ์๋ก ํ๋ ์ ๋ง ๋ณต์กํ ์ฑ์์ NgModules๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ค ์ ์์ต๋๊น?
์ด๋ฅผ ์ํํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ํด๋น ๊ตฌ์ฑ ์์์ ๋ํ ์ข
์์ฑ ๋ชจ๋์ ๋ง๋๋ ๊ฒ์
๋๋ค. ์ฌ๋ฌ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ๋ A
, B
๋ฐ C
๊ตฌ์ฑ ์์ ์งํฉ์ด ์ธ ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ๊ฐ์ ์ธํธ์๋ ๋ค์ ๊ด๋ จ์ด ์๋ ์ธํธ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ์ธ ์ธํธ๋ ์ธ ๊ฐ์ ๊ฐ๋ณ ๋ชจ๋์ ๋ํด ์ ์๋ํฉ๋๋ค.
์ด์ ๊ฐ ์ธํธ์ ๊ตฌ์ฑ์์์๋ D
์ธํธ์ ์ฌ๋ฌ ๊ตฌ์ฑ์์๊ฐ ํ์ํฉ๋๋ค. D
์ ๊ตฌ์ฑ ์์๋ ์ด ์ธ ์ธํธ์ ๊ตฌ์ฑ ์์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ชจ๋์์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ํด๋น ๋ชจ๋์ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค(๊ตฌ์ฑ ์์๋ ๋จ์ผ ๋ชจ๋์ ์ผ๋ถ์ผ ์ ์๊ธฐ ๋๋ฌธ์). ์ด ์์ ์์ A
, B
, C
๋ฐ D
๋ฅผ ๊ฑฐ๋ํ ๋ชจ๋๋ก ๋ณํฉํ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ์ข
์์ฑ์ด ์กด์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ฌผ๋ก ๋งค์ฐ ์ง์ ๋ถํฉ๋๋ค. ๋์ ํด๋น ์ข
์์ฑ์ ํฌํจํ๋ D
์ ๋ํ ์ ๋ชจ๋์ ์์ฑํ๋ฉด ๋ฉ๋๋ค. ์ด ๋ชจ๋์ ํด๋น ๋ชจ๋์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ ์ธ์๋ ์๋ฌด ๊ฒ๋ ํ์ง ์์ต๋๋ค. ์ด์ ์ธ ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๊ฐ์์ ํด๋น ๋ชจ๋์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌ์ฑ ์์๋ ์ฌ์ ํ "๋น๊ณต๊ฐ"์ด๋ฏ๋ก ๋ชจ๋์ ๋ค์ ๋ด๋ณด๋ด๊ฑฐ๋ ๋ค๋ฅธ ๋ชจ๋์์ D
๋ชจ๋์ ๊ฐ์ ธ์ค์ง ์์ต๋๋ค.
๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ๋ ๋ชจ๋ ์์ฒด์๋ง ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ชจ๋์ ์ค์ผ์ํค์ง ์๊ณ ์ผ์ข ์ ๋ฒ์ ์ง์ ์ ํ์ฉํฉ๋๋ค. ๋ฌผ๋ก ๋ ๋ง์ ๋ชจ๋์ ์์ฑํด์ผ ํ์ง๋ง ์ด๊ฒ์ด ๋ฐ๋ก ์๋ ๋ฐฉ์์ ๋๋ค.
ํ์ฌ ์ค์ ์ ๊ณต์ ํ ์ ์์ต๋๋ค. ์ฑ์์ CommonModule, AppModule ๋ฐ TestModule์ 3๊ฐ์ง ๋ชจ๋์ ์ฌ์ฉํ์ต๋๋ค.
TestBed.configureTestingModule์ ๋จ์ํํ๊ธฐ ์ํด ์ด ์ค์ ์ ๋์
ํ์ต๋๋ค.
TestModule์ ๊ฐ์ ธ์จ ๋ค์ ๋ค์๊ณผ ๊ฐ์ ๋จ์ผ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
TestBed.configureTestingModule({
imports: [ TestModule ],
declarations: [ MyFormComponent ]
});
RC-4์์ ๋ฆด๋ฆฌ์ค๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์ ๋ช ๋ฐฑํด์ง ๋ ๋ค๋ฅธ ๋จ์ ์ NgModules๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๋จ์ํ ๋ถํ ํด์ผ ํ๋ ๊ฐ๋จํ ๋ฆฌํฉํ ๋ง์ ๋ํด ๋ฌด๊ฑฐ์ด ํจ๋ํฐ๋ฅผ ๋ถ๊ณผํ๋ค๋ ๊ฒ์ ๋๋ค. NgModule์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ ๊ตฌ์ฑ ์์ ํธ๋ฆฌ์ ์ฌ๋ฌ ์์ค์ ์๋ ํฌํจ ๋ชจ๋์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๊ตฌ์ฑ ์์๋ฅผ NgModule๋ก ๋ํํ ๋ค์ ์์ NgModule์์ ์ ๊ฑฐํ์ฌ ๊ตฌ์ฑ ์์๋ฅผ ์น๊ฒฉํด์ผ ํฉ๋๋ค. ๊ตฌ์ฑ ์์๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ ํ์์ ์ ๋๋ค.
์ด๊ฒ์ @poke ์ ์์ ๊ณผ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์์ต๋๋ค.
NgModules ์ธ์๋ ๊ตฌ์ฑ ์์๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ ์์ ๋๋ ์ง์๋ฌธ์ ํด๋น ๊ตฌ์ฑ ์์ ๋ด์์๋ง ์ ์ฉ๋๋ ๋ก์ปฌ ๋ฒ์ ์ข ์์ฑ์ผ๋ก ์ ์ํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ด ์๋ค๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋๋ ๊ฐํ๊ฒ ๋์ํ์ง ์๋๋ค. Angular 2์์ ์ ์ํ ๋ชจ๋์ ์ํคํ ์ฒ๋ ํ์ํ ๊ฒฝ์ฐ ํ์ฅ, ์กฐ์ ๋ฐ ๋ฆฌํฉํ ๋งํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ๋ฌผ๋ก RC4์์ RC5๊น์ง ์ฝ๊ฐ์ ์กฐ์ ์ด ์์์ง๋ง ๋์๊ฒ NgModules๋ ํจ์ฌ ๋ ์ ์ฐํ ์์ฉ ํ๋ก๊ทธ๋จ์ ํ์ฉํ๋ ๊ฒ์ผ๋ก ์ ์ฆ๋์์ต๋๋ค.
Angular๋ ๋ ๋จ์ ์ด๋ฉฐ ํ์คํ ๋ชจ๋ ์ฌ๋์๊ฒ ๋ง๋ ํฌ๊ธฐ๋ ์๋ ์ ์์ง๋ง NgModules๋ ์ค๋งํธํ๊ณ ํ๋์ ์ด๋ฉฐ ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๋ ๋ฐ ์คํจํ ์ง์ ์ด ์๋๋๋ค.
@emilio-martinez: ์ ์๊ฐ์๋ Angular 2๊ฐ JiT๋ฅผ ํฌํจํ ๋ ๋ถํธ์คํธ๋ํ์ด ๊ทธ๋ ๊ฒ ๋๋ฆฌ์ง ์๋ค๋ฉด NgModule์ด ๋์ ๋์ง ์์์ ๊ฒ์ ๋๋ค. ์ด ํ ๋ก ์์ ์ ์ ์๋ฏ์ด 'ํฌ๊ธฐ ์กฐ์ , ์กฐ์ ๋ฐ ๋ฆฌํฉํ ๋ง'๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋ '๊ฐ์ ์ฌํญ'์ ๋ ผ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
๊ฝค ์ค๋ ์๊ฐ์ด ์ง๋ฌ๊ณ ์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์ด NgModule์ ์์ ์ ์์ ํ ํก์ํ ์๊ฐ์ ๊ฐ์ก์ต๋๋ค. ๋๋ ์ด์ ๊ฝค ๋ง์ ์ฌ๋๋ค์ด ์ค๋ช ํ๋ฏ์ด, ์ผ๋จ ์๋ก์ด ๋ชจ๋ ์์คํ ์ผ๋ก ์ด๋ํ๋ ๊ณผ๋๊ธฐ๋ฅผ ์ง๋๊ณ ๋๋ฉด ๊ฝค ํ๋ฅญํ ์ผ๋ค์ ๊ฐ๋ฅํ๊ฒ ํ๋ค๋ ๊ฒ์ด ๋ถ๋ช ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. NgModule์ ํก์ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ์ด ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์๊ฒ๋ ํนํ @robwormald ๋ฐ @wardbell ์์ ๋ชจ๋ ๊ฒ์ ์คํฌ๋กคํ๊ณ ๋ชจ๋ ๊ฒ์ ์ฝ์ ๊ฒ์ ์ ์ํฉ๋๋ค.
๋ง์ Angular 2+ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ชจ๋, ์ง์ฐ ๋ก๋ฉ ๋ฐ AOT๋ฅผ ๊ด๋ฒ์ํ๊ณ ์ํํ๊ฒ ์ฌ์ฉํ๊ฒ ๋๋ ์ง๊ธ์ผ๋ก๋ถํฐ 1๋ ํ์ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋ฐ๊ฒฌํ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. ๋๋ ๋๋ถ๋ถ์ ๋๋ ๊ฑฐ์ ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ด๋ฌํ ๊ฒ๋ค์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ๋๊ท๋ชจ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๊ฑฐ์ ์ฆ๊ฐ์ ์ธ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๊ฐ๊ณ ๊ธฐ๋ฅ์ ์ง์ฐ ๋ก๋(๋๋ ๋๊ด์ ์ผ๋ก ์ง์ฐ ์ฌ์ ๋ก๋)ํ๋ "ํ๋ก๊ทธ๋ ์๋ธ ์์ฉ ํ๋ก๊ทธ๋จ" ๋น์ ์ ๊ตฌํํ๋ ๊ฒ์ด ์์ ํ ์ผ์์ ์ผ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. ํ์. ๊ฒฐ๊ณผ๋ ์ค์ ๋ก ๋งค์ฐ ๋๋ผ์ธ ์ ๋๋ก ๋งค๋๋ฝ๊ณ ๊ฐ๋ณ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ๋ฌ์ฑ๋ฉ๋๋ค. NgModule์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ทธ ๋น์ฉ์ด๋ฉฐ ์ง์ฆ๋๋ ์ ํ์ด์ง๋ง ์ฌ์ฉํ ์งํ ์ค์ธ ์์ ์ ์์ ๋งค์ฐ ์ ์ต๋๋ค.
@kylecordes ๋๋ ๋น์ ์ด ์ณ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ๊ทธ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@iurii-kyrylenko ์ ๋ง ๊ทธ๋ ์ต๋๋ค.
TypeScript๊ฐ JavaScript๋ฅผ ์ปดํ์ผํด์ผ ํ๋ฏ๋ก JavaScript๋ฅผ ๊ฐ๋ ์ปดํ์ผํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ง๋ง ๊ทธ๊ฑด ๋ณ๊ฐ์ ๋ฌธ์ ์ ๋๋ค.
@kylecordes ์ ํ๋ณด๋ค ๊ณ ๋ คํด์ผ ํ ์ฌํญ์ด ํจ์ฌ ๋ ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋์ ์์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์๋ ๋ง์ ๋ณต์ก์ฑ๊ณผ ๋ง์ ์ถ๊ฐ ๊ฐ๋ฅ์ฑ์ ๋์ ํฉ๋๋ค. ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ์ข ์์ฑ์ ๋๋ ํ์ ๋๋ค. ์ด๋ Angular 2๋ก ๊ฐ๋ฐํ ํฅํ ๋ช ๋ ๋์ ๋ง์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ๊ฒ์ ๋๋ค.
@aluanhaddad ๋๋ Angular๊ฐ tsc ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผํ๋ค๊ณ ๋ฏฟ์ต๋๋ค. ์๋ฅผ ๋ค์ด ์์ ์คํ์ ์ํฌํ๋ก์ ๊ตฌํํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ข์ต๋๋ค.
@iurii-kyrylenko ๋ถํธ์คํธ๋ฉ ์๋๋ RC4๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋๋ถํฐ ์ต์ข ๋ฆด๋ฆฌ์ค๊น์ง ๋ง์ ์์ ์ด ์ ๋ฆฌ์ ์ต์ ํ์์ต๋๋ค. ๋ด ๊ฒฝํ์ Angular ์ปดํ์ผ๋ JIT๋ ์ด์จ๋ RC4๋ณด๋ค ๋น ๋ฅด๊ฒ ์คํ๋ฉ๋๋ค.
@DaSchTour NgModule ๋ก ์์ ํ๋ ๋์ ๋ฐ๊ฒฌํ ๋ฒ๊ทธ์ ๋ํด ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
@emilio-martinez NgModule์ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ์ด๊ธฐ ๊ฐ๋ฐ ๋จ๊ณ์์ ๋๋ฝ๋๊ฑฐ๋ ๋ฐ๊ฒฌ๋ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฝ ๋๋ ์ค๋ณต ์๋น์ค ์ธ์คํด์ค๋ก ์ธํด ๋ฐ์ํ๋ ๋ฒ๊ทธ์ ๋๋ค. ๋ด๊ฐ ์ฌ์ฉํ๋ ๊ณณ์์ ๋ฌผ๊ฑด์ ์์ ํ๋ ๊ฒ์ด์ง ํ์ํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์๋ ๊ณณ๊ณผ ํ์ํ๊ณ ์ฌ์ฉ๋๋ ๊ณณ์ด ์๋ ๊ณณ์์ ์์ ํ๋ ๊ฒ์ ๋๋ค.
TypeScript๊ฐ ์ด๋ฐ ์์ผ๋ก ์๋ํ๋ค๊ณ ์๊ฐํด ๋ณด์ญ์์ค. ๋ด ๋ชจ๋์ ๋ํ ๊ธฐ๋ณธ ํ์ผ์ด ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด _index.ts_๋ผ๊ณ ๋ถ๋ฅด๊ฒ ์ต๋๋ค.
import {foo} from bar;
import {StartComp} from start;
StartComp.boot();
๋ค์๊ณผ ๊ฐ์ start.ts๋ผ๋ ํ์ผ์ด ์์ต๋๋ค.
export class StartComp {
public static boot() {
foo()
}
}
์ด๊ฒ์ด Angular๊ฐ NgModules๋ก ํ๋ ์ผ์ ๋๋ค. ์ด๋ค ๋ง์ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ์ ธ์๊ณ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ์ชฝ ๋์ ๋ํ๋ฉ๋๋ค. foo๋ index.ts์์ ๊ฐ์ ธ์ค๊ณ ์ธ๋ฑ์ค์์ StartComp๋ฅผ ์คํํ์ฌ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๊ตฌ์ฑ ์์์์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์์์ผ ํฉ๋๋ค.
์ข ์์ฑ์ ์จ๊ฒจ์ ธ ์์ผ๋ฉฐ ์ด๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ์ถ๊ฐ ์กฐ์ฌ๊ฐ ํ์ํฉ๋๋ค.
@emilio-martinez
๋ด ๊ฒฝํ์ Angular ์ปดํ์ผ๋ JIT๋ ์ด์จ๋ RC4๋ณด๋ค ๋น ๋ฅด๊ฒ ์คํ๋ฉ๋๋ค.
MEAN ์คํ ๋ฐ Angular 2 final์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ค๊ฐ ๋ณต์ก์ฑ ํ๋ก์ ํธ ๊ฐ ์์ต๋๋ค. ๋ด Android ์ฅ์น์ JIT ๋ชจ๋์์ ๋ถํธ์คํธ๋ฉ์ ์๋ฃํ๋ ๋ฐ ์ฝ 10์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ๋๋ ์ด๊ฒ์ ์๋นํ ์ง์ฐ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ํ์ฌ ์์ค ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ AOT ์ปดํ์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค(๋น๊ณต๊ฐ ๋ฉค๋ฒ ๋ฌธ์ , ์๋น์ค ์ฐ์ฐ์ ...).
์ค์ ํ๋ก์ ํธ์ ๋ํ ์ฑ๋ฅ AOT + ์ง์ฐ ๋ก๋์ ๋ํ ์ ๋ณด๊ฐ ์๋ ์ฌ๋์ด ์์ต๋๊น?
Angular๋ tsc ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์์ ์คํ์ ์ํฌํ๋ก์ ๊ตฌํํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ข์ต๋๋ค.
@emilio-martinez ์ด๊ฒ์ด ๋ฐ๋ก ๋ด๊ฐ ์ํ์ง ์๋ ๊ฒ์
๋๋ค. ์ํ๋ TypeScript ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ์ถ์ต๋๋ค. ์๋ฅผ ๋ค์ด async/await์ ๋ํด ํ์ ๋ ๋ฒจ ๋ฐฉ์ถ์ด ์๋ 2.1.0-dev๊ฐ ์์ต๋๋ค. Angular๊ฐ ๋ด TypeScript ํ์ผ ์ปดํ์ผ์ ๋ด๋นํ๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ํ๋ ์์ํฌ์ ์์๋์ด์๋ ์ ๋ฉ๋๋ค. ์ด๊ฒ์ ์ธ์ด์ ์ญํ ์
๋๋ค. ์ฃผ์ ์์ ๋ ๋ฒ์ด๋์ง ์์๋ค๋ฉด @Script ๋ฅผ 10ํผํธ ๊ธฐ๋ฅ์ผ๋ก ๋ง์ง์ง๋ ์์์ ๊ฒ์
๋๋ค. ๋คํ์ด๋ ์ฃฝ์์ต๋๋ค.
์ํฌํ๋ก ์ธก๋ฉด์์ ์ ๋ JSPM๊ณผ ๋๋๋ก Webpack์ ์ฌ์ฉํฉ๋๋ค. ์ ํต์ ์ธ ํ์คํฌ ๋ฌ๋๊ฐ ์๋๋ผ IDE๊ฐ ๋ฆฐํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํฉ๋๋ค.
๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ๊ฐ๋ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ์ํํ๋ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์์ฑํ์ผ๋ฉฐ ์ด์ ot๊ฐ ์ด๋ฅผ ๋ฌด์ํ๋ค๋ ๊ฒ์ ์ดํดํ๋ค๋ ๊ฒ์ ๋๋ค. Angular์ ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ์ผ๋ง๋ ๋ฌด๊ฑฐ์ด์ง๋ฅผ ๊ณ ๋ คํ ๋ ํ๋ ์์ํฌ๊ฐ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์์ ํ ์ง์ํ์ง ์๊ณ AOT ๋์ ์ค์ ๋ก ๊ธฐ๋ณธ ์ธ์ด์ ๋ฐํ์ ๊ตฌ์ฑ์ธ ๊ฒฝ์ฐ ์ ์ ์ฃผ์์ผ๋ก ์ฒ๋ฆฌํ๋ค๋ ์ฌ์ค์ ์๊ณ ๋งค์ฐ ์ค๋งํ์ต๋๋ค.
@aluanhaddad AoT ์ปดํ์ผ ์ค์ ๋ฐ์ํ๋ ๋ ๊ฐ์ง ๋ณ๊ฐ์ ๋จ๊ณ๊ฐ ์์์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ๋ _new_ typescript ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ ๋ฒ์งธ๋ ํด๋น ์ฝ๋๋ฅผ ES5/6์ผ๋ก ํธ๋์คํ์ผํ๋ ๊ฒ์
๋๋ค. ngc
๋ ํธ์์ ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ํํ์ง๋ง AoT์๋ ์ด๋ฅผ ์๊ตฌํ๋ ๊ณ ์ ํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. Google ๋ด๋ถ์์๋ ๋ ๋ค ์ํํ๋ฏ๋ก ์ด ๊ฒฝ์ฐ๊ฐ ์ฐ์ ์
๋๋ค. ๋๊ตฌ๋ ์ํ๋ ํ๊ฒฝ์์ ์ฝ๋ ์์ฑ์ ์ง์ํ๊ธฐ ์ํด ์ปดํ์ผ๋ฌ ํธ์คํธ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ (์์ง) Angular์ ๋ด์ฅ ๋ฐ์ฝ๋ ์ดํฐ ์์ ์ถ์ํ๋ฅผ ์ง์ํ์ง ์์ง๋ง https://www.npmjs.com/package/core-decorators ์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค.
@iurii-kyrylenko๋ LucidCharts๊ฐ AoT์ ๋ํ ๊ฒฝํ์ ๋ํด ์ด์ผ๊ธฐํ AngularConnect์ ์ฒซ๋ ๊ธฐ์กฐ ์ฐ์ค์ ์์ฒญํ ๊ฒ์ ์ ์ํฉ๋๋ค. https://youtu.be/xQdV7q3e_2w?t=1411 ์ฐธ์กฐ
IMHO - ๋ชจ๋ ์ฌ๋์ #1 ๋ชฉํ๋ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ AoT ์ปดํ์ผ์ ์์ํ๋ ๊ฒ์ ๋๋ค. ์ฑ๋ฅ์ ๋จ์ํ ํ์ ์ถ์ข ์ ๋ถํํฉ๋๋ค.
@robwormald ngc
๋ฅผ ํธ์ถํ ๋ ์ด๋ค ์ต์
์ ์ฌ์ฉํ ์ ์๋์ง ์ดํด๋ณด์ง ์์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ด๋ฏธ ๋ค๋ฃจ์ด์ก์ ์ ์์ต๋๋ค. NGC๊ฐ ํธ์์ฑ/์ต์ ํ๋ผ๋ ๋ ๋ฒ์งธ ๋ชฉ์ ์ ์กด์ฌํ๋ ์ฃผ๋ ์ด์ ์ธ ์ฒซ ๋ฒ์งธ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ณ ์์์ ๋ถ๋ช
ํ ํด์ค๋ค๋ฉด ์ด๋ฌํ ์ต์
์ด ์ฌ๊ธฐ์์ ๋ชฉ์๋ฆฌ๋ฅผ ๋ธ ๊ฒ๊ณผ ๊ฐ์ ์ฐ๋ ค๋ฅผ ์ํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌธ์๋ ๋์๋ง์ ๋ณ๋์ ๊ธฐ์ฑํ tsc
์ ์คํํ๋ ๋ฐฉ๋ฒ์ด ๋์ ์๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ์ ํธํ๋ ์ฌ๋๋ค์ ์ฐ๋ ค๋ฅผ ๋์ฑ ์ํํ ์ ์์ต๋๊น?
@kylecordes ๋๋ ๋ฌธ์๊ฐ ๊ณง ์์ ์ ์ปดํ์ผ๋ฌ ํธ์คํธ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก์ด๋ฏ๋ก ๊ตฌํํ๋ ค๋ฉด ์ฝ๊ฐ์ ์๊ธฐ ์ฃผ๋ ํ์ต์ด ํ์ํฉ๋๋ค. https://github.com/angular/angular-cli/tree/master/packages/webpack ์ฌ๊ธฐ์์ CLI์ ๋ํด ์ ์ฌํ ๊ฒ์ ๊ตฌํํ์ต๋๋ค.
@robwormald ์, ์์ ์ ์ปดํ์ผ๋ฌ ํธ์คํธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์๋๋๋ค. ๋๋ ๋ ์ค์ "๋น๋ ํ๋ก์ธ์ค"๋ฅผ ์๋ฏธํ์ต๋๋ค. ๋จผ์ ngc
๋ฅผ ํธ์ถํ์ฌ ์ผ๋ถ ์์ฑ๋ ํ์ดํ์คํฌ๋ฆฝํธ๋ฅผ ๋ด๋ณด๋ธ ๋ค์ tsc
๋ฅผ ์ง์ ํธ์ถํ์ฌ ๋ชจ๋ ํ์ดํ์คํฌ๋ฆฝํธ(์์ค์ ์์ฑ๋ ์์ค)๋ฅผ ๋ค์์ผ๋ก ์ปดํ์ผํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ. ์ด๊ฒ์ typescript ์ฝ๋๊ฐ ๊ธฐ์ฑํ typescript ์ปดํ์ผ๋ฌ์ ์ํด JS๋ก ์ปดํ์ผ๋๊ณ ์๋ค๋ ๊ฒ์ ๋น ๋ฅด๊ฒ ํ์ ์์ผ์ค๋๋ค.
@robwormald ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค.
NGC์ ๊ด๋ จํ์ฌ ๋ด๊ฐ ์๊ณ ์ถ์ ๊ฒ์ TypeScript ์ปดํ์ผ๋ฌ ๋ฒ์ ๊ณผ TS -> TS
ํจ์ค์ ์ค์ ์ ์ ์ดํ ์ ์๋์ง ์ฌ๋ถ์
๋๋ค. TypeScript๋ฅผ NGC์ ์ ๋ฌํ ์ ์์ต๋๊น? ์๋๋ฉด ํน์ TypeScript ๋ฒ์ ์ ๋ํํ๋ ํน์ ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํฉ๋๊น? ์ผ๋ง๋ ๊ฒฐํฉ๋์ด ์์ต๋๊น?
๋ฐ์ฝ๋ ์ดํฐ์ ๊ด๋ จํ์ฌ Angular ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ถ์ํํ๋ ์ฌ์ฉ์ ์ ์ ๋ฐ์ฝ๋ ์ดํฐ์ ๋ํ ์ง์์ ์ถ์ ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๊น? https://www.npmjs.com/package/core-decorators ๋ ์ง๊ต ๋ฐ์ฝ๋ ์ดํฐ ์ธํธ์ด์ง๋ง Angular ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ๋ํํ์ฌ Angular ์ฑ์์ ํจํด๊ณผ ๊ท์น์ ์ ์ฉํ๋ ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ์์ต๋๋ค. ์ด์ ๋ํ ๋ช ๋ฐฑํ ์ฌ์ฉ ์ฌ๋ก๋ ํจํค์ง ์ ์ฒด ๊ตฌ์ฑ ์์ ์ด๋ฆ ์ ๋์ฌ๋ฅผ ์๋์ผ๋ก ๋ง๋ค๊ณ ์ ์ฉํ๋ ๊ฒ์ด์ง๋ง ๋ค๋ฅธ ๊ฒ๋ ์์ต๋๋ค.
NGC๋ ์ด๊ฒ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋ฐ์ฝ๋ ์ดํฐ๊ฐ Angular์ ๊ด๋ จ์ด ์๋์ง ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น?
์ด๋ฆ์ผ๋ก ๊ฐ๋ ๋ฐ์ฝ๋ ์ดํฐ์ ์ผ์นํฉ๋๊น?
JavaScript ์ดํ ๋ฒ์๋ฅผ ์๋ฐํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฐ๋จํ ์๋๋ฆฌ์ค
_awesome-component-decorators.ts_
import { Component } from '@angular/core';
import template from './awesome-component.html';
import style from './awesome-component.less';
export const awesomeComponet = <T extends new (...args) => any>(target: T) =>
Component({template, styles: [style], selector: snakeCase(target.name) })(target);
_์๋น์.ts_
import { awesomeComponet } 'app/shared/awesome-component-decorators';
<strong i="19">@awesomeComponent</strong>
export class AnAwesomeComponent { }
<strong i="20">@awesomeComponent</strong>
export class AnotherAwesomeComponent { }
@jpsfs ๋ฃจํธ ์์ฉ ํ๋ก๊ทธ๋จ ๋ชจ๋์ ๊ตฌ์ฑ ์์ ์ ์ธ์ ์ถ๊ฐํ์ง ์๊ณ ๊ตฌ์ฑ ์์๋ฅผ ๋์ ์ผ๋ก ๋ก๋ํ๋ ์๋ฃจ์ ์ ์ฐพ์์ต๋๊น? .
์ ๋ ๋ํ Angular 1.X์์ Angular 4๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ณ ์์ต๋๋ค. ์ด ํ๋ก์ ํธ์๋ ์์ฉ ํ๋ก๊ทธ๋จ ์ปจํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ง์ฐ ๋ก๋๋๋ ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฌ์ฉ๋๋ ๋ง์ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค.
Angular 4์ ๋ํ ๋ด ์ดํด์ ๋ฐ๋ผ
์๋์ ๊ฐ์ด ๋ฃจํธ @NgModule ์ ์ธ์ ๊ตฌ์ฑ ์์ ์ข ์์ฑ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
"@angular/platform-browser-dynamic"์์ {platformBrowserDynamic} ๊ฐ์ ธ์ค๊ธฐ;
"@angular/core"์์ {Component, NgModule} ๊ฐ์ ธ์ค๊ธฐ;
...
...
@NgModule({
imports: [BrowserModule ], // Angular์ BrowserModule ๊ฐ์ ธ์ค๊ธฐ
bootstrap: [BootStrapComp], // ๋ถํธ์คํธ๋ฉ ๊ตฌ์ฑ ์์๋ฅผ ๋ํ๋
๋๋ค.
์ ์ธ: [com1, comp2, comp5 ...... Comp n ] // ๋ชจ๋์ ๊ตฌ์ฑ ์์๋ฅผ ๋ฑ๋กํฉ๋๋ค.
})
๋ด๋ณด๋ด๊ธฐ ํด๋์ค AppModule {}
platformBrowserDynamic().bootstrapModule(์ฑ ๋ชจ๋);
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ NgModule์ด ์ปดํ์ผ ํ์์ ๊ตฌ์ฑ ์์ ์ข
์์ฑ์ ๋ํด ์๋๋ก ๋ฃจํธ๋ฅผ ์ง์ ํ๊ณ ์ถ์ง ์์์ต๋๋ค. ์คํ๋ ค ์ฐ๋ฆฌ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฐํ์์์ ๋์ ์ผ๋ก ๋ก๋๋๊ธฐ๋ฅผ ์ํ์ต๋๋ค.
๋ฃจํธ NgModule ์ ์ธ์ ๋ชจ๋ โโ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ถํธ์คํธ๋ฉํ ์ ์๋ ์ข์ ์๋ฃจ์
์ ์ฐพ์์ต๋๊น?
@DaSchTour
์ฑ ์ง์ ์ ์ด ๋ค์๊ณผ ๊ฐ์ด ๋ณด์๋ ๋๋ฅผ ๊ธฐ์ตํ์ญ๋๊น?
์ฐ๋ฆฌ ์ค ์ผ๋ถ๋ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๋ชจ๋์ ์๋์ผ๋ก ์๊ตฌํ๊ณ ์ฑ ๋ชจ๋์ ์ถ๊ฐํ์ต๋๋ค.
angular2์์ ์ ์ฌํ๊ณ ์ฌ์ด ์๋ฃจ์ ์ ์ฐพ๊ณ ์์ต๋๋ค.
@samudrak Angular aot ์ง์์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ๊ตฌ์ฑ ์์๋ง ์ง์ฐ ๋ก๋ํ ์ ์์ต๋๋ค. ๊ฐ ๊ตฌ์ฑ ์์์ ๋ํด ์ง์ฐ ๋ชจ๋์ ์ค์ ํ๊ณ ๋ชจ๋์ ์ง์ฐ ๋ก๋ํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ ์ฌํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค...
ECMAScript์ ์ด์ TypeScript(๋ก๋ฉ๊ณผ ์ง๊ตํ๋ ์ ์ฒด ์ ํ ๊ฒ์ฌ ํฌํจ)์์ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ง์ํ๋ฏ๋ก ์ง์ฐ ๋ก๋ฉ ์ฌ์ฉ ์ฌ๋ก๋ ์๋นํ ์์์ ์ ๋๋ค. ๋ฌผ๋ก ๋์ด์ผ๋ณด๋ฉด 20/20์ด๊ณ ๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋ ์ง ์ ๋ฐฉ๋ฒ์ด ์์์ต๋๋ค.
์ด ๋ฌธ์ ๋ ํ๋์ด ์์ด ์๋์ผ๋ก ์ ๊ฒผ์ต๋๋ค.
์ ์ฌํ๊ฑฐ๋ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ญ์์ค.
์๋ ๋ํ ์ ๊ธ ์ ์ฑ ์ ๋ํด ์์ธํ ์์๋ณด์ธ์.
_์ด ์์ ์ ๋ด์ ์ํด ์๋์ผ๋ก ์ํ๋์์ต๋๋ค._
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํผ๋๋ฐฑ์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ต๋ณ์ ๋ฐ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ ์ ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ์ง๋ ์ฃผ์ ๋งค์ฐ ๋ฐ๋นด์ต๋๋ค(๋ด๋ถ Google ์ฑ์ NgModules๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ ๋๋ฌธ์ ๋ฆฌํฉํ ๋ง์ ๊ณ ํต๋ ํจ๊ป ๋๊ผ์ต๋๋ค).
์ฌ๊ธฐ์์ ๋ช ๊ฐ์ง ์ง๋ฌธ๊ณผ ์คํด๋ฅผ ํด๊ฒฐํ ์ ์๋์ง ๋ณด๊ฒ ์ต๋๋ค.
@NgModule() (๋ฐ @Component ๋ฐ ๊ธฐํ Angukar ๋ฐ์ฝ๋ ์ดํฐ)์ ๋ํด ๊ฐ์ฅ ๋จผ์ ์ดํดํด์ผ ํ ๊ฒ์ ์ด๊ฒ์ด ์์ ํ ์ปดํ์ผ ์๊ฐ ๊ตฌ์ฑ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ต๊ทค๋ฌ ์ปดํ์ผ๋ฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋๋ก ํ๊ธฐ ์ํด ์กด์ฌํฉ๋๋ค.
๋ฐ์ฝ๋ ์ดํฐ๊ฐ ํ๋ ์ผ์ (๋จ์ํ) ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ค ์์ผ๋ก๋ ๋ฐ์ฝ๋ ์ดํ ๋ ํด๋์ค์ ๋์์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์์ ํ์ง ์์ต๋๋ค. ๋จ์ํ ์ผ๋ถ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฒจ๋ถํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. Angular๋ ํด๋น ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๊ณ ํ ํ๋ฆฟ์ ์ปดํ์ผํฉ๋๋ค.
JiT ๋ชจ๋์์๋ "Just in Time"์ด ๋ฐ์ํฉ๋๋ค. bootstrapModule์ ํธ์ถํ๊ณ ์ฒซ ๋ฒ์งธ ๊ตฌ์ฑ ์์ ๋ ๋๋ง ์ฌ์ด์ Angular์ ์ปดํ์ผ๋ฌ๊ฐ Reflect API๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค์ ์ฐ๊ฒฐ๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ AoT ๋ชจ๋์์๋ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค. ๋น๋ ์ ์ฐ๋ฆฌ๋ _์ ์ ์ผ๋ก_(์ฆ, ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ) ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ค์บํ์ฌ ์์ค ์ฝ๋์์ ๋์ผํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํฉ๋๋ค.
์ด๊ฒ์ ๋จ์ผ ๊ตฌ์ฑ ์์๋ฅผ ๋ถํธ์คํธ๋ฉํ ๋ ์ ์๋ํ์ง๋ง ์ฌ๋ฌ ๋ฃจํธ ๊ตฌ์ฑ ์์๋ฅผ ๋ถํธ์คํธ๋ฉํ๊ฑฐ๋ ์ธ์ฆ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ๋ถํธ์คํธ๋ฉํ๋ ๋ฑ ๋ ๋ณต์กํ ์์ ์ ์ํํ๋ ๊ฐ๋ฐ์๋ก๋ถํฐ ๋ง์ ํผ๋๋ฐฑ์ ๋ค์์ต๋๋ค.
๋ฐ๋ผ์ @Component ๋ฐ์ฝ๋ ์ดํฐ๋ Component๋ฅผ ์ ์ ์ผ๋ก ๋ถ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง _Application_์ ์์ ์ ์ผ๋ก ์ ์ ์ผ๋ก ๋ถ์ํ๋ ๊ธฐ๋ฅ์ ์์์ต๋๋ค.
"์์ฉ ํ๋ก๊ทธ๋จ"์ด๋ผ๋ ์ฐ์ฐ ์๋์ ์๋ ๊ฒ๋ค
NgModules๋ ์ ์ ์ผ๋ก ๋ถ์ ๊ฐ๋ฅํ ๊ธฐ๋ฅ ์ธํธ์ ๋ํ ์์ด๋์ด๋ฅผ ์๊ฐํฉ๋๋ค. ํฅ๋ฏธ๋ก์ด ์ ์ AoT ์ปดํ์ผ ๋ชจ๋์์ ๋ฃจํธ ๋ชจ๋์ ๋ถ์ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ๋ชจ๋์ ๋ํด ModuleFactory๋ฅผ _์์ฑ_ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ชจ๋ ๋ฒ์ ์ผ๋ก, ํ ํ๋ฆฟ์์ ์ ์ ์ผ๋ก ์ฐธ์กฐํ๋ ํฉํ ๋ฆฌ์ "entryComponents"๋ก ํ์
Ahead-of-Time ์ปดํ์ผ์ ํ์ํ ์ ๋ณด๋ฅผ ์ด๋ฏธ ์ถ์ถํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํธ๋ฆฌ ์์ดํฌํ ์ ์์ต๋๋ค. ์์ฑ๋ ๋ฃจํธ Module_Factory_์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ ๋ก ์ฌ์ฉ๋๋ ์ฝ๋๋ง ํฌํจ๋์ด ์์ผ๋ฏ๋ก ๋ชจ๋ํ์ ๋ํ ํจ๋ํฐ๋ฅผ ์ง๋ถํ์ง ์๊ณ ๋กค์ ๋ฐ webpack2์ ๊ฐ์ ๋๊ตฌ๊ฐ _๋์ฑ ํจ์จ์ ์ผ๋ก ์๋ํ ์ ์์ต๋๋ค.
๋ค์ ํ์ ์์ ๋ ๋ง์ ๊ฒ์ ๋ฐ๋ฅด์ญ์์ค ...