Top Banner
Angular Seminar 앵귤러 아키텍처 하루만에 훑어보기 조우진 ([email protected]) 한빛미디어 리얼타임 세미나 05
90

앵귤러 첫걸음(Angular for beginers)

Jan 21, 2018

Download

Software

HANBIT MEDIA
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 앵귤러 첫걸음(Angular for beginers)

AngularSeminar앵귤러아키텍처하루만에훑어보기

조우진 ([email protected])

한빛미디어 리얼타임 세미나 05

Page 2: 앵귤러 첫걸음(Angular for beginers)

발표에앞서다루는내용

• Angular와 연관된 프론트엔드 개발 생태계

• Angular�Framework의 아키텍처

• Angular�CLI와 Spring�boot를 사용한 Angular�

개발 과정 데모

Page 3: 앵귤러 첫걸음(Angular for beginers)

발표에앞서다루지않는것

• 프론트엔드 웹 개발에 한정된 개념 혹은 지식

• TypeScript의 고유한 syntax�및 feature

• Angular�Framework 패키지별 API�사용 방법

• RxJs 및 Server�Side�Rendering�등 고급 주제

Page 4: 앵귤러 첫걸음(Angular for beginers)

세미나의목표

• Self-Learning을 위한 마중물 붓기

• Angular�Framework�전체 구조 파악하기

• (어디가서 최신 프론트엔드 개발환경 아는 척 하기)

Page 5: 앵귤러 첫걸음(Angular for beginers)

Angular

#1프론트엔드생태계변화와

Angular Framework

한빛미디어 리얼타임 세미나 05

Page 6: 앵귤러 첫걸음(Angular for beginers)

옛날옛적에 JavaScript의탄생

• Brendan이말씀하시니 2주만에 JavaScript가생

기니라…

http://speakingjs.com/es5/ch04.html

Page 7: 앵귤러 첫걸음(Angular for beginers)

SaviorforJavaScript

Page 8: 앵귤러 첫걸음(Angular for beginers)

SaviorforJavaScript ECMA2015(ES6)

https://www.w3schools.com/js/js_versions.asp

Page 9: 앵귤러 첫걸음(Angular for beginers)

JavaScript의변화

http://kangax.github.io/compat-table/es6/

Page 10: 앵귤러 첫걸음(Angular for beginers)

http://slides.com/sakataa/deck-2#/

Page 11: 앵귤러 첫걸음(Angular for beginers)

Node.js

https://twitter.com/BusyRich/status/494959181871316992

Page 12: 앵귤러 첫걸음(Angular for beginers)

왜 Node.js ?

OS

JVM

Javacodes…

Browser

V8,Gecko,…

JScodes…

OSNode.js (V8)

JScodes…

Page 13: 앵귤러 첫걸음(Angular for beginers)

Node.js &NPM

http://www.modulecounts.com

Page 14: 앵귤러 첫걸음(Angular for beginers)

알아야할것이점점늘어난다…

Page 15: 앵귤러 첫걸음(Angular for beginers)

프론트엔드관련생태계

http://joaoperibeiro.com/the-front-end-developer-spectrum

Page 16: 앵귤러 첫걸음(Angular for beginers)

•패키지관리도구

• Bower

• NPM

• Yarn

주요도구분류 1/3

Page 17: 앵귤러 첫걸음(Angular for beginers)

•자동화및 Task도구

• Grunt

• Gulp

• Yeoman

• NPM

주요도구분류 2/3

Page 18: 앵귤러 첫걸음(Angular for beginers)

• Compiler (Preprocessor)

• CoffeeScript

• Babel

• Typescript

주요도구분류 3/3

Page 19: 앵귤러 첫걸음(Angular for beginers)

RoughComparisonb/wtwoJ*

Java JavaScriptBuild&Deployment

Jenkins NPM,Gulp,Grunt

DependencyManagement,BuildConfiguration

Maven, Gradle,Ivy,… NPM, Yarn

