ݺߣ

ݺߣShare a Scribd company logo
component-based development using Angular2
Angular2를 활용한 컴포넌트 중심의 개발
160514 대구개발자그룹 정진욱
• Google이 만든 open-source web application
MV* framework
• MEAN stack중 Frontend 파트에 해당
– MEAN = MongoDB + ExpressJS + AngularJS +
Node.JS
AngularJS?
• 2014년 10월
– ngEurope conference에서 첫소개
• 2015년 4월 30일 (Alpha Version)
• 2015년 12월 (Beta Version)
– https://angular.io/ 에서 다운로드 받을 수 있게됨
• 2016년 5월
– 첫 release candidate가 되어 출시함
Angular2의 History
• Angular 1의 주요 컨셉이 사라짐
– Deprecated : Controllers, Directive Definition Object,
$scope, angular.module, jqLite
• Angular 2는 쉽다.
– Angular1의 주요 컨셉은 사라졌지만, 2는 Javascript
Class 구축에만 집중할 수 있게 한다.
• TypeScript를 이용한다.
– JS의 상위집합업어 OOP 지원, 명확한 형정의 제공으
로 가독성의 장점, 프리컴파일이 필요
Angular2의 중요특징
• 브라우저 지원
– 크롬, 파폭, 오페라, 사파리, IE11, Android, iOS 6+
(PC보다는, 모바일 앱을 위한 프레임워크)
• 기타 눈여겨볼 특징
– Angular 1의 확장이 아닌, 2는 새로 만들었다.
– Angular 2는 모바일을 고려하여 적은 대역폭으로 이
용할 수 있도록 하였다.
– Angular 1에 비해 빠르다. (3~10배)
Angular2의 중요특징
Angular1 vs Angular2
Reference : http://teropa.info/blog/2015/10/18/refactoring-angular-apps-to-components.html
• Component를 이용한 탬플릿과 서비스 로직 관리
Angular2의 아키텍쳐
• Component 정의
– 기능 명세에 의한 개발
– 명세 따른 배포, 조립 가능한 독립 구성단위
– 컴포넌트는 인터페이스만을 통해서 접근 (예 : WSDL)
• Component 중심개발의 특징
– 관심사분리의 개발 방법으로 컴포넌트간 연결이 느슨
하다(loosely coupled).
– 컴포넌트 재활용에 초점을 맞춘다.
컴포넌트 중심의 개발
• Front-End에서의 컴포넌트
– 커스텀 엘리먼트(HTML5)로 볼 수 있다
– Angular2에서 컴포넌트는 특정 Element를 의미한다.
– 사용예 : <my-component></my-component>
• Angular 1의 컴포넌트
– directives, controllers, Scope에 의해 구현
– 컴포넌트에 해당하는 directive는 Angular1의 구성요
소의 일부였다.
Angular2의 컴포넌트
• 컴포넌트 중심의 Angular2
– Angular2는 컴포넌트 중심으로 개발을 진행한다.
– 컴포넌트는 Template과 Logic을 포함한다.
– component는 하나의 독립적인 모듈결합을 가진다.
– component는 다른 component나 service를 의존주입
받을 수 있다.
Angular2의 컴포넌트
Angular2를 활용한 컴포넌트 중심의 개발
Component Component-Based System
Import {Component, .. } from ‘@angular/core’;
Import {Http,Headers .. } from ‘@angular/http’;’
...
@Component({ selector: 'app' })
@Injectable()
export class App{
constructor(http:Http){
...
}
}
Import {Component, .. } from ‘@angular/core’;
Import {Http,Headers .. } from ‘@angular/http’;’
...
@Component({ selector: 'app' })
@Injectable()
export class App{
constructor(http:Http){
...
}
}
Import {Component, .. } from ‘@angular/core’;
...
@Component({ selector: 'app' })
export class App{
constructor(){
...
}
} Component-Based
Angular2 Application
Angular2 Component
Angular2의 컴포넌트
import {Component} from ‘@angular2/angular2'
@Component({
selector: 'my-component',
template: '<div>Hello my name is {{name}}. <button
(click)=“sayHello()">Say Hello</button></div>'
})
export class MyComponent {
constructor() {
this.name = 'Programmer'
}
sayHello () {
console.log('My name is', this.name)
}
}
• Angular2의 컴포넌트 정의
• 아키텍쳐의 주요 구성단위는 다음과 같다.
– Module , Component, Template
– Metadata, Data Binding, Directive
– Service, Dependency Injection
Angular2의 주요 구성단위
• Angular는 많은 모듈로 이루어져있다.
• Module은 다른 모듈에 의해 Import 될 수 있다.
– Import시 핵심모듈은 ‘@’을 붙인다.
• @angular/core (angular 핵심모듈)
• @angular/common, @angular/router, and @angular/http ...
• Module은 export할때 여러 자료형을 가진다.
– Classes, function, values
1. Module
• 핵심모듈 Import
– import { Component } from '@angular/core';
• RC 버전이후에 반영
• 사용자 정의 모듈 Import
– import { AppComponent } from './app.component';
1. Module
• 컴포넌트는 함수를 통해 View를 바인딩 컨트롤
2. Component
import {Component} from 'angular2/core';
@Component({
selector: 'my-app',
template: ‘...’
})
export class AppComponent {
name ='';
district = ['namgu', 'bukgu', 'seogu', 'suseonggu'];
constructor() {
this.name = 'daegu'
}
sayCityName() {
alert('Our city name is '+this.name);
}
}
Module
=AppComponent
Metadata
To the Class
• Component가 Render하여 생성된다.
3. Template
<h2>Hero List</h2>
<p><i>Pick a hero from the list</i></p>
<div *ngFor="let hero of heroes" (click)="selectHero(hero)">
{{hero.name}}
</div>
<hero-detail *ngIf="selectedHero" [hero]="selectedHero"></hero-detail>
• Angular가 Class를 어떻게 처리해야 할지를 정의
4. Metadata
@Component({
selector: 'hero-list',
templateUrl: 'app/hero-list.component.html',
directives: [HeroDetailComponent],
providers: [HeroService]
})
export class HeroesComponent { ... }
5. Data Binding
• Component의 탬플릿은 모듈내 function에 의해
제어되고, Two Way Binding된 변수(model)를 통
해 rendering 된다.
<div>{{hero.name}}</div>
<hero-detail [hero]="selectedHero"></hero-detail>
<div (click)="selectHero(hero)"></div>
5. Data Binding
• Two way binding
– ngModel directive를 이용하여 모델은 Element에 연
결되고, 모듈이 이를 제어한다.
<input [(ngModel)]="hero.name">
6. Directive
• Directive를 통해 Template은 동적으로 변경됨
– Angular에서 제공하는 대표적인 Directive
• ngFor는 list에 대한 item을 출력
• ngModel directive는 two-way binding을 함
• ngIf는 component의 포함여부를 결정
<div *ngFor="let hero of heroes"></div>
<hero-detail *ngIf="selectedHero"></hero-detail>
6. Directive
• 컴포넌트에서 사용자 Directive를 Import가능
import { Directive, ElementRef, Input } from '@angular/core';
@Directive({ selector: '[myHighlight]' })
export class HighlightDirective {
constructor(el: ElementRef) {
el.nativeElement.style.backgroundColor = 'yellow';
}
}
import { Component } from '@angular/core';
import { HighlightDirective } from './highlight.directive';
@Component({
selector: 'my-app',
templateUrl: 'app/app.component.html',
directives: [HighlightDirective]
})
export class AppComponent { }
directive definition
Using directive
• Template에서 attribute directive는 [Directive
명]=“string literals” 형태로 사용
6. Directive
<p [myHighlight]="color" [defaultColor]="'violet'">
Highlight me too!
</p>
import { Injectable } from '@angular/core';
import { HEROES } from './mock-heroes';
@Injectable() //서비스 클래스에 추가해야
하는 Injectable Decorator
export class HeroService {
getHeroes() {
return HEROES;
}
}
7. Service
• 재사용이 빈번한 기능을 서비스로 정의함
import { Hero } from './hero';
export var HEROES: Hero[] = [
{"id": 11, "name": "Mr. Nice"},
{"id": 12, "name": "Narco"},
{"id": 13, "name": "Bombasto"},
{"id": 14, "name": "Celeritas"},
{"id": 15, "name": "Magneta"},
{"id": 16, "name": "RubberMan"},
{"id": 17, "name": "Dynama"},
{"id": 18, "name": "Dr IQ"},
{"id": 19, "name": "Magma"},
{"id": 20, "name": "Tornado"}
];
Heroservice.ts
Return the mock hero
mock-heroes.ts
• 서비스가 의존성을 가지는 경우 constructor
injection pattern을 이용해 주입받는다.
7. Service
import { Injectable } from '@angular/core';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { Logger } from '../logger.service';
@Injectable()
export class HeroService {
constructor(private logger: Logger) { }
getHeroes() {
this.logger.log('Getting heroes ...')
return HEROES;
}
}
• Construct의 parameter를 통한 서비스 주입
8. Dependency Injection
import { Component } from '@angular/core';
import { Hero } from './hero';
import { HeroService } from './hero.service';
@Component({
selector: 'hero-list',
template: `<div *ngFor="let hero of heroes">{{hero.id}} - {{hero.name}}
</div>`,
})
export class HeroListComponent {
heroes: Hero[];
constructor(heroService: HeroService) {
this.heroes = heroService.getHeroes();
} }
With D.I
• Constructor 주입 미사용시 변수에 직접할당
8. Dependency Injection
import { Component } from '@angular/core';
import { HEROES } from './mock-heroes';
@Component({
selector: 'hero-list',
template: `
<div *ngFor="let hero of heroes">
{{hero.id}} - {{hero.name}}
</div>
`,
})
export class HeroListComponent {
heroes = HEROES;
}
Without D. I.
• Typescript는 JS의 상위집합(superset) 언어
– ES2016+ 특징을 가진다.
- Typescript = ES6 + TYpes + Annotaions
- Generics나 Lambdas를 이용할 수 있다.
• Javascript의 결점 보완
– OOP(상속, 인터페이스 등) 지원
– Primitive Type 지원 (num, string, boolean..) 으로 가
독성의 장점
Typescript의 특징
• 프리컴파일 언어
– coffescript, atscript, typescript
• Javascript의 미래버전인 Ecma Script 사용
– ECMA Script는 Ecma International의 기술규격에 정
의된 스크립트 언어
– Javascript는 ECMA Script를 따른다.
Typescript의 특징
• Typescript는 ES6의 스펙을 포함한다
Typescript의 위치
• Node.JS 설치후 npm 명령어를 이용하여 설치
– $ npm install -g typescript
– Compile : $ tsc test.ts
– Test : $ node test.js
• 설치후 Windows 에서 패스가 안잡히는 경우
– C:Program Files (x86)Microsoft
SDKsTypeScript1.7 디렉터리를 환경변수에 추가
Typescript 컴파일러 설치
Typescript 컴파일과 테스트
TS JS HTML
Tsc로 컴파일 JS 로딩
Typescript에서 Class 사용예
/src/typescript/ex3_class/test.ts
• TS파일에 클래스 정의
class Gorilla { foo: number; }
class chimpanzee { bar: string; }
class Primates {
constructor(foo: Gorilla, bar: chimpanzee) { }
}
let primates = new Primates(new Gorilla(), new chimpanzee()); // valid
var Gorilla = (function () {
function Gorilla() { }
return Gorilla;
})();
var chimpanzee = (function () {
function chimpanzee() { }
return chimpanzee;
})();
var Primates = (function () {
function Primates(foo, bar) { }
return Primates;
})();
var primates = new Primates(new Gorilla(), new chimpanzee()); // valid
Typescript에서 Class 사용예
/src/typescript/ex3_class/test.ts
• TSC에 의해 JS로 컴파일된 결과
Typescript에서 Interface 사용예
/src/typescript/ex4_interface/test.ts
interface Person {
firstName: string;
lastName: string;
}
function greeter(person: Person) {
return "Hello, " + person.firstName + " " + person.lastName;
}
var user = { firstName: "Happy", lastName: "Grammer" };
document.body.innerHTML = greeter(user);
• TS파일에 Interface 정의
Typescript에서 Interface 사용예
/src/typescript/ex4_interface/test.js
• TSC에 의해 JS로 컴파일된 결과
function greeter(person) {
return "Hello, " + person.firstName + " " + person.lastName;
}
var user = { firstName: "Happy", lastName: "Grammer" };
document.body.innerHTML = greeter(user);
THANK YOU
https://github.com/DaeguDevGroup/angular2-bootstrap
Ad

