자바스크립트 프레임워크 살펴보기

89
HTML5JS Study Group JavaScript Framework. 고재도

Upload: jeado-ko

Post on 23-Jun-2015

3.796 views

Category:

Technology


12 download

DESCRIPTION

HTML5JS 모임 발표자료

TRANSCRIPT

Page 1: 자바스크립트 프레임워크 살펴보기

HTML5JS Study Group JavaScript Framework.

고재도

Page 2: 자바스크립트 프레임워크 살펴보기

회사 : 대우정보시스템 Email : [email protected] Face book : http://www.facebook.com/jeado.ko 관심 IT 분야 : JavaScript Framework, Java Framework, Software Design, etc.

발표자 고재도

Page 3: 자바스크립트 프레임워크 살펴보기

오모리 찌개 이야기

Page 4: 자바스크립트 프레임워크 살펴보기

고객 김치찌개 주문

김치찌개!

Page 5: 자바스크립트 프레임워크 살펴보기

김치찌개를 만들려면 뭘 해야 하지?

Page 6: 자바스크립트 프레임워크 살펴보기

주문한 날 김장을 한다!

Page 7: 자바스크립트 프레임워크 살펴보기

주문 후 두째 날 돼지를 잡는다!

Page 8: 자바스크립트 프레임워크 살펴보기

재료 준비 끝?

주문 후 셋째 날 고민 중…

Page 9: 자바스크립트 프레임워크 살펴보기

고객을 위해서 더욱 더 첨가해~

주문 후 넷째 날 요리 시작!!

Page 10: 자바스크립트 프레임워크 살펴보기

5일이 걸려 만들어진 김치찌개

Page 11: 자바스크립트 프레임워크 살펴보기

고객의 반응[response; 反應]

Page 12: 자바스크립트 프레임워크 살펴보기

하지만 이 모든 것이 표준 웹 기반의 어플리케이션을 만드는

우리의 현실

Page 13: 자바스크립트 프레임워크 살펴보기

가령 Google의 Gmail을 만들어야 한다면 ?

Page 14: 자바스크립트 프레임워크 살펴보기

메시지창

Page 15: 자바스크립트 프레임워크 살펴보기

트리 메뉴

Page 16: 자바스크립트 프레임워크 살펴보기

버튼들

Page 17: 자바스크립트 프레임워크 살펴보기

테이블 or 그리드

Page 18: 자바스크립트 프레임워크 살펴보기

자동완성 기능

Page 19: 자바스크립트 프레임워크 살펴보기

캘린더

Page 20: 자바스크립트 프레임워크 살펴보기

하지만 고려할 점이 이게 다가 아니죠

Page 21: 자바스크립트 프레임워크 살펴보기

MVC

Modularity DOM Manipulation

MVVM

Data Bound Views

Production Packaging

MVP

Class System Routers & History

SASS & LESS

Cross Browsing

AMD

Event Handling

Ajax

Page 22: 자바스크립트 프레임워크 살펴보기

MVC

Modularity DOM Manipulation

MVVM

Data Bound Views

Production Packaging

MVP

Class System Routers & History

SASS & LESS

Cross Browsing

Event Handling

Ajax

AMD

Page 23: 자바스크립트 프레임워크 살펴보기

•  Spaghetti Code •  심한 커플링 •  무분별한 코드 복사 •  재사용성 제로

Page 24: 자바스크립트 프레임워크 살펴보기

                                                                                                                                                                                                                                                                                                                                                                                                 

Hope

Page 25: 자바스크립트 프레임워크 살펴보기

JavaScript Framework

Page 26: 자바스크립트 프레임워크 살펴보기

김치찌개 만든다고 김장하고 돼지 잡지 마세요!

Page 27: 자바스크립트 프레임워크 살펴보기

하지만 Framework는 다양합니다. !���

Page 28: 자바스크립트 프레임워크 살펴보기

ExtJS 4.1

Page 29: 자바스크립트 프레임워크 살펴보기

All-in-One Framework