RuntimeEnv. JVM(HotSpot,Rockit) V8,Gecko,Servo,…

Page 20: 앵귤러 첫걸음(Angular for beginers)

Module화를향한노력

• 코드재사용성및범용화를위한노력

• CommonJS,AMD

• Webpack,ModuleinES6

• 자세한내용은…• http://d2.naver.com/helloworld/12864

• http://d2.naver.com/helloworld/591319

• http://d2.naver.com/helloworld/023981

Page 21: 앵귤러 첫걸음(Angular for beginers)

Module화를향한노력

https://bertrandg.github.io/the-javascript-module-mess/

Page 22: 앵귤러 첫걸음(Angular for beginers)

Angular

#2Angular Framework아키텍처이해하기

한빛미디어 리얼타임 세미나 05

Page 23: 앵귤러 첫걸음(Angular for beginers)

Angular Framework

• Angular isa framework

• forbuilding clientapplications

• inHTMLandeitherJavaScriptoralanguage

like TypeScript thatcompilestoJavaScript.

Page 24: 앵귤러 첫걸음(Angular for beginers)

Def1)Framework

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 25: 앵귤러 첫걸음(Angular for beginers)

Def2)ClientApplication

• View가있는모든 플랫폼

• Web,MobileWeb,nativemobile,andnativedesktop

Page 26: 앵귤러 첫걸음(Angular for beginers)

Def3)TypeScript

• TypeScript isatyped supersetofJavaScript

• thatcompiles toplainJavaScript.

http://chariotsolutions.com/blog/post/angular2-starter-walkthrough-overview/

Page 27: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 28: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 29: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

•모든 View는 Component로통한다.

Page 30: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

•모든 View는 Component로통한다.

Page 31: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

•모든 View는 Component로통한다.

Page 32: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

import{Component}from'@angular/core';

@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.css']})exportclassAppComponent {title='app';}

Page 33: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

import{Component}from'@angular/core';

@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.css']})exportclassAppComponent {title='app';}

ES6의Module import구문(Java의클래스 import와유사하지요? )

Page 34: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

import{Component}from'@angular/core';

@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.css']})exportclassAppComponent {title='app';}

@는데코레이터데코레이터는대상에메타데이터제공및 Framework에게정보를주는역할을합니다.(Java의어노테이션같은… )

@Component에는많은메타데이터가들어갑니다.selector,template,templateUrl,providers,….

Page 35: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

import{Component}from'@angular/core';

@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.css']})exportclassAppComponent {title='app';}

컴포넌트는 (ES6,TypeScript)Class입니다.

View에노출할값이나이벤트처리로직등을이클래스안에서작성합니다.

Page 36: 앵귤러 첫걸음(Angular for beginers)

주요개념 1: Component

• 컴포넌트는 View를관리하는컨테이너와같다.

• AngularApp은컴포넌트트리를반드시갖는다.

• 컴포넌트트리의최상위루트컴포넌트를관례적으

로 AppComponent라한다.

• View를컴포넌트로나누는기준은없다.

• 재사용성

• 페이지단위

Page 37: 앵귤러 첫걸음(Angular for beginers)

주요개념 2: Template

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 38: 앵귤러 첫걸음(Angular for beginers)

주요개념 2: Template

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 39: 앵귤러 첫걸음(Angular for beginers)

주요개념 2: Template

• View를구성하는 Angular-style의마크업

• View를구성하기위하여 Component와짝을이룸

• HTML을포함한 Angular에서제공하는다양한연

산자및 syntax를사용하여 View를구성하는코드

를작성

Page 40: 앵귤러 첫걸음(Angular for beginers)

주요개념 2: Template

import{Component}from'@angular/core';

@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.css']})exportclassAppComponent {title='app';}

여기에 Template의경로를적었습니다.

Page 41: 앵귤러 첫걸음(Angular for beginers)

주요개념 2: Template

import{Component}from'@angular/core';

@Component({

selector:'app-root',

template:'<h1>Angular!!!</h1>',

styleUrls:['./app.component.css']

})