Recommended

AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJS
Kenneth Ceyer
Angular 2 rc5 조사
Angular 2 rc5 조사
Rjs Ryu
Front end dev 2016 & beyond
Front end dev 2016 & beyond
Jae Sung Park
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
Jin wook
Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발
Jin wook
Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트
Jin wook
Angular2 NgModule
Angular2 NgModule
Peter YoungSik Yun
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
GDG DevFest 2017 Seoul 프론트엔드 모던 프레임워크 낱낱히 파헤치기
Kenneth Ceyer
Angular2 톺아보기
Angular2 톺아보기
철민 배
Angular js quick start
Angular js quick start
정기 김
Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션
Jeado Ko
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
Jeado Ko
ʴDZ⳾ᅡᅡᅡᆸᄀƵ
ʴDZ⳾ᅡᅡᅡᆸᄀƵ
Han Jung Hyun
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]
Woojin Joe
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
Taegon Kim
다시보는 Angular js
다시보는 Angular js
Jeado Ko
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
NAVER D2
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
Taegon Kim
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
Jae Sung Park
3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)
탑크리에듀(구로디지털단지역3번출구 2분거리)
Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
Dong Jun Kwon
Angular2 router&http
Angular2 router&http
Dong Jun Kwon
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
Jeado Ko
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
Gyutae Jo
Angular 기본 개념 잡기
Angular 기본 개념 잡기
장현 한
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
WebFrameworks
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
탑크리에듀(구로디지털단지역3번출구 2분거리)
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
장현 한
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue
Gunhee Lee