Mini Framework

Page 30: 자바스크립트 프레임워크 살펴보기

All-in-One Framework

ExtJS 4.1

Page 31: 자바스크립트 프레임워크 살펴보기

Mini Framework

Page 32: 자바스크립트 프레임워크 살펴보기

MVC

Modularity DOM Manipulation

MVVM

Data Bound Views

Production Packaging

MVP

Class System Routers & History

SASS & LESS

Cross Browsing

CSS Animation

Event Handling

Ajax

Page 33: 자바스크립트 프레임워크 살펴보기

MVC

DOM Manipulation

Data Bound Views

Class System

Cross Browsing

Event Handling

Ajax

Modularity

Page 34: 자바스크립트 프레임워크 살펴보기

MVC

DOM Manipulation

Class System

Event Handling

Ajax

Modularity

Page 35: 자바스크립트 프레임워크 살펴보기

6가지 Feature에의 지원 여부 및 방식으로 분석

MVC

DOM Manipulation

Modularity

Class System

Event Handling

Ajax

Page 36: 자바스크립트 프레임워크 살펴보기
Page 37: 자바스크립트 프레임워크 살펴보기

Class System Ext.define('My.sample.Person', { name: 'Unknown', constructor: function(name) { if (name) { this.name = name; } }, eat: function(foodType) { alert(this.name + " is eating: " + foodType); } }); var aaron = Ext.create('My.sample.Person', 'Aaron'); aaron.eat("Salad"); // alert("Aaron is eating: Salad");

Page 38: 자바스크립트 프레임워크 살펴보기

Class System Ext.define('Computer', { statics: { instanceCount: 0, factory: function(brand) { return new this({brand: brand}); } }, config: { brand: null }, constructor: function(config) { this.initConfig(config); this.self.instanceCount ++; } }); var dellComputer = Computer.factory('Dell'); var appleComputer = Computer.factory('Mac'); alert(appleComputer.getBrand()); // using the auto-generated getter to get the value of a config property. Alerts "Mac" alert(Computer.instanceCount); // Alerts "2"

Page 39: 자바스크립트 프레임워크 살펴보기

DOM Manipulation

Page 40: 자바스크립트 프레임워크 살펴보기

DOM Manipulation //by id var el = Ext.get("my-div"); // by DOM element reference var el = Ext.get(myDivElement); // css3 쿼리 셀렉터 스펙을 통한 처리 var el = Ext.query("div > .help");

Page 41: 자바스크립트 프레임워크 살펴보기

Event Handling el.on({ 'click' : { fn: this.onClick, scope: this, delay: 100 }, 'mouseover' : { fn: this.onMouseOver, scope: this }, 'mouseout' : { fn: this.onMouseOut, scope: this } }); el.on({ 'click' : this.onClick, 'mouseover' : this.onMouseOver, 'mouseout' : this.onMouseOut, scope: this });

Page 42: 자바스크립트 프레임워크 살펴보기

Modularity

MVC를 통한 Decoupling과 모듈화 Dynamic Loading을 통한 의존성 관리

Page 43: 자바스크립트 프레임워크 살펴보기

Ext.require('Ext.Window', function() { new Ext.Window({ title : 'Loaded Dynamically!', width : 200, height: 100 }).show(); }); Ext.define('Ext.Window', { extend: 'Ext.Panel', requires: ['Ext.util.MixedCollection'], mixins: { draggable: 'Ext.util.Draggable' } });

Page 44: 자바스크립트 프레임워크 살펴보기

MVC Ext.application({ requires: ['Ext.container.Viewport'], name: 'AM', appFolder: 'app', launch: function() { Ext.create('Ext.container.Viewport', { layout: 'fit', items: [ { xtype: 'panel', title: 'Users', html : 'List of users will go here' } ] }); } });

Page 45: 자바스크립트 프레임워크 살펴보기

MVC

Page 46: 자바스크립트 프레임워크 살펴보기