exportclassAppComponent {

title='app';

}

template이간단한경우에는이렇게바로 template을쓰기도합니다.

Page 42: 앵귤러 첫걸음(Angular for beginers)

주요개념 2: Template

<md-card><div class="contents"><md-input-container><input mdInput name="value" placeholder="사용자이름"

[(ngModel)]="userName" (ngModelChange)="onChange()"></md-input-container><button md-raised-button (click)="showWelcomeMsg()">입력</button><span class="welcome-msg">{{welcomeMsg}}</span>

</div></md-card>

Html+Angular의 Template구문으로이뤄집니다.처음보는속성들은다음개념설명에서알수있습니다.

https://github.com/not-for-me/hb-angular-first/blob/master/ch03/ng-welcome-msg-app/src/app/welcome-msg/welcome-msg.component.html

Page 43: 앵귤러 첫걸음(Angular for beginers)

주요개념 3: ComponentLifecycle

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 44: 앵귤러 첫걸음(Angular for beginers)

주요개념 3: ComponentLifecycle

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 45: 앵귤러 첫걸음(Angular for beginers)

주요개념 3: ComponentLifecycle

• Component의생성과소멸주체

• 우리가아닌 AngularFramework

• Lifecycle을 Hooking하여내로직실행

Page 46: 앵귤러 첫걸음(Angular for beginers)

주요개념 3: ComponentLifecycle

import{Component,OnInit,OnDestroy,DoCheck }from'@angular/core';

@Component({… })exportclassAppComponentimplementsOnInit,OnDestroy,DoCheck {

ngOnInit(){console.log('[ngOnInit]');}

ngOnDestroy(){console.log('[ngOnDestory]');}

ngDoCheck(){console.log('[ngDoCheck]');}}

Page 47: 앵귤러 첫걸음(Angular for beginers)

주요개념 3: ComponentLifecycle

import{Component,OnInit,OnDestroy,DoCheck }from'@angular/core';

@Component({… })exportclassAppComponentimplementsOnInit,OnDestroy,DoCheck {

ngOnInit(){console.log('[ngOnInit]');}

ngOnDestroy(){console.log('[ngOnDestory]');}

ngDoCheck(){console.log('[ngDoCheck]');}}

Hooking할라이프사이클인터페이스를구현하겠다고선언합니다.

Page 48: 앵귤러 첫걸음(Angular for beginers)

주요개념 3: ComponentLifecycle

import{Component,OnInit,OnDestroy,DoCheck }from'@angular/core';

@Component({… })exportclassAppComponentimplementsOnInit,OnDestroy,DoCheck {

ngOnInit(){console.log('[ngOnInit]');}

ngOnDestroy(){console.log('[ngOnDestory]');}

ngDoCheck(){console.log('[ngDoCheck]');}}

인터페이스에접두어로 ng를붙인메서드선언후,

필요한로직을작성합니다.

http://bit.ly/hb-ng-seminar-1

Page 49: 앵귤러 첫걸음(Angular for beginers)

주요개념 4: Directive&Pipe

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 50: 앵귤러 첫걸음(Angular for beginers)

주요개념 4: Directive&Pipe

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 51: 앵귤러 첫걸음(Angular for beginers)

주요개념 4: Directive&Pipe

• View를동적으로만들어주는요소

• Directive• StructuralDirectives

• DOM구조를동적으로변화시킬때사용

• NgIf,NgFor,NgSwitch,…

• AttributeDirectives

• 컴포넌트, DOM요소의표현및동작방식을변경할때사용

• NgStyle,NgClass,…

Page 52: 앵귤러 첫걸음(Angular for beginers)

주요개념 4: Directive&Pipe

• Pipe

• View에노출하는데이터를변형시킬때사용

• DatePipe,UpperCasePipe,CurrencyPipe,….

<p>SeminalDate:{{seminarDate |date:'YYYY-MM-dd'}}</p>