More Related Content

What's hot (20)

Angular2 톺아보기
Angular2 톺아보기
철민 배
Angular js quick start
Angular js quick start
정기 김
Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션
Jeado Ko
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
Jeado Ko
ʴDZ⳾ᅡᅡᅡᆸᄀƵ
ʴDZ⳾ᅡᅡᅡᆸᄀƵ
Han Jung Hyun
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]
Woojin Joe
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
Taegon Kim
다시보는 Angular js
다시보는 Angular js
Jeado Ko
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
NAVER D2
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
Taegon Kim
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
Jae Sung Park
3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)
탑크리에듀(구로디지털단지역3번출구 2분거리)
Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
Dong Jun Kwon
Angular2 router&http
Angular2 router&http
Dong Jun Kwon
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
Jeado Ko
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
Gyutae Jo
Angular 기본 개념 잡기
Angular 기본 개념 잡기
장현 한
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
WebFrameworks
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
탑크리에듀(구로디지털단지역3번출구 2분거리)
Angular2 톺아보기
Angular2 톺아보기
철민 배
Angular js quick start
Angular js quick start
정기 김
Polymer, lego같이 만드는 웹어플리케이션
Polymer, lego같이 만드는 웹어플리케이션
Jeado Ko
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
Jeado Ko
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]
Woojin Joe
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
Taegon Kim
다시보는 Angular js
다시보는 Angular js
Jeado Ko
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
NAVER D2
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
Taegon Kim
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
Jae Sung Park
Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
Dong Jun Kwon
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
Jeado Ko
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
Gyutae Jo
Angular 기본 개념 잡기
Angular 기본 개념 잡기
장현 한
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
WebFrameworks
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
(탑크리에듀_스프링/Spring/마이바티스/Mybatis/구로IT실무학원추천)#3.스프링프레임워크 & 마이바티스 (Spring Framew...
탑크리에듀(구로디지털단지역3번출구 2분거리)