Ext.define('AM.view.user.List' ,{ extend: 'Ext.grid.Panel', alias: 'widget.userlist', title: 'All Users', initComponent: function() { this.store = { fields: ['name', 'email'], data : [ {name: 'Ed', email: '[email protected]'}, {name: 'Tommy', email: '[email protected]'} ] }; this.columns = [ {header: 'Name', dataIndex: 'name', flex: 1}, {header: 'Email', dataIndex: 'email', flex: 1} ]; this.callParent(arguments); } });

MVC - View

Page 47: 자바스크립트 프레임워크 살펴보기

MVC - View

Page 48: 자바스크립트 프레임워크 살펴보기

Ext.define('AM.controller.Users', { extend: 'Ext.app.Controller', views: [ 'user.List' ], init: function() { this.control({ 'userlist': { itemdblclick: this.editUser } }); }, editUser: function(grid, record) { console.log('Double clicked on ' + record.get('name')); } });

MVC - Controller

Page 49: 자바스크립트 프레임워크 살펴보기

MVC - Controller

Page 50: 자바스크립트 프레임워크 살펴보기

MVC - Model

Page 51: 자바스크립트 프레임워크 살펴보기

MVC - Model Ext.define('AM.model.User', { extend: 'Ext.data.Model', fields: ['name', 'email'] });

Ext.define('AM.store.Users', { extend: 'Ext.data.Store', model: 'AM.model.User', data: [ {name: 'Ed', email: '[email protected]'}, {name: 'Tommy', email: '[email protected]'} ] });

Ext.define('AM.controller.Users', { extend: 'Ext.app.Controller', stores: ['Users'], models: ['User'], ... });

Page 52: 자바스크립트 프레임워크 살펴보기

Ajax

Page 53: 자바스크립트 프레임워크 살펴보기

Ext.define('AM.store.Users', { extend: 'Ext.data.Store', model: 'AM.model.User', autoLoad: true, proxy: { type: 'ajax', url: 'data/users.json', reader: { type: 'json', root: 'users', successProperty: 'success' } } });

Ajax

Page 54: 자바스크립트 프레임워크 살펴보기

{ "success": true, "users": [ {"id": 1, "name": 'Ed', "email": "[email protected]"}, {"id": 2, "name": 'Tommy', "email": "[email protected]"} ] }

Ajax

proxy: { type: 'ajax', api: { read: 'data/users.json', update: 'data/updateUsers.json' }, reader: { type: 'json', root: 'users', successProperty: 'success' } }

Page 55: 자바스크립트 프레임워크 살펴보기