<p>SeminalDate:{{seminarDate |date|uppercase}}</p>

Page 53: 앵귤러 첫걸음(Angular for beginers)

주요개념 4: Directive&Pipe

•실행예제

• http://bit.ly/hb-af-ng-if

• http://bit.ly/hb-af-ng-for

• http://bit.ly/hb-af-ng-switch

• http://bit.ly/hb-af-pipe

Page 54: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 55: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 56: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

• Component(+Template)과 View사이의연결고리

•모든일은 Angular가한다.우리는선언만할뿐

•절차적인방식 vs선언적인방식

• http://www.notforme.kr/archives/1698

Page 57: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

• 3가지바인딩:Property,Event,Two-wayBinding

Page 58: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

import{Component}from'@angular/core';

@Component({… })exportclassAppComponent {title='Hello,Angular';myData ='1234';inputSize='10';constructor(){}

showData(){alert(this.myData);}checkInput($event){console.log($event.target.value);}}

Page 59: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

import{Component}from'@angular/core';

@Component({… })exportclassAppComponent {title='Hello,Angular';myData ='1234';inputSize='10';constructor(){}

showData(){alert(this.myData);}checkInput(e){console.log(e.target.value);}}

View에바인딩할때필요한속성입니다.

Event바인딩을위해메서드도구현합니다.

Page 60: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

<h1>{{title}}</h1><inputtype="text"

[ngModel]="myData"[size]="inputSize"(keyup)="checkInput($event)">

<buttontype="button"(click)="showData()">showme</button>

Page 61: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

<h1>{{title}}</h1><inputtype="text"

[ngModel]="myData"[size]="inputSize"(keyup)="checkInput($event)">

<buttontype="button"(click)="showData()">showme</button>

컴포넌트의데이터를 View에 interpolation합니다.

Page 62: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

<h1>{{title}}</h1><inputtype="text"

[ngModel]="myData"[size]="inputSize"(keyup)="checkInput($event)">

<buttontype="button"(click)="showData()">showme</button>

Input요소의 size property에 inputSize를바인딩했습니다.

Page 63: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

<h1>{{title}}</h1><inputtype="text"

[ngModel]="myData"[size]="inputSize"(keyup)="checkInput($event)">>

<buttontype="button"(click)="showData()">showme</button>

showData(){alert(this.myData);}checkInput($event){console.log($event.target.value);}

Input의 keyup이벤트에checkInput메서드를바인딩했습니다.

button의 click이벤트에showData메서드를바인딩했습니다.

Page 64: 앵귤러 첫걸음(Angular for beginers)

주요개념 5: DataBinding

<h1>{{title}}</h1><inputtype="text"

[ngModel]="myData"[size]="inputSize"(keyup)="checkInput($event)">

<buttontype="button"(click)="showData()">showme</button>

Input에 myData와양방향바인딩을선언했습니다.

Page 65: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 66: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 67: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

• Service• 애플리케이션에서사용할값,함수등무엇이든 OK!

• 일반적으로 View와관련없는로직

• 비즈니스로직,애플리케이션공통코드, Data Store,…

• 단일책임원칙

• DependencyInjection• 우리가보는것은 Framework입니다.

• Angular에도의존성주입기능이!!!

Page 68: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

• DependencyInjection

• 우리가보는것은 Framework입니다.

• Angular에도의존성주입기능이!!!

• DI를위해필요한것

1. 의존성정보를어딘가기록하고

2. 의존하는쪽에서는 constructor에서 Arg.로받음

Page 69: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

import{Injectable}from'@angular/core';

@Injectable()exportclassTestDiService {constructor(){}

print(){console.log('hello');}}

컴포넌트에서의존할서비스클래스를간단히선언합니다.

Page 70: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

import{Component}from'@angular/core';import{TestDiService }from'./test-di.service';

@Component({…providers:[TestDiService]})exportclassAppComponent {constructor(privatetestService:TestDiService){}

foo(){this.testService.print();}}

서비스클래스에의존성이있는컴포넌트클래스선언합니다.