Similar to Angular2를 활용한 컴포넌트 중심의 개발 (20)

Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
장현 한
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue
Gunhee Lee
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
NAVER D2
LucideWorks Banana 소개
LucideWorks Banana 소개
SuHyun Jeon
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
연웅 조
[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기
NAVER D2
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)
양 한빛
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
WooYoung Cho
Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.
ChangHyeon Bae
EcmaScript6(2015) Overview
EcmaScript6(2015) Overview
yongwoo Jeon
Why javaScript?
Why javaScript?
Kim Hunmin
[Td 2015]java script에게 형(type)이 생겼어요. typescript(박용준)
[Td 2015]java script에게 형(type)이 생겼어요. typescript(박용준)
Sang Don Kim
Whats jindo
Whats jindo
yongwoo Jeon
2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드
Tai Hoon KIM
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
정석 양
Angular CodeLab 두번째
Angular CodeLab 두번째
SangHun Lee
Angualr2에서 typescript 활용하기
Angualr2에서 typescript 활용하기
현섭 최
One-day-codelab
One-day-codelab
WebFrameworks
Data-binding AngularJS
Data-binding AngularJS
EunYoung Kim
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER Engineering
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
장현 한
목적에 맞게 Angular, React, Vue
목적에 맞게 Angular, React, Vue
Gunhee Lee
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
NAVER D2
LucideWorks Banana 소개
LucideWorks Banana 소개
SuHyun Jeon
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
연웅 조
[152] 웹브라우저 감옥에서 살아남기
[152] 웹브라우저 감옥에서 살아남기
NAVER D2
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)
양 한빛
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
WooYoung Cho
Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.
ChangHyeon Bae
EcmaScript6(2015) Overview
EcmaScript6(2015) Overview
yongwoo Jeon
[Td 2015]java script에게 형(type)이 생겼어요. typescript(박용준)
[Td 2015]java script에게 형(type)이 생겼어요. typescript(박용준)
Sang Don Kim
2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드
Tai Hoon KIM
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
[하코사세미나]미리보는 대규모 자바스크립트 어플리케이션 개발
정석 양
Angular CodeLab 두번째
Angular CodeLab 두번째
SangHun Lee
Angualr2에서 typescript 활용하기
Angualr2에서 typescript 활용하기
현섭 최
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER Engineering
Ad

