Angular: ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ NgModule

์— ๋งŒ๋“  2016๋…„ 08์›” 07์ผ  ยท  144์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: angular/angular

์ œ์ถœ ์ค‘์ž…๋‹ˆ๋‹ค ... ("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 ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ต๋ณ€์„ ๋ฐ›๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ์  ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ง€๋‚œ ์ฃผ์— ๋งค์šฐ ๋ฐ”๋นด์Šต๋‹ˆ๋‹ค(๋‚ด๋ถ€ 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_์„ ์•ˆ์ •์ ์œผ๋กœ ์ •์ ์œผ๋กœ ๋ถ„์„ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

"์‘์šฉ ํ”„๋กœ๊ทธ๋žจ"์ด๋ผ๋Š” ์šฐ์‚ฐ ์•„๋ž˜์— ์žˆ๋Š” ๊ฒƒ๋“ค

  • PLATFORM_DIRECTIVES/PIPES/PROVIDERS
  • ์ด์ „์— bootstrap()์— ์ถ”๊ฐ€ํ•œ ๊ฒƒ๋“ค
  • ์ปดํŒŒ์ผ๋Ÿฌ ์ˆ˜์ค€ ์„ค์ •
  • ์—ฌ๋Ÿฌ ๋ฃจํŠธ ๊ตฌ์„ฑ ์š”์†Œ
  • ์„œ๋ฒ„ ์ธก ์‚ฌ์šฉ.

NgModules๋Š” ์ •์ ์œผ๋กœ ๋ถ„์„ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ ์„ธํŠธ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กœ์šด ์ ์€ AoT ์ปดํŒŒ์ผ ๋ชจ๋“œ์—์„œ ๋ฃจํŠธ ๋ชจ๋“ˆ์„ ๋ถ„์„ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ModuleFactory๋ฅผ _์ƒ์„ฑ_ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ๋ชจ๋“ˆ ๋ฒ„์ „์œผ๋กœ, ํ…œํ”Œ๋ฆฟ์—์„œ ์ •์ ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ํŒฉํ† ๋ฆฌ์™€ "entryComponents"๋กœ ํ‘œ์‹œ

Ahead-of-Time ์ปดํŒŒ์ผ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ด๋ฏธ ์ถ”์ถœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ ์‰์ดํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ๋ฃจํŠธ Module_Factory_์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“ˆํ™”์— ๋Œ€ํ•œ ํŒจ๋„ํ‹ฐ๋ฅผ ์ง€๋ถˆํ•˜์ง€ ์•Š๊ณ  ๋กค์—… ๋ฐ webpack2์™€ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ _๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํšŒ์‹ ์—์„œ ๋” ๋งŽ์€ ๊ฒƒ์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค ...

๋ชจ๋“  144 ๋Œ“๊ธ€

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์—๋Š” ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ž‘์—… ๋ชฉ๋ก ๊ตฌ์„ฑ ์š”์†Œ
  2. ์ž‘์—… ํ•ญ๋ชฉ ๊ตฌ์„ฑ ์š”์†Œ
  3. ์ž‘์—… ํ•„ํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ
  4. ํƒœ์Šคํฌ ์„œ๋น„์Šค

Taskitem ๊ตฌ์„ฑ ์š”์†Œ๋Š” Tasklist ๋‚ด์—์„œ๋งŒ ํ•„์š”ํ•˜๋ฉฐ Tasklist๋Š” Taskitem ๊ตฌ์„ฑ ์š”์†Œ์— ์ข…์†๋ฉ๋‹ˆ๋‹ค. Taskfilter์—๋Š” Taskitem ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ Tasklist์— ์ข…์†์„ฑ์œผ๋กœ Taskitem์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” TaskSearch ๋ชจ๋“ˆ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ž‘์—… ๋ชฉ๋ก ๊ตฌ์„ฑ ์š”์†Œ
  2. ์ž‘์—… ๊ฒ€์ƒ‰ ๊ตฌ์„ฑ ์š”์†Œ
  3. ํƒœ์Šคํฌ ์„œ๋น„์Šค

๊ธ€์Ž„, ๋‚˜๋Š” 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์˜ ๋ชจ๋“  ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด์ œ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ์™ธ๋ถ€ ๋ณตํ•ฉ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์„œ๋น„์Šค๋ฅผ DialogsModule์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์ œ ๋Œ€ํ™” ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ๊ฒƒ์ด ๋‚ด๋ถ€(๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ 1, ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ 2, ๋‚ด๋ถ€ ์„œ๋น„์Šค 3)์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณตํ•ฉ 3์˜ ์บก์Šํ™”๋ฅผ ๊นจ๋œจ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค.
  • complex-3 ์ž์ฒด๋ฅผ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒ”์œ„ ์ง€์ • ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋งŒ(๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ๋ชจ๋“ˆ์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ž˜ํผ ๋ชจ๋“ˆ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ) ์ด์ œ ๋น„์Šทํ•œ ๊ทธ๋ฃน(๋Œ€ํ™” ์ƒ์ž)์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋ชจ๋“ˆ์ด ํ˜ผํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋“ค ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์‹ค์ œ๋กœ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฉฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํ™•์žฅ๋จ์— ๋”ฐ๋ผ ๋‘˜ ์‚ฌ์ด์˜ ์ถฉ๋Œ๋งŒ ์ฆ๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ํ•ฉ๋ฆฌ์ ์ด๊ณ /๋ช…๋ฐฑํ•˜๊ณ /์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์†”๋ฃจ์…˜์€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ƒ์œ„ ๊ตฌ์„ฑ ์š”์†Œ(simple-1, simple-2, complex-3)๋ฅผ ๋‚ด๋ณด๋‚ด์ง€๋งŒ complex-3 _component_๊ฐ€ ์ž์ฒด ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ •์˜ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

/ ์ฐธ์กฐ: @robwormald

๋‚˜๋Š” @kylecordes ๊ฐ€ ์ƒˆ๋กœ์šด ngModules๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ๊ธฐ์กด Typescript ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ฝ”์Šค ๊ทธ๋ ˆ์ธ ์ปฌ๋ ‰์…˜์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์ „์— ๋งํ•œ ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. Typescript ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋Œ€์ผ ๋ฐฉ์‹์œผ๋กœ ngModules๋ฅผ ์ •์˜ํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์ œ์ถœํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜๊ฒฌ๊ณผ ์ƒ๊ฐ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/jbalbes/autoNgModule

10901

๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์ณค์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ง€์—ฐ ๋กœ๋“œ๋˜์ง€ ์•Š์€ ๋ชจ๋“ˆ์—์„œ ์ข…์†์„ฑ ์ฃผ์ž…์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ "๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ"์—์„œ ํฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋‚ด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๋ฉฐ ์ด๋ฏธ ๊ณ ํ†ต๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

์ด๊ฒƒ์€ ํฅ๋ฏธ ๋กญ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ 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๋กœ ์‹œ์ž‘ํ•˜์—ฌ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ •๋ง ๋„์›€์ด ๋˜์—ˆ๊ณ  ์ตœ์ข… ์•ฑ์ด ๋” ์ฒด๊ณ„์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
image

๊ทธ๋ฆฌ๊ณ  ์˜ˆ, 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_์„ ์•ˆ์ •์ ์œผ๋กœ ์ •์ ์œผ๋กœ ๋ถ„์„ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

"์‘์šฉ ํ”„๋กœ๊ทธ๋žจ"์ด๋ผ๋Š” ์šฐ์‚ฐ ์•„๋ž˜์— ์žˆ๋Š” ๊ฒƒ๋“ค

  • PLATFORM_DIRECTIVES/PIPES/PROVIDERS
  • ์ด์ „์— bootstrap()์— ์ถ”๊ฐ€ํ•œ ๊ฒƒ๋“ค
  • ์ปดํŒŒ์ผ๋Ÿฌ ์ˆ˜์ค€ ์„ค์ •
  • ์—ฌ๋Ÿฌ ๋ฃจํŠธ ๊ตฌ์„ฑ ์š”์†Œ
  • ์„œ๋ฒ„ ์ธก ์‚ฌ์šฉ.

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(...)

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์  -

  • ์™ธ๋ถ€ templateUrls ๋ฐ styleUrls ๋•Œ๋ฌธ์— JiT ๋ชจ๋“œ์˜ ๊ตฌ์„ฑ์š”์†Œ ์ปดํŒŒ์ผ์€ _๋ฐ˜๋“œ์‹œ_ ๋น„๋™๊ธฐ์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • viewContainer๋Š” _componentFactory_๋ฅผ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ์ด์ œ ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“œ๋ฅผ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜(JiT์™€ AoT ์‚ฌ์ด), _๋˜๋Š”_ ํ•ญ์ƒ ๊ตฌ์„ฑ ์š”์†Œ ์‚ฝ์ž… API๊ฐ€ ๋น„๋™๊ธฐ์‹์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€ํ™” ์ƒ์ž์˜ ๊ฒฝ์šฐ ๊ดœ์ฐฎ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณต์žกํ•œ UI๋ฅผ ๋™์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ(๋Œ€์‹œ๋ณด๋“œ ๋˜๋Š” ๊ทธ๋ฆฌ๋“œ ๋ณด๊ธฐ ๋“ฑ์„ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค) ์—„์ฒญ๋‚œ ์–‘์˜ ๋ถˆํ•„์š”ํ•œ Promise ์ผ์ •์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ํƒ€์‚ฌ ๋˜๋Š” ๊ณต์œ  ์„œ๋น„์Šค/๊ตฌ์„ฑ ์š”์†Œ(์˜ˆ: SharedDialogService)์—๋Š” _ํ•˜๋‚˜์˜_ ๊ตฌ์„ฑ ์š”์†Œ ๋˜๋Š” ComponentFactories๋ฅผ ์ˆ˜๋ฝํ•ด์•ผ ํ•˜๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋™์  ๊ตฌ์„ฑ ์š”์†Œ ์‚ฝ์ž…(๊ผญ ์ง€์—ฐ ๋กœ๋”ฉ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Œ)์„ ์ˆ˜ํ–‰ํ•˜๋Š” _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 ๋ชฉ๋ก์—์„œ ์ข…์†์„ฑ์„ ๋ฐœ๊ฒฌํ•˜๋Š” ์ง€๋ฃจํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ€์žฅ์ž๋ฆฌ์— ์‚ฌ๋Š” ๊ฒƒ์˜ ๋ณธ์งˆ์ ์ธ ๋ถˆํŽธํ•จ์ž…๋‹ˆ๋‹ค.

RC๊ฐ€ ์ด๋ ‡๊ฒŒ ๋งŽ์ด ๋ฐ”๋€Œ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ. ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ํŒ€์œผ๋กœ๋ถ€ํ„ฐ ๋…ผ์Ÿ์„ ์–ป์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜๋„์ ์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 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๊ฐ€์ง€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • CommonModule์€ HttpModule, FormsModule, MdInputModule ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • AppModule์€ BrowserModule, CommonModule, app.routing ๋ฐ ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • TestModule์€ BaseModule์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚ด๋ณด๋‚ด์ง€๋งŒ XHRBackend์™€ ๊ฐ™์€ ์ผ๋ถ€ ๊ณต๊ธ‰์ž๋ฅผ MockBackend๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

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์ด๊ณ  ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚ ์ง€ ์•Œ ๋ฐฉ๋ฒ•์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ํ™œ๋™์ด ์—†์–ด ์ž๋™์œผ๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค.
์œ ์‚ฌํ•˜๊ฑฐ๋‚˜ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ƒˆ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค.

์ž๋™ ๋Œ€ํ™” ์ž ๊ธˆ ์ •์ฑ… ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

_์ด ์ž‘์—…์€ ๋ด‡์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค._

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