Ext.Ajax.request({ url: 'page.php', params: { id: 1 }, success: function(response){ var text = response.responseText; // process server response here } }); Ext.Ajax.timeout = 120000; // 120 seconds Ext.Ajax.request({ url: 'page.aspx', timeout: 60000 });

Ajax

Page 56: 자바스크립트 프레임워크 살펴보기

UI Components

Page 57: 자바스크립트 프레임워크 살펴보기

http://www.sencha.com/products/extjs/examples/

그리드, 스케쥴러, 메뉴, 콤보박스, 차트, 각종 입력 필드, 윈도우, 텝 등… 엄청 많다!

Page 58: 자바스크립트 프레임워크 살펴보기

그 외 특징들

Page 59: 자바스크립트 프레임워크 살펴보기

훌륭한 매뉴얼과 예제

Page 60: 자바스크립트 프레임워크 살펴보기

하지만 모두 영어

Page 61: 자바스크립트 프레임워크 살펴보기

그래도 번역서도 출판되고 Sencha Touch로 인한 인지도 상승

Page 62: 자바스크립트 프레임워크 살펴보기

하지만 공짜가 아니다!

Page 63: 자바스크립트 프레임워크 살펴보기
Page 64: 자바스크립트 프레임워크 살펴보기

개발소스 다 공개(GPL)하면

공짜

Page 65: 자바스크립트 프레임워크 살펴보기

그래도 배워두면 Sencha Touch 2.x 개발 바로 들어갈 수 있다!

Page 66: 자바스크립트 프레임워크 살펴보기

Internet Explorer 8에서 성능 이슈 발생 (클라이언트 PC의 사양에 영향을 많이 받음)

Page 67: 자바스크립트 프레임워크 살펴보기
Page 68: 자바스크립트 프레임워크 살펴보기

Class System

없습니다.

Page 69: 자바스크립트 프레임워크 살펴보기

DOM Manipulation

없습니다. < jQuery or Zepto 필요 >

Page 70: 자바스크립트 프레임워크 살펴보기

Modularity

없습니다.

Page 71: 자바스크립트 프레임워크 살펴보기

MVC - Model

Page 72: 자바스크립트 프레임워크 살펴보기

MVC - Model

Page 73: 자바스크립트 프레임워크 살펴보기

MVC - Model

Page 74: 자바스크립트 프레임워크 살펴보기

HTML 템플릿을 이용

MVC - View

Page 75: 자바스크립트 프레임워크 살펴보기

<script  type="text/template"  id="stats-­‐template">    <span  id="todo-­‐count">      <strong><%=  remaining  %></strong>  <%=  remaining  ==  1  ?  'item'  :  'items'  %>  left    </span>    <ul  id="filters">      <li>        <a  class="selected"  href="#/">All</a>      </li>      <li>        <a  href="#/active">Active</a>      </li>      <li>        <a  href="#/completed">Completed</a>      </li>    </ul>    <%  if  (completed)  {  %>          <button  id="clear-­‐completed">Clear  completed  (<%=  completed  %>)</button>    <%  }  %>  

</script>

window.app.AppView  =  Backbone.View.extend({  ...  statsTemplate:  _.template($('#stats-­‐template').html()),  ...  render:  function()  {  

...  if  (window.app.Todos.length)  {  

...  this.$footer.html(this.statsTemplate({  completed:  completed,  remaining:  remaining  }));  ...  

},  ...  

});

Page 76: 자바스크립트 프레임워크 살펴보기
Page 77: 자바스크립트 프레임워크 살펴보기
Page 78: 자바스크립트 프레임워크 살펴보기

Ajax

API는 있으나 구현체는 없습니다. < jQuery or Zepto 필요 >

Page 79: 자바스크립트 프레임워크 살펴보기

Event Handling

Page 80: 자바스크립트 프레임워크 살펴보기

UI Components

단 하나도 없습니다.

Page 81: 자바스크립트 프레임워크 살펴보기

그 외 특징들

Page 82: 자바스크립트 프레임워크 살펴보기

All-in-One 과 전혀 다른 사상

Page 83: 자바스크립트 프레임워크 살펴보기

무한 확장성 하지만 그에 따른 책임도…

Page 84: 자바스크립트 프레임워크 살펴보기

디지이너, 퍼블리셔와 협업하기 좋다

Page 85: 자바스크립트 프레임워크 살펴보기

BackBone.js 기반의 개발방식은 국내 대규모 시스템 개발에서는 어려울 듯.

Page 86: 자바스크립트 프레임워크 살펴보기

아 놔! 요약 좀 해봐

Page 87: 자바스크립트 프레임워크 살펴보기

YUI 3.6, Dojo, ExtJS 4 BackBone, Ember, Angurlar

•  모두 다 있음 •  배우는데 큰 시간이 필요함 •  한글화 매뉴얼 필요함 •  구매비용 발생(ExtJS만) •  제약이 심함 •  디자이너와 협업이 어려움

•  UI 컴포넌트 전혀 없음 •  배우기 매우 쉬움 •  한글화 매뉴얼 필요함 •  다 공짜 •  제약이 없음 •  다른 라이브러리 사용필요 •  UI 아키텍쳐링이 필요함 •  디자이너와 협업이 쉬움

Page 88: 자바스크립트 프레임워크 살펴보기

https://github.com/addyosmani/todomvc

Page 89: 자바스크립트 프레임워크 살펴보기

Q n A