More from Jin wook (10)

자연어처리 소개
자연어처리 소개
Jin wook
클린 아키텍처 재해석
클린 아키텍처 재해석
Jin wook
MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)
Jin wook
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
Jin wook
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정
Jin wook
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUD
Jin wook
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift)
Jin wook
Node.js의 도입과 활용
Node.js의 도입과 활용
Jin wook
파이썬(Python) 소개
파이썬(Python) 소개
Jin wook
빅 데이터 개요 및 활용
빅 데이터 개요 및 활용
Jin wook
자연어처리 소개
자연어처리 소개
Jin wook
클린 아키텍처 재해석
클린 아키텍처 재해석
Jin wook
MIPS CPU의 이해 (입문)
MIPS CPU의 이해 (입문)
Jin wook
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
Jin wook
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정
Jin wook
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUD
Jin wook
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift)
Jin wook
Node.js의 도입과 활용
Node.js의 도입과 활용
Jin wook
파이썬(Python) 소개
파이썬(Python) 소개
Jin wook
빅 데이터 개요 및 활용
빅 데이터 개요 및 활용
Jin wook
Ad

Angular2를 활용한 컴포넌트 중심의 개발

  • 1. component-based development using Angular2 Angular2를 활용한 컴포넌트 중심의 개발 160514 대구개발자그룹 정진욱
  • 2. • Google이 만든 open-source web application MV* framework • MEAN stack중 Frontend 파트에 해당 – MEAN = MongoDB + ExpressJS + AngularJS + Node.JS AngularJS?
  • 3. • 2014년 10월 – ngEurope conference에서 첫소개 • 2015년 4월 30일 (Alpha Version) • 2015년 12월 (Beta Version) – https://angular.io/ 에서 다운로드 받을 수 있게됨 • 2016년 5월 – 첫 release candidate가 되어 출시함 Angular2의 History
  • 4. • Angular 1의 주요 컨셉이 사라짐 – Deprecated : Controllers, Directive Definition Object, $scope, angular.module, jqLite • Angular 2는 쉽다. – Angular1의 주요 컨셉은 사라졌지만, 2는 Javascript Class 구축에만 집중할 수 있게 한다. • TypeScript를 이용한다. – JS의 상위집합업어 OOP 지원, 명확한 형정의 제공으 로 가독성의 장점, 프리컴파일이 필요 Angular2의 중요특징
  • 5. • 브라우저 지원 – 크롬, 파폭, 오페라, 사파리, IE11, Android, iOS 6+ (PC보다는, 모바일 앱을 위한 프레임워크) • 기타 눈여겨볼 특징 – Angular 1의 확장이 아닌, 2는 새로 만들었다. – Angular 2는 모바일을 고려하여 적은 대역폭으로 이 용할 수 있도록 하였다. – Angular 1에 비해 빠르다. (3~10배) Angular2의 중요특징
  • 6. Angular1 vs Angular2 Reference : http://teropa.info/blog/2015/10/18/refactoring-angular-apps-to-components.html
  • 7. • Component를 이용한 탬플릿과 서비스 로직 관리 Angular2의 아키텍쳐
  • 8. • Component 정의 – 기능 명세에 의한 개발 – 명세 따른 배포, 조립 가능한 독립 구성단위 – 컴포넌트는 인터페이스만을 통해서 접근 (예 : WSDL) • Component 중심개발의 특징 – 관심사분리의 개발 방법으로 컴포넌트간 연결이 느슨 하다(loosely coupled). – 컴포넌트 재활용에 초점을 맞춘다. 컴포넌트 중심의 개발
  • 9. • Front-End에서의 컴포넌트 – 커스텀 엘리먼트(HTML5)로 볼 수 있다 – Angular2에서 컴포넌트는 특정 Element를 의미한다. – 사용예 : <my-component></my-component> • Angular 1의 컴포넌트 – directives, controllers, Scope에 의해 구현 – 컴포넌트에 해당하는 directive는 Angular1의 구성요 소의 일부였다. Angular2의 컴포넌트
  • 10. • 컴포넌트 중심의 Angular2 – Angular2는 컴포넌트 중심으로 개발을 진행한다. – 컴포넌트는 Template과 Logic을 포함한다. – component는 하나의 독립적인 모듈결합을 가진다. – component는 다른 component나 service를 의존주입 받을 수 있다. Angular2의 컴포넌트
  • 11. Angular2를 활용한 컴포넌트 중심의 개발 Component Component-Based System Import {Component, .. } from ‘@angular/core’; Import {Http,Headers .. } from ‘@angular/http’;’ ... @Component({ selector: 'app' }) @Injectable() export class App{ constructor(http:Http){ ... } } Import {Component, .. } from ‘@angular/core’; Import {Http,Headers .. } from ‘@angular/http’;’ ... @Component({ selector: 'app' }) @Injectable() export class App{ constructor(http:Http){ ... } } Import {Component, .. } from ‘@angular/core’; ... @Component({ selector: 'app' }) export class App{ constructor(){ ... } } Component-Based Angular2 Application Angular2 Component
  • 12. Angular2의 컴포넌트 import {Component} from ‘@angular2/angular2' @Component({ selector: 'my-component', template: '<div>Hello my name is {{name}}. <button (click)=“sayHello()">Say Hello</button></div>' }) export class MyComponent { constructor() { this.name = 'Programmer' } sayHello () { console.log('My name is', this.name) } } • Angular2의 컴포넌트 정의
  • 13. • 아키텍쳐의 주요 구성단위는 다음과 같다. – Module , Component, Template – Metadata, Data Binding, Directive – Service, Dependency Injection Angular2의 주요 구성단위
  • 14. • Angular는 많은 모듈로 이루어져있다. • Module은 다른 모듈에 의해 Import 될 수 있다. – Import시 핵심모듈은 ‘@’을 붙인다. • @angular/core (angular 핵심모듈) • @angular/common, @angular/router, and @angular/http ... • Module은 export할때 여러 자료형을 가진다. – Classes, function, values 1. Module
  • 15. • 핵심모듈 Import – import { Component } from '@angular/core'; • RC 버전이후에 반영 • 사용자 정의 모듈 Import – import { AppComponent } from './app.component'; 1. Module
  • 16. • 컴포넌트는 함수를 통해 View를 바인딩 컨트롤 2. Component import {Component} from 'angular2/core'; @Component({ selector: 'my-app', template: ‘...’ }) export class AppComponent { name =''; district = ['namgu', 'bukgu', 'seogu', 'suseonggu']; constructor() { this.name = 'daegu' } sayCityName() { alert('Our city name is '+this.name); } } Module =AppComponent Metadata To the Class
  • 17. • Component가 Render하여 생성된다. 3. Template <h2>Hero List</h2> <p><i>Pick a hero from the list</i></p> <div *ngFor="let hero of heroes" (click)="selectHero(hero)"> {{hero.name}} </div> <hero-detail *ngIf="selectedHero" [hero]="selectedHero"></hero-detail>
  • 18. • Angular가 Class를 어떻게 처리해야 할지를 정의 4. Metadata @Component({ selector: 'hero-list', templateUrl: 'app/hero-list.component.html', directives: [HeroDetailComponent], providers: [HeroService] }) export class HeroesComponent { ... }
  • 19. 5. Data Binding • Component의 탬플릿은 모듈내 function에 의해 제어되고, Two Way Binding된 변수(model)를 통 해 rendering 된다. <div>{{hero.name}}</div> <hero-detail [hero]="selectedHero"></hero-detail> <div (click)="selectHero(hero)"></div>
  • 20. 5. Data Binding • Two way binding – ngModel directive를 이용하여 모델은 Element에 연 결되고, 모듈이 이를 제어한다. <input [(ngModel)]="hero.name">
  • 21. 6. Directive • Directive를 통해 Template은 동적으로 변경됨 – Angular에서 제공하는 대표적인 Directive • ngFor는 list에 대한 item을 출력 • ngModel directive는 two-way binding을 함 • ngIf는 component의 포함여부를 결정 <div *ngFor="let hero of heroes"></div> <hero-detail *ngIf="selectedHero"></hero-detail>
  • 22. 6. Directive • 컴포넌트에서 사용자 Directive를 Import가능 import { Directive, ElementRef, Input } from '@angular/core'; @Directive({ selector: '[myHighlight]' }) export class HighlightDirective { constructor(el: ElementRef) { el.nativeElement.style.backgroundColor = 'yellow'; } } import { Component } from '@angular/core'; import { HighlightDirective } from './highlight.directive'; @Component({ selector: 'my-app', templateUrl: 'app/app.component.html', directives: [HighlightDirective] }) export class AppComponent { } directive definition Using directive
  • 23. • Template에서 attribute directive는 [Directive 명]=“string literals” 형태로 사용 6. Directive <p [myHighlight]="color" [defaultColor]="'violet'"> Highlight me too! </p>
  • 24. import { Injectable } from '@angular/core'; import { HEROES } from './mock-heroes'; @Injectable() //서비스 클래스에 추가해야 하는 Injectable Decorator export class HeroService { getHeroes() { return HEROES; } } 7. Service • 재사용이 빈번한 기능을 서비스로 정의함 import { Hero } from './hero'; export var HEROES: Hero[] = [ {"id": 11, "name": "Mr. Nice"}, {"id": 12, "name": "Narco"}, {"id": 13, "name": "Bombasto"}, {"id": 14, "name": "Celeritas"}, {"id": 15, "name": "Magneta"}, {"id": 16, "name": "RubberMan"}, {"id": 17, "name": "Dynama"}, {"id": 18, "name": "Dr IQ"}, {"id": 19, "name": "Magma"}, {"id": 20, "name": "Tornado"} ]; Heroservice.ts Return the mock hero mock-heroes.ts
  • 25. • 서비스가 의존성을 가지는 경우 constructor injection pattern을 이용해 주입받는다. 7. Service import { Injectable } from '@angular/core'; import { Hero } from './hero'; import { HEROES } from './mock-heroes'; import { Logger } from '../logger.service'; @Injectable() export class HeroService { constructor(private logger: Logger) { } getHeroes() { this.logger.log('Getting heroes ...') return HEROES; } }
  • 26. • Construct의 parameter를 통한 서비스 주입 8. Dependency Injection import { Component } from '@angular/core'; import { Hero } from './hero'; import { HeroService } from './hero.service'; @Component({ selector: 'hero-list', template: `<div *ngFor="let hero of heroes">{{hero.id}} - {{hero.name}} </div>`, }) export class HeroListComponent { heroes: Hero[]; constructor(heroService: HeroService) { this.heroes = heroService.getHeroes(); } } With D.I
  • 27. • Constructor 주입 미사용시 변수에 직접할당 8. Dependency Injection import { Component } from '@angular/core'; import { HEROES } from './mock-heroes'; @Component({ selector: 'hero-list', template: ` <div *ngFor="let hero of heroes"> {{hero.id}} - {{hero.name}} </div> `, }) export class HeroListComponent { heroes = HEROES; } Without D. I.
  • 28. • Typescript는 JS의 상위집합(superset) 언어 – ES2016+ 특징을 가진다. - Typescript = ES6 + TYpes + Annotaions - Generics나 Lambdas를 이용할 수 있다. • Javascript의 결점 보완 – OOP(상속, 인터페이스 등) 지원 – Primitive Type 지원 (num, string, boolean..) 으로 가 독성의 장점 Typescript의 특징
  • 29. • 프리컴파일 언어 – coffescript, atscript, typescript • Javascript의 미래버전인 Ecma Script 사용 – ECMA Script는 Ecma International의 기술규격에 정 의된 스크립트 언어 – Javascript는 ECMA Script를 따른다. Typescript의 특징
  • 30. • Typescript는 ES6의 스펙을 포함한다 Typescript의 위치
  • 31. • Node.JS 설치후 npm 명령어를 이용하여 설치 – $ npm install -g typescript – Compile : $ tsc test.ts – Test : $ node test.js • 설치후 Windows 에서 패스가 안잡히는 경우 – C:Program Files (x86)Microsoft SDKsTypeScript1.7 디렉터리를 환경변수에 추가 Typescript 컴파일러 설치
  • 32. Typescript 컴파일과 테스트 TS JS HTML Tsc로 컴파일 JS 로딩
  • 33. Typescript에서 Class 사용예 /src/typescript/ex3_class/test.ts • TS파일에 클래스 정의 class Gorilla { foo: number; } class chimpanzee { bar: string; } class Primates { constructor(foo: Gorilla, bar: chimpanzee) { } } let primates = new Primates(new Gorilla(), new chimpanzee()); // valid
  • 34. var Gorilla = (function () { function Gorilla() { } return Gorilla; })(); var chimpanzee = (function () { function chimpanzee() { } return chimpanzee; })(); var Primates = (function () { function Primates(foo, bar) { } return Primates; })(); var primates = new Primates(new Gorilla(), new chimpanzee()); // valid Typescript에서 Class 사용예 /src/typescript/ex3_class/test.ts • TSC에 의해 JS로 컴파일된 결과
  • 35. Typescript에서 Interface 사용예 /src/typescript/ex4_interface/test.ts interface Person { firstName: string; lastName: string; } function greeter(person: Person) { return "Hello, " + person.firstName + " " + person.lastName; } var user = { firstName: "Happy", lastName: "Grammer" }; document.body.innerHTML = greeter(user); • TS파일에 Interface 정의
  • 36. Typescript에서 Interface 사용예 /src/typescript/ex4_interface/test.js • TSC에 의해 JS로 컴파일된 결과 function greeter(person) { return "Hello, " + person.firstName + " " + person.lastName; } var user = { firstName: "Happy", lastName: "Grammer" }; document.body.innerHTML = greeter(user);