Page 71: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

import{Component}from'@angular/core';import{TestDiService }from'./test-di.service';

@Component({…providers:[TestDiService]})exportclassAppComponent {constructor(privatetestService:TestDiService){}

foo(){this.testService.print();}}

먼저사용할서비스 import합니다.

의존성정보를@Component메타데이터에선언합니다.*다음에설명하는 Module개념에서도선언가능

Page 72: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

import{Component}from'@angular/core';import{TestDiService }from'./test-di.service';

@Component({…providers:[TestDiService]})exportclassAppComponent {constructor(privatetestService:TestDiService){}

foo(){this.testService.print();}}

생성자에서 Parameter로선언하면Angular가해당인스턴스를주입합니다.

Page 73: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

import{Component}from'@angular/core';import{TestDiService }from'./test-di.service';

@Component({…providers:[TestDiService]})exportclassAppComponent {constructor(privatetestService:TestDiService){}

foo(){this.testService.print();}}

주입받은서비스를사용할수있습니다.

Page 74: 앵귤러 첫걸음(Angular for beginers)

주요개념 6: Service&DI

• DI를사용하는이유

• 객체간의결합도낮추기 (Framework에게맡겨줘)

• 단일인스턴스보장받기

• 서비스클래스를애플리케이션전역에서사용하는

MemoryDB,MessageBus등으로쓸수있어요~~

Page 75: 앵귤러 첫걸음(Angular for beginers)

주요개념 7:Module

• ES6에서말하는모듈이아님

• 지금까지설명했던 Angular의요소들을하나로담는

컨테이너

• Angular Framework의많은기능은모듈단위로제공

• FormsModule,ReactiveFormsModule,RouterModule,

HttpModule,…

Page 76: 앵귤러 첫걸음(Angular for beginers)

주요개념 7:Module

import{BrowserModule }from'@angular/platform-browser';import{NgModule }from'@angular/core';import{AppComponent }from'./app.component';import{TestDiService }from'./test-di.service';

@NgModule({declarations:[AppComponent ],imports:[BrowserModule ],providers:[TestDiService ],bootstrap:[AppComponent ]})exportclassAppModule {}

Page 77: 앵귤러 첫걸음(Angular for beginers)

주요개념 7:Module

import{BrowserModule }from'@angular/platform-browser';import{NgModule }from'@angular/core';import{AppComponent }from'./app.component';import{TestDiService }from'./test-di.service';

@NgModule({declarations:[AppComponent ],imports:[BrowserModule ],providers:[TestDiService ],bootstrap:[AppComponent ]})exportclassAppModule {}

NgModule데코레이터가Angular의모듈을의미합니다.

모든 AngularApp.반드시최소하나의모듈을갖습니다.(관례적으로 AppModule이라명명)

Page 78: 앵귤러 첫걸음(Angular for beginers)

주요개념 7:Module

import{BrowserModule }from'@angular/platform-browser';import{NgModule }from'@angular/core';import{AppComponent }from'./app.component';import{TestDiService }from'./test-di.service';

@NgModule({declarations:[AppComponent ],imports:[BrowserModule ],providers:[TestDiService ],bootstrap:[AppComponent ]})exportclassAppModule {}

필요한모듈을 import할수있습니다.

Page 79: 앵귤러 첫걸음(Angular for beginers)

주요개념 7:Module

import{BrowserModule }from'@angular/platform-browser';import{NgModule }from'@angular/core';import{AppComponent }from'./app.component';import{TestDiService }from'./test-di.service';

@NgModule({declarations:[AppComponent ],imports:[BrowserModule ],providers:[TestDiService ],bootstrap:[AppComponent ]})exportclassAppModule {}

모듈에담을요소는 declarations에선언해야합니다.

최초진입점인루트컴포넌트는bootstrap에명시해야합니다.

Page 80: 앵귤러 첫걸음(Angular for beginers)

주요개념 7:Module

import{BrowserModule }from'@angular/platform-browser';import{NgModule }from'@angular/core';import{AppComponent }from'./app.component';import{TestDiService }from'./test-di.service';

@NgModule({declarations:[AppComponent ],imports:[BrowserModule ],providers:[TestDiService ],bootstrap:[AppComponent ]})exportclassAppModule {}

모듈레벨에서의존성주입선언도가능합니다.(컴포넌트에선언하는것보다모듈에선언한는것을권장합니다.)

Page 81: 앵귤러 첫걸음(Angular for beginers)

Angular에서제공하는 package

• @angular/common

• @angular/compiler(@compiler-cli)

• @angular/core

• @angular/forms

• @angular/http

• @angular/platform-browser(platform-browser-dynamic)

• @angular/palatform-server

• …

Page 82: 앵귤러 첫걸음(Angular for beginers)

Angular에서제공하는주요Module

• CommonModule:Angular에서제공하는각종지시자등을포함하는기본모

• BrowserModule:웹에서실행할때필요한기본모듈,CommonModule을내

장하고있음

• FormsModule,ReactiveFormsModule:폼구성에필요한지시자등을제공,ngModel을쓰려면반드시필요

• HttpModule,JsonpModule:ajax호출과관련된서비스클래스등을제공

• BrowserAnimationsModule:브라우저의애니메이션처리(css) API를제공

Page 83: 앵귤러 첫걸음(Angular for beginers)

Angular를구성하는요소들

ComponentLifeCycle

ViewComponent

Service

DependencyInjection

TemplateDirective

Pipe

DataBinding

Metadata

Page 84: 앵귤러 첫걸음(Angular for beginers)

Angular

#3Angular (CLI) – SpringBoot

데모세션

한빛미디어 리얼타임 세미나 05

Page 85: 앵귤러 첫걸음(Angular for beginers)

AngularCLI

• Angular프로젝트를 CLI에서쉽게구성/개발할수있도록도와주는도

• Google에서관리하는오픈소스는아님!

• Google에서는추후 Bazel +Clouser기반의빌드도구가나올수도있

• (2017년 7월)현재까지는 Angular개발환경셋팅에가장좋은도구

• 설치: npm install-g@angular/cli

Page 86: 앵귤러 첫걸음(Angular for beginers)

AngularCLI+SpringBoot

Frontend폴더에 angularsource가있습니다.

Page 87: 앵귤러 첫걸음(Angular for beginers)

AngularCLI+SpringBoot

Frontend폴더에 angularsource가있습니다.

"apps": [{"root": "src","outDir": "../resources/static","assets": [

"assets","favicon.ico"

],

.angular-cli.json에빌드결과물의위치를Boot의 static으로지정합니다.

Page 88: 앵귤러 첫걸음(Angular for beginers)

Build과정

• Build시에는 frontend-maven-plugin을사용

• https://github.com/eirslett/frontend-maven-plugin

<groupId>com.github.eirslett</groupId><artifactId>frontend-maven-plugin</artifactId><version>${frontend-plugin.version}</version><configuration><workingDirectory>src/main/frontend</workingDirectory><nodeDownloadRoot>https://nodejs.org/dist/</nodeDownloadRoot><nodeVersion>${node.version}</nodeVersion><npmVersion>${npm.version}</npmVersion><installDirectory>target</installDirectory>

</configuration>

Page 89: 앵귤러 첫걸음(Angular for beginers)

<executions><execution><id>installnodeandnpm</id><goals><goal>install-node-and-npm</goal></goals><phase>generate-resources</phase>

</execution><execution><id>npm install</id><goals><goal>npm</goal></goals><configuration><arguments>install</arguments><installDirectory>target</installDirectory>

</configuration></execution><execution><id>angularclibuild</id><goals><goal>npm</goal></goals><phase>generate-resources</phase><configuration><arguments>runbuild</arguments>

</configuration></execution>

</executions>

Page 90: 앵귤러 첫걸음(Angular for beginers)

감사합니다.