Editor's Notes

  • #9: WSDL은 서비스를 기술하는 언어이다. 주요 구성요는 다음과 같다. - Types - Operations Binding WSDL의 구조는 다음과 같다. <definitions> <types> definition of types........ </types> <message> definition of a message.... </message> <portType> <operation> definition of a operation....... </operation> </portType> <binding> definition of a binding.... </binding> <service> definition of a service.... </service> </definitions>
  • #17: 모듈은 상위개념이며, 컴포넌트를 모듈로 보아도 무방하다.
  • #18: https://angular.io/docs/ts/latest/guide/architecture.html#!#template
  • #19: https://angular.io/docs/ts/latest/guide/architecture.html#!#metadata 클래스로 표현할 수 있는 대상은 컴포넌트, Directive, Service가 된다.
  • #20: https://angular.io/docs/ts/latest/guide/architecture.html#!#data-binding
  • #23: https://angular.io/docs/ts/latest/guide/attribute-directives.html
  • #25: https://angular.io/docs/ts/latest/guide/architecture.html#!#service https://angular.io/docs/ts/latest/guide/dependency-injection.html
  • #26: https://angular.io/docs/ts/latest/guide/dependency-injection.html
  • #27: https://angular.io/docs/ts/latest/guide/dependency-injection.html
  • #28: https://angular.io/docs/ts/latest/guide/dependency-injection.html