MVC 패턴을 구현하는 자바스크립트 프레임워크 AngularJS 활용편

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "MVC 패턴을 구현하는 자바스크립트 프레임워크 AngularJS 활용편"

Transcription

1 Hanbit ebook Realtime 41 MVC 패턴을구현하는자바스크립트프레임워크 AngularJS 활용편 AngularJS 브래드그린, 샤이엄세샤드리지음 / 김지원옮김

2 이도서는 O REILLY 의 AngularJS 의번역서입니다.

3 MVC 패턴을구현하는자바스크립트프레임워크 AngularJS 활용편

4 MVC 패턴을구현하는자바스크립트프레임워크 AngularJS 활용편 초판발행 2013 년 9 월 13 일 지은이브래드그린, 샤이엄세샤드리 / 옮긴이김지원 / 펴낸이김태헌펴낸곳한빛미디어 ( 주 ) / 주소서울시마포구양화로 7길 83 한빛미디어 ( 주 ) IT출판부전화 / 팩스 등록 1999년 6월 24일제 호 ISBN / 정가 9,900원 책임편집배용석 / 기획김병희 / 편집이세진디자인표지여동일, 내지스튜디오 [ 밈 ], 조판김현미마케팅박상용, 박주훈 이책에대한의견이나오탈자및잘못된내용에대한수정정보는한빛미디어 ( 주 ) 의홈페이지나아래이메일로알려주십시오. 한빛미디어홈페이지 / 이메일 Published by HANBIT Media, Inc. Printed in Korea Copyright c 2013 HANBIT Media, Inc. Authorized Korean translation of the English edition of AngularJS, ISBN c 2013 Brad Green, Shyam Seshadri. This translation is published and sold by permission of O Reilly Media, Inc., which owns or controls all rights to publish and sell the same. 이책의저작권은오라일리사와한빛미디어 ( 주 ) 에있습니다. 저작권법에의해보호를받는저작물이므로무단복제및무단전재를금합니다. 지금하지않으면할수없는일이있습니다. 책으로펴내고싶은아이디어나원고를메일 로보내주세요. 한빛미디어 ( 주 ) 는여러분의소중한경험과지식을기다리고있습니다.

5 저자소개 지은이 _ 브래드그린Brad Green 구글 AngularJS 프로젝트팀에서엔지니어관리자를맡고있으며, 접근성과지원공학을총괄감독한다. 구글에입사하기전에는인터넷기업의마케팅도구를만들어팔던 AvantGo 사에서초창기모바일웹개발자로근무하다가, 출장요식업에뛰어들어고단한몇년을보냈다. 대학을졸업하고 NeXT Computer 사에서스티브잡스의지휘아래밑에서데모소프트웨어를만들고잡스의슬라이드프레젠테이션을디자인했던것이브래드의첫직장경험이다. 브래드는아내와두자녀를데리고캘리포니아주마운틴뷰에살고있다. 지은이 _ 샤이엄세샤드리Shyam Seshadri Fundoo Solutions 사의사주이자 CEO다. AngularJS에관해컨설팅하고워크숍을개최한다. 인도시장을겨냥한혁신적제품개발에주력하며, AngularJS를주제로한워크숍을운영하고컨설팅한다. Fundoo Solutions 사를창립하기전에는하이데라바드에있는 Indian School of Business에서 MBA 과정을마쳤다. 샤이엄은대학졸업후첫직업으로구글에서다수의프로젝트를진행했다. 그중에는 AngularJS가처음으로사용된구글피드백 (Google Feedback) 프로젝트도있다. 그리고다양한내부도구도제작했다. 현재는인도나비뭄바이에서회사를운영하고있다.

6 역자소개 옮긴이 _ 김지원 웹기술뿐아니라온갖분야에발을뻗고싶어하는바람기를지녔지만역부족이다. 배워야할것이갈수록늘어나시간의결핍을느낀다. 워드프레스, 프라이드치킨, 꿀, 분재, 컴퓨터음악을좋아한다. 기술문서, 매뉴얼, 유비쿼터스관련논문을번역한바있고해외논문 DB 구축관련작업에도참여했다. 번역서로는 한권으로끝내는정규표현식 ( 한빛미디어, 2010), 웹표준가이드 : HTML5+CSS3 ( 한빛미디어, 2010), 프로젝트로배우는 HTML5+ 자바스크립트 ( 한빛미디어, 2012), 리팩토링 ( 한빛미디어, 2012), 엘리멘틀디자인패턴 ( 한빛미디어, 2013), HTML5+CSS3 디자인패턴 ( 한빛미디어, 2013), HTML5 웹소켓프로그래밍 ( 한빛미디어, 2013), AngularJS 기초편 ( 한빛미디어, 2013) 등이있다.

7 저자서문 Angular 프레임워크의기원은 2009 년의구글피드백 Google Feedback 이라는프로젝 트로거슬러올라간다. 필자는테스트가능한코드를작성하면서수개월간개발속 도와기능의문제로난관을겪었다. 6 개월여간작성한프론트엔드 front-end 코드가 대략 17,000줄이었다. 그런데당시프로젝트팀원이던미스코헤브리Misko Hevery 는자신이취미로작성한오픈소스라이브러리를사용하면 2 주도안걸려서우리 가작성한코드전체를새로작성할수있을거라고큰소리쳤다. 필자는프로젝트가 2주쯤지연돼도별문제는없을것이고설령미스코가장담한대로기한내에다시작성하지못하더라도기한에쫓겨허둥대는미스코의표정을보는재미라도있겠다는생각에그렇게해보라고했다. 예상대로미스코는기한을넘겨 3주만에완료했다. 그래도 6개월이걸렸던개발을 3주라는단시간에재현했다는점에우리팀전원은경악했는데, 더놀랍게도미스코가새로작성한애플리케이션의코드분량이원래의 17,000줄의 1/10도안되는 1,500줄에불과했다. 미스코가이뤄낸성과는추진해볼가치가있어보였다. 미스코가간단한선언문서로창안했던각종개념을중심으로해서, 미스코와나는웹개발자의경험을간소화할팀을만들기로했다. 이책의공동저자인샤이엄세샤드리 Shyam Seshadri 는구글피드백팀에서 Angular의첫출시애플리케이션개발을지휘했다. 그때부터우린구글의여러팀과수백명의오픈소스기부자의도움을받아 Angular 를개발했다. 많은개발자가일상적인작업에 Angular 프레임워크를이 용하며엄청난 Angular 지원망에기여한다. 우리는여러분이나눠주는지식을얻게되리란생각에감개무량하다.

8 감사의글 Angular 프레임워크를탄생시킨미스코헤브리에게각별히고마움을전한다. 미스코덕택에웹애플리케이션작성법을기존과전혀다른방식으로생각하고실천할수있었다. 이고르미나 Igor Minar 는 Angular 프로젝트의안정화와체계화에기여했고활성화된지금의오픈소스커뮤니티의모체를만들었다. 보이타지나 Vojta Jina 는 Angular의많은부분을작성했으며덕분에우리는테스트를유례없이신속하게할수있었다. 나오미블랙 Naomi Black, 존린퀴스트 John Lindquist, 매사이어스마셔스니멜라 Mathias Matias Niemela 는숙련된솜씨로편집을도와주었다. 앞서나열한모든분들과더불어, 다방면에서도움을주고실시간애플리케이션제작과정에서피드백을통해우리에게 Angular의가치있는사용법을알려준 Angular 커뮤니티분들께감사의인사를남긴다. 브래드그린, 샤이엄세샤드리

9 역자서문 왜 AngularJS 인가? 개발자가구글의 AngularJS 플랫폼을선택할수밖에없는이 유는다음과같다. 양방향데이터바인딩이가능하다 - AngularJS로개발한애플리케이션은클라이언트에서서버로뿐만아니라서버에서클라이언트로도실시간변경감지가이뤄진다. 감시, 리스너, 캡처기능을통해개발한코드가실행되고모델을조작한후발생하는변경사항을감시한다. 모델, 뷰, 컨트롤러, 서비스등여러구성요소로분리된다 - 지시어, 필터, 모듈등의추상객체를이용해균형을맞출수있다. 이로써복잡도의감소와관심사의분리라는두마리토끼를얻을수있다. 편리하고친숙한패턴이많다 - MVC나종속물주입같은유명한패턴외에도종속물관리같은다수의패턴이들어있어서체계적인구성으로개발할수있다. 테스트용코드를쉽게작성할수있다 - AngularJS 공식온라인강좌페이지에도 Jasmine 문법을사용한단위테스트와클라이언트-서버테스트를코드로작성하는방법이예시돼있다. 모든프레임워크가그렇듯비록 AngularJS 역시완벽할순없지만, 사소한단점에 비해얻을수있는것이많다. AngularJS 에관한전반적인내용이이책의본문에 자세히설명돼있으니자세한얘기는본문을숙지하기바란다. AngularJS 를개발에사용하면길고복잡한코딩의분량을획기적으로줄일수 있다. 아주간단하고코딩길이가짧은프로젝트라면물론큰이득을얻지못할 수도있지만, 데이터수정시에빠른반응성이요구되는 UI 를구상하고있다면

10 AngularJS는개발에있어서반드시고려할만하다. 플랫폼에이미내장돼있는지시어말고도개발자가직접정의한지시어를템플릿에사용함으로써모델, 컨트롤러와바로연결이가능한점은강력한기능이다. 종속물주입또한상위의기능에필요한종속물 ( 종속객체, 종속함수, 종속모듈등 ) 을마치혈관으로연결된링거에주사기로항생제를주입하듯이손쉽게끼워넣음으로써매우직관적이며메소드체인형태로호출이가능하다. 이모든잡다한서론을뒤로하고지금당장본문의첫페이지로가서어떤놀라운 장점이있고어떤부분이자신의개발에필요한지살펴보자. 번역을마무리하며, 김지원

11 도움을주신분들 베타테스터 _ 고지은 졸업하고나서알고싶은게더많은, 컴퓨터공학을전공한취업준비생이다. 앞으 로나아가기위해다양한전공책들에싸여지내고있다. 베타테스터 _ 김광남프로그래머로서, 많은사람이무료로사용할수있는프로그램을만드는게삶의목표다. 게임을개발하다현재는노래방회사에서 PC, SmartPhone, TV용노래방을개발하고있다. 나의아내효성아! 언제나사랑한다. 베타테스터 _ 김종호스타트업을통해새로운가치를만들길원하는학생이다. C/C++ 을사용하며지루해했으나안드로이드개발을통해프로그래밍에눈을떴다. 지금은파이썬과다양한웹기술을이용하여웹서비스를만들어서재미있는시도를하고있다. 서버와플랫폼에도관심이많으며풀스택개발자가되기를희망한다. 베타테스터 _ 박정춘새로운기술과프로그래밍언어에관심이많은백엔드개발자다. 최근에오픈소스와함수형프로그래밍에빠져있으며, 좋은 E-Commerce 서비스를만들기위해노력하고있다. 베타테스터 _ 한상곤리눅스에서개발자생활을시작하여, HTML과 Spring 영역까지뚜벅뚜벅걸어왔다. 어떻게왔는지, 어디로갈지는모르지만매일매일새로운것을설계하고만드는재미에푹빠져있다. 요즘은 Golang과파이썬에빠져서허우적거리고있다.

12 대상독자및예제파일 초급초중급중급중고급고급 이도서는 AngularJS의핵심을빠르게확인하고싶은독자를대상으로한다. 도서의내용을보다잘이해하려면, HTML과자바스크립트를어느정도알고있어야한다. 다음과같은독자들에많은도움이될것이다. 규모있는웹애플리케이션프로젝트의실무개발자 프레임워크기반으로자바스크립트에익숙해지려는웹퍼블리셔 jquery 입문이상으로나아가려는자바스크립트개발자 이도서의예제소스코드는다음웹사이트에서내려받을수있다. https://github.com/shyamseshadri/angularjs-book ( 영문버전 ) ( 한글버전 ) 영문버전은 AngularJS 버전을사용하였으며, 한글버전은 AngularJS 을사용하였다. 이도서에있는예제는 AngularJS 을사용하여소스코 드를테스트하였다. 소스코드에는구글 AngularJS 프레임워크파일의 URL 로인클루딩되어있다. 하 지만소스코드의간결성을위해일부코드는 AngularJS 사용하였다. 이도서에서 사용한 AngularJS 프레임워크파일은다음웹사이트에서내려받을수있다.

13 한빛 ebook 리얼타임 한빛 ebook 리얼타임은 IT 개발자를위한 ebook 입니다. 요즘 IT 업계에는하루가멀다하고수많은기술이나타나고사라져갑니다. 인터넷을아무리뒤져도조금이나마정리된정보를찾는것도쉽지않습니다. 또한잘정리되어책으로나오기까지는오랜시간이걸립니다. 어떻게하면조금이라도더유용한정보를빠르게얻을수있을까요? 어떻게하면남보다조금더빨리경험하고습득한지식을공유하고발전시켜나갈수있을까요? 세상에는수많은종이책이있습니다. 그리고그종이책을그대로옮긴전자책도많습니다. 전자책에는전자책에적합한콘텐츠와전자책의특성을살린형식이있다고생각합니다. 한빛이지금생각하고추구하는, 개발자를위한리얼타임전자책은이렇습니다. 1. ebook Only - 빠르게변화하는 IT 기술에대해핵심적인정보를신속하게제공합니다. 500페이지가까운분량의잘정리된도서 ( 종이책 ) 가아니라, 핵심적인내용을빠르게전달하기위해조금은거칠지만 100페이지내외의전자책전용으로개발한서비스입니다. 독자에게는새로운정보를빨리얻을수있는기회가되고, 자신이먼저경험한지식과정보를책으로펴내고싶지만너무바빠서엄두를못내는선배, 전문가, 고수분에게는보다쉽게집필할수있는기회가될수있으리라생각합니다. 또한새로운정보와지식을빠르게전달하기위해 O'Reilly의전자책번역서비스도하고있습니다. 2. 무료로업데이트되는, 전자책전용서비스입니다. 종이책으로는기술의변화속도를따라잡기가쉽지않습니다. 책이일정분량이상으로집필되고정리되어나오는동안기술은이미변해있습니다. 전자책으로출간된이후에도버전업을통해중요한기술적변화가있거나저자 ( 역자 ) 와독자가소통하면서보완하여발전된노하우가정리되면구매하신분께무료로업데이트해드립니다.

14 3. 독자의편의를위하여 DRM-Free로제공합니다. 구매한전자책을다양한 IT 기기에서자유롭게활용할수있도록 DRM-Free PDF 포맷으로제공합니다. 이는독자여러분과한빛이생각하고추구하는전자책을만들어나가기위해독자여러분이언제어디서어떤기기를사용하더라도편리하게전자책을볼수있도록하기위함입니다. 4. 전자책환경을고려한최적의형태와디자인에담고자노력했습니다. 종이책을그대로옮겨놓아가독성이떨어지고읽기힘든전자책이아니라, 전자책의환경에가능한한최적화하여쾌적한경험을드리고자합니다. 링크등의기능을적극적으로이용할수있음은물론이고글자크기나행간, 여백등을전자책에가장최적화된형태로새롭게디자인하였습니다. 앞으로도독자여러분의충고에귀기울이며지속해서발전시켜나가도록하겠습니다. 지금보시는전자책에소유권한을표시한문구가없거나타인의소유권한을표시한 문구가있다면위법하게사용하고있을가능성이높습니다. 이경우저작권법에의해 불이익을받으실수있습니다. 다양한기기에사용할수있습니다. 또한한빛미디어사이트에서구입하신후에는횟수에 관계없이다운받으실수있습니다. 한빛미디어전자책은인쇄, 검색, 복사하여붙이기가가능합니다. 전자책은오탈자교정이나내용의수정 보완이이뤄지면업데이트관련공지를이메일로 알려드리며, 구매하신전자책의수정본은무료로내려받으실수있습니다. 이런특별한권한은한빛미디어사이트에서구입하신독자에게만제공되며, 다른 사람에게양도나이전은허락되지않습니다.

15 차례 들어가기전에필수용어와개념정리 1 종속물주입 (Dependency Injection) 1 이책에서 종속물주입 이라는용어를사용한이유 2 프라미스인터페이스와 $q 서비스객체 5 01 서버와통신하기 $http 서비스를사용한통신 단위테스트실시 REST 기반의리소스사용하기 $q와프라미스 응답가로채기 보안고려사항 지시어 지시어와 HTML 유효성검사 API 개요 정리 그밖의사안 $location AngularJS 모듈메소드 $on, $emit, $broadcast 를사용하여스코프간통신하기 80

16 3.4 쿠키 국제화와지역화 HTML 안전화와 Sanitize 모듈 총정리와레시피 jquery의 Datepicker를캡슐화하기 팀목록애플리케이션 ( 필터링과컨트롤러통신 ) AngularJS로파일올리기 Socket.IO 사용하기 간단한페이지구분서비스 서버를이용한작업과로그인 맺음말 130

17 들어가기전에 필수용어와개념정리 종속물주입 (Dependency Injection) 01 종속물주입은하드코딩한필요기능 (depencency, 이것은 결합도 가아님 ) 을제 거 / 해제하거나변경할수있도록적용하는소프트웨어디자인패턴이다. 예컨대플러그인을동적으로로딩하거나테스트단계에서스텁객체나목 mock 객체를선택또는제품화단계에서실제객체를선택하는작업에종속물주입패턴을적용하면수월해진다. 종속물주입패턴은대상의요건을파악해서종속요소 ( 객체, 값등 ) 를대상에자동으로주입한다. 종속물조회 dependency lookup 라는패턴도있는데, 이패턴은종속물주입을위한순과정과역과정에해당한다. 종속물조회는호출객체가컨테이너객체에특정이름이나특정타입으로된객체를요청하는패턴이다. 종속물주입패턴은최소한다음세요소로구성된다. 종속된소비객체 consumer 구성요소의종속물 ( 인터페이스콘트랙트로정의됨 ) 을선언하는코드 주입객체 injector02 종속객체안에는작업수행에필요한소프트웨어구성요소를작성한다. 주입객체는 01 출처 : Wikipedia의 Dependency Injection 페이지 02 프로바이더 나 컨테이너 라고도하며, 이객체안에종속물을넣어서주입한다. 이객체는요청을받으면주어진종속인터페이스를구현하는클래스를인스턴스화한다. 들어가기전에필수용어와개념정리 1

18 어떤구체클래스 03 가종속객체의요건에부합하는지를판단하여, 조건에부합하 는구체클래스를종속객체에제공한다. 기존방식으로소프트웨어를개발할때는어떤구체클래스를사용할지를종속객체가스스로판단했다. 그러나종속물주입패턴에서는주입객체에이판단이위임되므로, 주입객체는종속콘트랙트인터페이스를적절하다고판단한구체클래스로교체할수있다. 이것은컴파일이아니라런타임시에이뤄진다. 이책에서 종속물주입 이라는용어를사용한이유 dependency: 종속물. 기본적으로는 종속객체 를뜻하지만언어와문맥에따라종속객체, 종속라이브러리, 종속함수, 종속리소스, 종속모듈등현재객체의기능수행에필요하여컨테이너로캡슐화해주입할수있는모든대상을지칭할수있다. 기존에는 dependency를 의존성 이나 의존관계 로번역했는데, 이러한용어는매우막연하고두리뭉실한뜬구름같아서용어의의미를제대로설명할수없었다. 프로그래밍의흐름은대충알지만이런용어의개별적인개념을정확하게알지못하고넘어간다면, 후에더욱복잡한기술로진화하고많은파생개념이생길수록혼란이심해질것이다. 의존성 이라고하면의존하는 성질 을뜻한다. 따라서상위코드에꼭필요한부품과도같은하위코드를 의존성 ' 이라고표현해서는그의미를제대로전달할수없다. 이것은 IT 기술분야에서용어를모든문맥에가장부합하게끔고민을거쳐선택했다기보다는, 마치영어사전을뒤졌을때나오는단순한사전적의미중하나를고른듯한성의없는용어선택이아닐수없다. 종속되는객체나모듈은주입될 03 추상클래스의반대개념으로일반적인클래스를말한다. 인스턴스를만들수있는클래스로, 추상메소드를가질수없다. 들어가기전에필수용어와개념정리 2

19 대상으로서구체적인실체이지 성질 이나 관계 가아니다. 종속물을주입하면의존성이나의존관계가형성되는것이지, 의존성이나의존관계자체를주입하는것이아니다. 그리고 종속객체 라는용어를사용하면종속된관계의대상이객체만으로한정돼버리기때문에적절하지않다. 문맥과기술에따라달라지겠지만, 적어도이책에서는 dependency가단지종속객체뿐아니라종속모듈, 서비스, 함수등을통칭하기때문에포괄적인뜻을담은 종속물 로번역했다. 물론자바스크립트에서도모든것 ( 함수, 모듈, 서비스등 ) 을아우르는개념이객체이므로종속객체라는표현도괜찮기는하지만설명할때는모듈, 서비스라고표기하지 모듈객체, 서비스객체 라는식으로표기하지않기때문에상위개념으로한정되는느낌을주지않기위해서 종속물 을택한것이다. 1. 이것을 의존- 으로번역하면안되는이유 : dependency를의존, 의존성, 의존관계, 의존물등으로번역하면 dependent ~ 라는표현이자주병행등장하는데이것을일관성에따라 의존하는 ~ 으로번역해야하므로잘못된뜻이돼버린다. 왜냐하면 dependent function은종속된함수인데, 오히려이함수를 의존하는함수 로해석하게되므로틀린의미가된다. 반면에 종속된함수 라고해석하면의미가맞으므로모든문맥에서일관되게올바른뜻을가지려면반드시 종속 으로만번역해야하는것이다. 그리고개념을설명하는영상이나도표자료를검색해보면 dependency injection 개념을설명할때는항상벤다이어그램을사용해포함관계를나타내는데, 이를보더라도역시 종속 이더욱적절하다. 이것을거부감없이이해하려면기존에널리쓰이던 의존성주입 이라는용어의편견을떨쳐야한다. 2. 이것을 부속- 으로번역하면안되는이유 : 부속 과 종속 은의미상비슷하다. 그러나다음과같은미묘하고도중대한의미적차이가있다. 부속 : 주된사물이나기관에딸려서붙음 ( 공간적 / 위치적소속과기능적인구성요소임을동시에뜻함 ). 들어가기전에필수용어와개념정리 3

20 종속 : 자주성이없이주가되는것에딸려붙음 ( 공간적 / 위치적뉘앙스에비해 주종관계에서필요에따라주가이용할수있는종의역할을한다는의미가 더강하다 ). 따라서 종속 은주 ( 주입객체 ) 가있어야호출되며종속된종 ( 종속객체 ) 은주에게필요한기능을제공한다는뜻에서 종속 을사용하는것이올바르다. 물론, 부속 ' 에도미약하나마기능적인구성요소라는의미가있지만, 부속 은 종속 에비해의존적인관계형성에있어훨씬약한뉘앙스를풍기는낱말이므로 종속 을택했다. 3. injection을 삽입 으로번역하는것이바람직하지않은이유 : 국어사전에있는의미를그대로생각하면 injection은액체나사상등을주입할때쓰는말이므로, 종속물을현객체로집어넣는이상황에서 삽입 (insertion) 이사전적의미로보아바른용어선택인것처럼보일수있다. 그러나 IT 분야의각종개념을설명하는표현이나용어를정할때는 메타포 기법을사용한다. 메타포란현실세계 ( 일상, 제품, 상식, 각학문분야등 ) 에서흔히쓰이는낱말과표현에빗대는것을말한다. 메타포에따른용어와표현을사용하면개발자는어떠한개념이든쉽게이해할수있기때문이다. 중요한것은, 어차피영어권국가에서만든용어고새로운개념및용어가현재에는없지만미래의어느순간기존용어에서분리 / 파생되거나신생될수있기에영문용어를실정에맞게의역하되가능하면일대일로대응시켜정립하는것이바람직하다. 미래엔 insertion이라는용어가새로생겨나병용될수도있기때문에 injection을굳이사전적의미로만고집해 삽입 으로번역할것이아니라상위객체에종속객체를주사기로밀어넣는것에빗댄메타포에의한용어를채택하는것이좋다. 그렇게하면 dependency injection이라는영문용어를보고 주입 을바로떠올릴수있고 종속물주입 이라고하면곧바로 dependency injection 을떠올릴수있다. 만약 종속물삽입 이라고용어를정한다면그걸들은사람이영문을생각해내 들어가기전에필수용어와개념정리 4

21 야할상황 ( 외국인개발자와협업등 ) 이닥쳤을때 dependency insertion이던가? 하는혼동을초래할수도있다. 삽입 을주장하기위해 객체 를굳이 고체 라고여길필요는없다 ( 심지어현실의물질도아니다 ). 관점에따라객체는 액체 일수도있고 기체 일수도있다. 핵심은결코 고체 로한정할근거가없다는데있다. 용어를정하기전에는반드시비슷한여러단어중에서그단어를원어민필자가사용한데에는나름의이유가있게마련이라는생각을해봐야한다. 참고 ) dependency injection 패턴에는구성원인 injector 개념이함께등장한다. injector는 주입객체 로번역해야하며, 프로바이더 ( 프로바이더객체 ) 나컨테이너 ( 컨테이너객체 ) 라고도한다. 프라미스인터페이스와 $q 서비스객체 프라미스프라미스는비동기적으로수행되는작업의결과를대변하는객체와교류하는인터페이스다. 프라미스 promise 는하나의작업완료로반환된결과값을대변한다. 프라미스는세가지 (unfulfilled: 미이행, fulfilled: 이행완료, failed: 실패 ) 중하나의상태에처할수있다. 프라미스가 fulfilled( 이행완료 ) 상태나 failed( 실패 ) 상태면프라미스의값은절대로변해선안되며, 자바스크립트에서의값이나기본타입 / 객체 ID와마찬가지로변할수없다. 프라미스의 변할수없는 특징덕에리스너에예상치못한기능변화가생길수있는부작용이예방되며, 프라미스를다른함수에전달해도호출객체에영향이미치지않는다. 이것은 호출하는객체 의변수가 호출되는객체 에의해변경될염려없이기본타입을함수에전달할수있는것과도같다. 함수가값을반환하는것이불가능하거나차단하지않으면, 예외가통지될때그 함수는값대신프라미스를반환하면된다. 프라미스는함수가최종적으로제공할 들어가기전에필수용어와개념정리 5

22 가능성이있는반환값이나통지예외를대변하는인터페이스객체다. 지연을극복 하기위해프라미스를원격객체의프록시로사용할수도있다. $q 객체 $q: 크리스코우얼 Kris Kowal 의 q 도구 04 에들어있는프라미스 API와지연 API에서착안해만든 AngularJS의서비스객체중하나지만, AngularJS의 $q 객체는크리스코우얼의 q와는차이가있다. $q 서비스의종속물은 $rootscope 서비스다. $q 객체의메소드로는다음과같은것들이있다. 1. all( 프라미스배열 ) 메소드모든입력프라미스가해독될때해독되는다수의프라미스를하나의프라미스 로묶는메소드다. 매개변수 : { Array.< 프라미스 > } 프라미스배열 반환값 : { 프라미스 } - 값배열로해독될하나의프라미스를반환한다. 사용되는값배열의각값은같은인덱스에위치한프라미스에일대일대응된다. 프라미스중어느하나라도 거부됨 으로해독되면반환되는프라미스역시 거부됨 상태 ( 이벤트 ) 로해독된다. 2. defer( ) 메소드 나중에끝마칠작업을대변하는지연객체를생성한다. 반환값 : { Deferred } - deferred 의새로운인스턴스를반환한다. 04 https://github.com/kriskowal/q 들어가기전에필수용어와개념정리 6

23 3. reject( 사유 ) 메소드 특정사유로거부됨 으로해독될프라미스를생성한다. reject API는프라미스체인에서 거부됨 을전달할때사용한다. 프라미스체인의맨끝에있는프라미스를처리할때는신경쓸필요가없다. 지연 / 프라미스구조를이미잘알고있는 try/catch/throw 구조와비교하면, reject 메소드를자바스크립트의 throw 키워드라고생각하면된다. 그리고에러통지는 throw문대신에 reject 메소드를통해생성된 거부됨 상태를반환하는식으로현재의프라미스에서파생된프라미스에전송한다. promiseb = promisea.then(function(result) { // 성공할경우의코드를여기넣자 - 기능을수행하고 // promiseb를기존값이나새값으로해독할것 return result; }, function(reason) { // 에러할경우의코드를여기넣자 - 가능하면에러를처리하고 // promiseb를 newpromiseorvalue로해독하든지, // promiseb에 ' 거부됨 ' 을전달할것 if (canhandle(reason)) { // 에러를처리하고복원하는코드를여기넣을것 return newpromiseorvalue; } return $q.reject(reason); }); 매개변수 : { 사유 } - 거부사유를대변하는상수, 메시지, 예외, 객체중하나다. 반환값 : { 프라미스 } - 특정사유로거부됨 으로이미해독이완료된프라미 스를반환한다. 들어가기전에필수용어와개념정리 7

24 4. when( 값 ) 메소드값이나 then 메소드가들어있는프라미스로산출될가능성이있는객체를 $q 객체안에캡슐화한다. when 메소드는프라미스가들어있을지없을지불확실한객체를처리할때나프라미스의출처를신뢰할수없을때사용하면적절하다. 매개변수 : { 값 } - 값또는프라미스다. 반환값 : { 프라미스 } - 매개변수로전달한값이나프라미스에대한프라미스 를반환한다. 들어가기전에필수용어와개념정리 8

25 1 서버와통신하기 AngularJS 기초편 ( 한빛미디어, 2013) 에서는 AngularJS 애플리케이션을구성하는방법, AngularJS의다양한부분이서로연동되는원리, AngularJS를사용한템플릿의동작원리를알아보았다. 그내용만으로도세련된애플리케이션을만들수는있지만, 대부분은클라이언트측애플리케이션에그쳤다. AngularJS 활용편 에서는 AngularJS 기초편 에서배운내용을바탕으로확장된기능을배울것이다. AngularJS에대한기초적인지식이없다면, AngularJS 기초편 을꼭학습하길바란다. AngularJS 기초편 에서 $http 서비스를사용한서버측통신에대해서설명했는 데, 이장에서는 $http 서비스를응용해실무애플리케이션을제작하는방법에대 해알아볼것이다. AngularJS를사용해서버와통신하는방법 ( 추상화의최하위계층수준에서그리고래퍼 wrapper 를이용한방법 ) 을알아보자. 또한, AngularJS의내장캐시시스템을사용해애플리케이션의실행속도를높이는방법에대해서도알아볼것이다. SocketIO를사용해 AngularJS 실시간애플리케이션을개발하는방법은지시어로 SocketIO를래핑 ( 캡슐화 ) 하는 4장예제를참고하면되므로, 이장에서는 SocketIO에대해서는다루지않겠다. 1.1 $http 서비스를사용한통신 AJAX 애플리케이션에서 XMLHttpRequest를사용해서버에요청하는일반적인절차는 XMLHttpRequest 객체로핸들을가져와서요청을서버에보내고에러코드를검사한후최종적으로서버에서받은응답을처리하는것이다. 이과정을코드로작성하면다음과같다. 1 장서버와통신하기 9

26 var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readystate == 4 && xmlhttp.status == 200) { var response = xmlhttp.responsetext; } else if (xmlhttp.status == 400) { // 또는 4 계열의어떤상태코드든 // 상관없음. // 여기에적절한에러처리코드를넣자. } }; // 연결설정 xmlhttp.open("get", "http://myserver/api", true); // 요청보내기 xmlhttp.send(); 앞의코드에서보듯이 XMLHttpRequest 를사용한서버요청방식은간단하고일반 적이면서자주반복되는작업임에도작성해야할코드는복잡하다. 반복적으로해야 할작업이라면래퍼를작성하거나라이브러리를사용하는것이적절할때가많다. AngularJS의 XHR API(XMLHttpRequest) 는프라미스 Promise 인터페이스를따른다. XHR은비동기메소드호출이므로서버가언제응답을반환할지정확한날짜와시간을알수없다 ( 즉시반환하기도한다 ). 프라미스인터페이스는서버의응답이처리될방식을확실히보증하므로, 프라미스는예측가능한방식으로사용될수있다. 서버에서사용자정보를가져오는코드를작성해보자. XHR API 가 /api/user 에 서이용가능하고 URL 매개변수로 id 를받는다면, AngularJS 의코어 $http 를사 용한 XHR 요청은다음과같이작성할수있다. 1 장서버와통신하기 10

27 $http.get('api/user', { params : { id : '5' } }).success(function(data, status, headers, config) { // 여기엔성공했을때수행할작업을넣자. }).error(function(data, status, headers, config) { // 여기엔에러처리를넣자. }); jquery 개발경험이있다면 AngularJS 와 jquery 가비동기요청을주고받는방식 이비슷하다는것을알수있을것이다. 앞의예제에사용한 $http.get 메소드는 AngularJS의코어 $http 서비스에들어있는편의메소드 convenience method 중하나다. 마찬가지로, AngularJS를이용해같은 URL 매개변수와 POST 데이터를사용한 POST 요청을하려면다음과같이작성하면된다. var postdata = { text : ' 긴 blob 타입의문자열 ' }; // 다음행이 params를통해 URL에덧붙여져서, // /api/user?id=5로의포스트요청이만들어진다. var config = { params : { id : '5' } }; $http.post('api/user', postdata, config).success( function(data, status, headers, config) { // 여기엔성공시에수행할작업을넣자. }).error(function(data, status, headers, config) { // 여기엔에러처리를넣자. 1 장서버와통신하기 11

28 }); 다음에나열한것외에도일반적인요청타입에는대부분이와비슷한편의메소드 가있다. GET HEAD POST DELETE PUT JSONP 부가요청옵션설정 다음과같은상황이라면내장된표준요청옵션만으로는충분치않다. 요청에권한부여헤더를추가할때 요청에대한캐시처리방식을변경할때 보내는요청이나받는응답을일정한설정방식으로변환할때 위와같은상황에서는환경설정을위한옵션객체를통해요청을설정할수있다. 앞의예제에서는 config 객체를사용해서 URL 옵션매개변수를지정했다. 그런데앞에서살펴본 GET 방식과 POST 방식에도편의메소드가있다. 그러한편의메소드의호출방법은다음과같다. $http(config) 앞의메소드를호출하는기본적인형식을의사코드 pseudo-code 로나타내면다음과 같다. 1 장서버와통신하기 12

29 $http({ method: 문자열, url: 문자열, params: 객체, data: 문자열또는객체, headers: 객체, transformrequest: function transform(data, headersgetter) 또는함수배열, transformresponse: function transform(data, headersgetter) 또는함수배열, cache: 부울값또는캐시객체 timeout: 숫자, withcredentials: 부울값 }); GET과 POST를비롯한편의메소드안에서메소드가설정되므로개발자가직접지정하지않아도된다. config 객체는 $http.get 메소드와 $http.post 메소드에마지막인자로전달되므로편의메소드중어느것을사용해도 config 객체를활용할수있다. 다음과같은키를설정한 config 객체를전달하면이미이뤄진요청을수정할수있다. method GET 이나 POST 같이 HTTP 요청타입을나타내는문자열 url 요청되는리소스의절대 URL 이나상대 URL 을나타내는문자열 params 다음과같이 URL 매개변수로변환될키와값을나타내는문자열-문자열객체 ( 정확히말하면맵 ) [{ 키1: ' 값1', 키2: ' 값2'}] 1 장서버와통신하기 13

30 앞의코드는다음과같이변환되어 URL 뒤에붙는다.? 키 1= 값 1& 키 2= 값 2 값에문자열이나숫자대신객체를사용하면그객체는 JSON 문자열로변환된다. data 요청메시지데이터로써보낼문자열이나객체 timeout 요청이타임아웃처리되기전의밀리초단위의대기시간 다음절에서설정할수있는옵션몇가지를더설명하겠다 HTTP 헤더지정 AngularJS에는보내는모든요청에적용되는기본헤더가있는데, 그중일부는다음과같다. 1. Accept: application/json, text/plain, 2. X-Requested-With: XMLHttpRequest 특수헤더를설정하고싶을땐다음과같은두가지방법을이용하면된다. 보내는모든요청에헤더를적용하는첫번째방법은특수헤더를 AngularJS의기본헤더에포함시키는것이다. 이러한기본헤더는 $httpprovider.defaults. headers 환경설정객체에서설정한다. 그리고설정단계는보통애플리케이션을설정하는 config 부분에서이뤄진다. 따라서모든 GET 요청을대상으로 ' 정보수집금지 (DO NOT TRACK)' 를설정하되 Requested-With 헤더를모든요청에서삭제하려면다음과같이작성하면된다. 1 장서버와통신하기 14

31 angular.module('myapp',[]).config(function($httpprovider) { // AngularJS의기본헤더인 X-Request-With를삭제. delete $httpprovider.default.headers.common['x-requested-with']; // 모든 GET 방식요청을대상으로 'DO NOT TRACK'( 정보수집금지 ) 를지정 $httpprovider.default.headers.get['dnt'] = '1'; }); 특정요청들만을대상으로할때는특수헤더를설정한다. 다만기본헤더를사용하지않으려면특수헤더를 config 객체에포함시켜 $http 서비스로전달하면된다. 개발자정의헤더는다음과같이 URL 매개변수와함께두번째매개변수에넣어 GET 요청에전달한다. $http.get('api/user', { // Authorization 헤더를설정. 실제애플리케이션이라면, // 서비스에서인증토큰을가져와야할것이다. headers: {'Authorization': 'Basic Qzsda231231'}, params: {id: 5} }).success(function() { // 여기엔성공하면수행할코드를넣자. }); 애플리케이션내부에서인증을처리하는방법을보여주는완전한예제는 4 장을참 고하기바란다 응답을캐시에저장 AngularJS에는 HTTP GET 요청에즉시사용할수있는간단한캐시시스템이있다. 이캐시시스템은모든요청에사용되지않게기본으로설정되어있는데, 다음과같이작성하면요청에캐시를사용하도록설정할수있다. 1 장서버와통신하기 15

32 $http.get('http://server/myapi', { cache: true }).success(function() { // 여기엔성공하면처리할작업을넣자. }); 앞의코드처럼캐시를사용하도록설정하면다음과같은장점이있다. 첫째, AngularJS 는서버에서받은응답을캐시에저장해두었다가같은 URL 로 요청을다시보낼때캐시에저장해둔응답을반환한다. 둘째, 캐시는신속하고영리해서동시에한 URL 에여러요청을해도하나의요 청만서버로전송하며, 그요청에대한응답만반환한다. 그러나이런점은사용성관점과상충할수도있다. 사용자입장에선이전의결과가일단표시된후에새로운결과가불쑥표시되기때문이다. 예를들어, 사용자가어떤항목을막클릭하려던찰나에그항목이갑자기변경될수도있다. 캐시가보낸응답이든서버가보낸응답이든비동기적인성질은같으므로, 당연히코드는처음요청을수행했을때와똑같은동작을할수밖에없다 요청변환과응답변환 AngularJS 는 $http 서비스를통해이뤄지는모든요청과응답을대상으로다음과 같은기본적인변환을적용한다. 요청변환 요청된 config 객체의 data 속성에객체가들어있으면, 그객체를 JSON 형식 으로직렬화한다. 1 장서버와통신하기 16

33 응답변환 XSRF 접두어가붙어있으면그접두어를떼어낸다. JSON 응답이감지되면그 응답을 JSON 파서로역직렬화한다. 변환이적용되는것을원치않거나자신의변환을추가하려면 config 객체안에함수를넣어전달하면된다. 이함수는 HTTP 요청 / 응답의내용, 헤더를가져와서직렬화하고수정한후응답한다. 이런 config 함수는 transformrequest 키와 transformresponse 키를사용해설정한다. 두키는모듈의 config 함수에들어있는 $httpprovider 서비스를사용해설정한다. 그렇다면 transformrequest 키와 transformresponse 키는언제사용할까? jquery 작업처리방식에더적합하게설정된서버가있다고하자. 이서버는 POST 요청데이터를 JSON 형식 {key1: val1, key2: val2} 이아니라문자열형식 {key1=val1&key2=val2} 을기대한다. 요청시마다받은문자열을목적에따라수정하거나 transformrequest 호출을개별적으로추가할수도있지만, 필자는보내는모든호출을 JSON 형식에서문자열형식으로변환되도록범용 transformrequest를추가하였다. 작성한코드는다음과같다. var module = angular.module('myapp'); module.config(function($httpprovider) { $httpprovider.defaults.transformrequest = function(data) { // jquery의 param 메소드를이용해서 // JSON 데이터를문자열형식으로변환하자. return $.param(data); }; }); 1 장서버와통신하기 17

34 1.2 단위테스트실시 앞에서 $http 서비스의사용법과다양한설정방법을알아보았다. 그러나단위테 스트를작성하고테스트가원활히돌아가는지확인하려면어떻게해야할까? 계속말하지만 AngularJS 는테스트를염두하고설계된프레임워크이므로, 단위 테스트에서직접올바른요청이이뤄지는지여부를테스트하고응답이처리되는 시점과방식까지도제어할수있는목백엔드 mocked backend 가있다. 그럼, 서버에요청하고데이터를가져와서해당스코프 scope 에서데이터가뷰 view 에특 정한형식으로표시되게하는컨트롤러를어떻게단위테스트하면되는지알아보자. NamesListCtrl 은하나의용도로사용하는아주간단한컨트롤러다. 이용도는필 자가작성한 names API 를호출해서해당스코프에모든이름을저장하는것이다. function NamesListCtrl($scope, $http) { $http.get('http://server/names', {params: {filter: none }}). success(function(data) { $scope.names = data; } ); } 앞의코드를어떻게단위테스트할까? 단위테스트는다음과같은사항이가능해 야한다. NamesListCtrl 는모든종속물을검색해서제대로주입할수있어야한다. NamesListCtrl 는로딩되는즉시서버에요청해서이름을가져와야한다. NamesListCtrl 는받은응답을해당스코프의 names 변수에저장해야한다. 1 장서버와통신하기 18

35 테스트안에컨트롤러를생성하고, 그안에스코프와가짜 HTTP 서비스를주입하는방법도있지만, AngularJS가제품코드에적용하는방식대로테스트를생성하는방법이좋다. 이방법은훨씬복잡하지만사용하는것을권장한다. 그이유는다음코드를보면알수있다 ( 소스코드주석을잘살펴보기바란다 ). describe('nameslistctrl', function(){ var scope, ctrl, mockbackend; // AngularJS가다음을테스트안에주입한다. beforeeach(inject(function(_$httpbackend_, $rootscope, $controller) { // 다음은가상의백엔드이므로, 요청과서버의응답을제어할수있다. mockbackend = _$httpbackend_; // 컨트롤러가생성되면다음호출이시작될것이므로 // 컨트롤러생성에앞서예상형식을지정. mockbackend.expectget('http://server/names?filter=none'). respond(['brad', 'Shyam']); scope = $rootscope.$new(); // AngularJS가제품화코드에적용하는방식대로컨트롤러를생성. ctrl = $controller(phonelistctrl, {$scope: scope}); })); it(' 로딩되면서버에서이름을가져와야함 ', function() { // 초기에이요청은응답을반환하지않았음. expect(scope.names).tobeundefined(); // 현재보내는모든요청에대한응답을반환하라고가상백엔드에게명령 mockbackend.flush(); // 이제 names 를스코프상에서지정해야함. 1 장서버와통신하기 19

36 expect(scope.names).toequal(['brad', 'Shyam']); }); }); 1.3 REST 기반의리소스사용하기 $http 서비스는하위수준으로구현되어있어 XHR 요청을할수있으면서도많은부분을제어할수있고유연성도뛰어나다. 그러나대체로개발자가처리하는것은개인에대한세부속성, 개인객체, 신용카드객체같이특정속성과메소드로캡슐화된객체와객체모델이다. 이렇게수정할수있는것이제한적일경우, 객체모델을파악해서표현하는자바 스크립트객체를작성할수있다면좋지않을까? 상태는서버에그대로유지된채 save 나 update 같은자바스크립트객체의속성들만수정할수있다면어떨까? $resource 를사용하면이러한기능을만들수있다. AngularJS 리소스를사용하 면객체모델을정의할수있으며다음과같은것들을지정할수있다. 리소스의서버측 URL XHR 요청에서주로볼수있는매개변수의타입 객체모델의특정기능 ( 예 : 신용카드의 charge( ) 메소드 ) 과비즈니스로직을캡슐화하는부가메소드 (get, save, query, remove, delete 메소드는기본적으로들어있다 ) 응답의예상타입 ( 배열또는객체 ) 헤더 1 장서버와통신하기 20

37 Angular 리소스는어떤경우에사용하나? Angular 리소스는서버측이 REST 방식으로동작할때만사용해야한다. 이장의끝부분에서살펴볼신용카드예제는다음과같은특징이있다. 1. /user/123/card로 GET 요청을보내면 123이라는사용자의신용카드목록이반환된다. 2. /user/123/card/15로 GET 요청을보내면 123이라는사용자의 ID가 15인신용카드가반환된다. 3. POST 데이터안의신용카드정보와함께 /user/123/card로 POST 요청을보내면 123 사용자의새신용카드가생성된다. 4. POST 데이터안의신용카드정보와함께 /user/123/card/15로 POST 요청을보내면 123 사용자의 ID가 15인신용카드의정보가보낸정보로업데이트된다. 5. /user/123/card/15로 DELETE 요청을보내면 123 사용자의 ID가 15인신용카드가삭제된다. 개발자의필요에따라서버에질의할수있는객체를제공할뿐만아니라, $resource 를사용하면반환객체를가지고마치영구저장된데이터모델처럼작업하고, 수 정하고, 영구저장되게요청할수도있다. ngresource 는별도의옵션모듈이다. 따라서 ngresource 모듈을사용하려면다 음과같이해야한다. 작업하는기본자바스크립트파일안에 angular-resource.js 파일을인클루딩한다. 모듈종속물선언코드안에 angular.module('mymodule', ['ngresource']) 와같은식으로 ngresource를포함시킨다. 필요하면 inject $resource를사용한다. ngresource 메소드를사용해리소스를생성하는방법을살펴보기전에, 기본 $http 서비스를사용하여리소스를생성하는방법부터알아보자. 신용카드예제의리소 1 장서버와통신하기 21

38 스는신용카드를가져오고질의, 저장할수있어야하며신용카드결제도가능해야 한다. 이러한기능을구현하는첫번째방법은다음과같다. myappmodule.factory('creditcard', [ '$http', function($http) { var baseurl = '/user/123/card'; return { get : function(cardid) { return $http.get(baseurl + '/' + cardid); }, save : function(card) { var url = card.id? baseurl + '/' + card.id : baseurl; return $http.post(url, card); }; } ]); }, query : function() { return $http.get(baseurl); }, charge : function(card) { return $http.post(baseurl + '/' + card.id, card, { params : { charge : true } }); } 아니면, 두번째방법으로다음과같이애플리케이션전반에리소스를반영하는 Angular 서비스를간단히작성할수도있다. 1 장서버와통신하기 22

39 myappmodule.factory('creditcard', ['$resource', function($resource) { return $resource('/user/:userid/card/:cardid', {userid: 123, cardid: {charge: {method:'post', params:{charge:true}, isarray:false}); }]); 이제 AngularJS 주입객체에 CreditCard를요청할때마다 Angular 리소스를가져오는데, 이리소스엔기능이시작되는메소드몇개가기본으로들어있다. Angular 리소스에포함된각메소드가무엇이고어떤방식으로동작하는지표 1-1로정리했다. 이것을참고하면서버를어떻게설정해야할지알수있다. 표 1-1 신용카드리소스 리소스함수방식 URL 예상반환타입 CreditCard.get({id: 11}) GET /user/123/card/11 Single JSON CreditCard.save({}, ccard) POST /user/123/card (post 데이터 ccard와함께 ) Single JSON CreditCard.save({id: 11}, ccard) POST /user/123/card/11 (post 데이터 ccard와함께 ) Single JSON CreditCard.query( ) GET /user/123/card JSON Array CreditCard.remove({id: 11}) DELETE /user/123/card/11 Single JSON CreditCard.delete({id: 11}) DELETE /user/123/card/11 Single JSON 좀더확실한이해를위해신용카드예제를보자. // CreditCard 서비스가여기에주입된다고가정하자. // GET 요청을보내는서버 /user/123/card 에서컬렉션을가져올수있다. 1 장서버와통신하기 23

40 var cards = CreditCard.query(); // 하나의카드를가져와서콜백함수에서도사용할수있다. CreditCard.get({ cardid : 456 }, function(card) { // 각항목은 CreditCard의인스턴스다. expect(card instanceof CreditCard).toEqual(true); card.name = "J. Smith"; // GET 이외의방식이그인스턴스에매핑된다. card.$save(); // 개발자정의메소드도매핑된다. card.$charge({ amount : 9.99 }); // 데이터 {id:456, number:'1234', name:'j. Smith'} 와함께 // POST 요청을 /user/123/card/456?amount=9.99&charge=true로보낸다. }); 기능의대부분이앞의예제에들어있으므로, 중요한부분만하나씩파헤쳐보자 선언 $resource를선언하려면그냥적절한매개변수를전달하면서주입된 $resource 함수를호출하면된다. 어떻게주입해야할지모른다면 AngularJS 기초편 을읽어보기바란다. $resource 함수는필수인자 1 개와옵션인자 2 개를받는다. 필수인자는리소스의 URL 이고, 옵션인자는기본매개변수와리소스에설정하고자하는부가동작이다. URL 매개변수는매개변수형태로표기돼있다. 앞에붙은콜론 (:) 은매개변수임을나타낸다. 즉, :userid는 userid 매개변수의텍스트로대체되며, :cardid는 cardid 매개변수의값으로대체된다. URL 매개변수가전달되지않으면 URL 매개변수는빈문자열로대체된다. 1 장서버와통신하기 24

41 두번째매개변수는각요청과함께전달될기본매개변수를처리한다. 이예제에선 userid에상수 123을전달했다. cardid 매개변수는더욱중요하다. 이것은서버에서반환된객체를사용하고그객체의 $save 같은메소드를호출하면 cardid 필드가객체의 id 속성에서선택될것임을나타낸다. 세번째인자는개발자정의리소스를공개할각종메소드다. 이에대해서는다음 절에서자세히알아볼것이다 개발자정의메소드 $resource 를호출할때전달할세번째인자는리소스에공개하고자하는부가메 소드들이다. 신용카드예제는세번째인자로 charge 메소드를전달했다. charge 메소드는객체안에서공개할메소드명을키로사용해서설정하면된다. 이설정을위해서는 GET이나 POST 같은요청방식, 요청안에포함시켜전달해야하는매개변수 ( 신용카드예제에선 charge=true), 반환된결과가배열인지아닌지여부 ( 신용카드예제에선배열이아님 ) 를지정해야한다. 모두지정했으면 CreditCard. charge( ) 함수를언제든호출해도된다. 실생활에서는사용자가결제할때마다호출될것이다 콜백은꼭필요할때만사용하자세번째로중요한것은리소스호출의반환타입이다. CreditCard.query( ) 호출을다시살펴보자. 콜백안에신용카드를지정하지않고신용카드의변수를직접지정했음을알수있다. 비동기서버요청으로그코드가과연돌아가기는할까? 코드가돌아가는지아닌지를걱정하는것은당연하지만, 코드는실제로정확하고, 잘돌아간다. CreditCard.query( ) 호출코드에서 AngularJS 는참조 ( 예상반환 1 장서버와통신하기 25

42 타입에따라객체일수도있고배열일수도있음 ) 를할당했는데, 이참조는나중에 서버요청이반환될때내용이할당된다. 그때까지객체는빈상태로유지된다. AngularJS 애플리케이션에서가장일반적인흐름은서버에서데이터를가져와서변수에할당하고그변수를템플릿에표시하는것이므로, 이러한단축방법도괜찮다. 컨트롤러코드에서는단지서버를호출하고적절한스코프변수에반환값을할당하여값이반환되면템플릿이그값을표시하게하면된다. 이방법은원하는비즈니스로직이반환값을이용해실행되는경우에는통하지않 는다. 이럴때는 CreditCard.get( ) 함수안에서쓰이는콜백을이용해야한다 간소화된서버측작업 단축반환타입과콜백중어느것을사용하든지반환객체에대해알아야할몇가 지가있다. 반환값은기존의평범한자바스크립트객체가아니라사실상 resource 타입의객체다. 그래서반환값에는서버가반환하는값뿐만아니라 $save( ) 와 $charge( ) 같은부수적인기능도들어있다. 결과적으로데이터가져오기, 수정하기, 서버에수정내용저장하기 (CRUD 애플리케이션의가장일반적인기능 ) 같은서버측기능을쉽게수행할수있다 ngresource 단위테스트하기 ngresource는캡슐화모듈이며, $http 코어 AngularJS를기반으로한다. 따라서단위테스트방법도같다. AngularJS 기초편 의 $http 서비스에서살펴봤던단위테스트예제와방법이거의다르지않다. 단지리소스에의해이뤄지리라예상되는최종요청만파악해서가상의 $http 서비스에전달하면되고, 나머지는전부똑같다. 앞의코드를대상으로한테스트는다음과같다. 1 장서버와통신하기 26

43 describe(' 신용카드리소스 ', function() { var scope, ctrl, mockbackend; beforeeach(inject(function(_$httpbackend_, $rootscope, $controller) { mockbackend = _$httpbackend_; scope = $rootscope.$new(); // CreditCard 리소스가컨트롤러에사용된다고전제함. ctrl = $controller(creditcardctrl, { $scope : scope }); })); it(' 신용카드목록을가져왔어야함 ', function() { // CreditCard.query() 에대한예상호출방식을지정. mockbackend.expectget('/user/123/card').respond([ { id : '234', number : ' ' } ]); ctrl.fetchallcards(); // 처음에이요청은응답을반환하지않았다. expect(scope.cards).tobeundefined(); // 가상의백엔드에게현재보내는모든요청에대한응답을반환하라고 // 명령함. mockbackend.flush(); // 이제신용카드의스코프를설정함. expect(scope.cards).toequaldata([ { id : '234', 1 장서버와통신하기 27

44 number : ' ' } ]); }); }); 이테스트는간단한 $http 단위테스트와매우유사한데사소한차이가하나있다. expect 함수에서간단한 equals 메소드를사용하지않고특수한 toequaldata 호출을사용했다는점이다. expect 함수는기민해서 ngresource가객체에추가하는부가메소드를무시한다. 1.4 $q 와프라미스 이제까지 AngularJS가비동기지연 API를어떤식으로구현하는지살펴봤다. AngularJS가소속된 API를구성하는방식은프라미스 Promise 제안문서를바탕으로한다. 프라미스제안문서에는기본적으로비동기요청에대해다음과같은사항을준수하도록기술되어있다. 비동기요청은반환값대신프라미스를반환해야한다. 프라미스에는 then 함수가있어야한다. 이 then 함수는두개의인자를받는다. 첫번째인자는 resolved( 해독됨 ) 이벤트나 success( 성공 ) 이벤트를처리하는함수고, 두번째인자는 rejected( 거부됨 ) 이벤트나 failure( 실패 ) 이벤트를처리하는함수다. 두함수는결과나거절사유와함께호출된다. 결과가해독되는순간바로앞에서말한두개의콜백함수중하나가반드시호출돼야한다. 대개지연 q 객체를구현한코드는앞의제안문서에기술된방식을따르지만, AngularJS 의 $q 함수구현코드는다음과같은이유로다르다. $q 객체는 AngularJS 를완벽히인식하므로스코프모델과연동된다. 따라서 1 장서버와통신하기 28

45 결과를더욱빠르게전달할수있고 UI의깜빡임과업데이트를줄일수있다. AngularJS 템플릿역시 $q 객체의프라미스를인식하므로, 템플릿은결과값을통지받을프라미스대신에템플릿스스로를결과값처럼처리할수있다. AngularJS에는흔히수행되는비동기작업들에필요한기본적이고가장중요한기능만구현되어있어메모리공간을적게차지하는편이다. 그런데이렇게까지해서대체뭘하려는것일까? 비동기함수를사용하다가맞닥 뜨릴수있는다음과같은일반적인문제를하나살펴보자. fetchuser(function(user) { fetchuserpermissions(user, function(permissions) { fetchuserlistdata(user, permissions, function(list) { // 여기엔표시할데이터리스트로기능을수행하는코드가들어감. }); }); }); 앞의코드는자바스크립트로코딩할때개발자들이처하게되는 절망의피라미드 pyramid of doom 패턴 01 이다. 반환값의비동기적특성이프로그램의동기적요구와대치하다가결국여러함수가포함되는구조로, 현재문맥을파악하기가훨씬힘들어진다. 게다가에러처리에도문제가있다. 에러를처리하는최선의방법은무엇일까? 각단계에서에러를처리할것인가? 그러면지저분해지기까지한다. 이러한앞의코드의문제점을바로잡으려면프라미스제안문서에나온 then 메소드개념을활용해야한다. then 메소드는성공할경우실행할함수와에러가날경우실행할함수를받는데, 두함수를체인화할수있다. 앞의예제에프라미스 API를사용하면다음과같이평탄화 ( 포함구조로겹쳐진함수들을평이한코드로만드는것 ) 할 01 안티패턴중하나로, 계속되는포함관계로코드가복잡해져서개발자에게절망감을준다고하여붙여진이름이다. 1 장서버와통신하기 29

46 수있다. var deferred = $q.defer(); var fetchuser = function() { // 비동기호출후에응답값을전달하면서 deferred.resolve를호출함. deferred.resolve(user); } // 에러가날경우다음을호출함. deferred.reject(' 실패사유 '); // 마찬가지로, fetchuserpermissions과 fetchuserlistdata가처리됨. deferred.promise.then(fetchuser).then(fetchuserpermissions).then(fetchuserlistdata).then(function(list) { // 여기엔데이터리스트를사용한기능수행코드를넣자. }, function(errorreason) { // 어느단계에든에러가있으면한번에처리하는코드를여기에넣자. } ); 앞의코드에서는절망의피라미드문제가해결됐고, 체인화 02 를위한스코프도생겼으며, 에러처리도한군데서이뤄진다. AngularJS의 $q 서비스를인클루딩해서비동기호출을처리하려면이코드를애플리케이션에사용하면된다. 게다가이방식으로작성하면응답을가로채는것도가능하다. 02 마침표로여러함수를일렬로이어붙여, 관련함수들을실행하는방법이다. 1 장서버와통신하기 30

XSS Attack - Real-World XSS Attacks, Chaining XSS and Other Attacks, Payloads for XSS Attacks

XSS Attack - Real-World XSS Attacks, Chaining XSS and Other Attacks, Payloads for XSS Attacks XSS s XSS, s, May 25, 2010 XSS s 1 2 s 3 XSS s MySpace 사건. Samy (JS.Spacehero) 프로필 페이지에 자바스크립트 삽입. 스크립트 동작방식 방문자를 친구로 추가. 방문자의 프로필에 자바스크립트를 복사. 1시간 만에 백만 명이 친구등록. s XSS s 위험도가 낮은 xss 취약점을 다른 취약점과 연계하여

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Verilog: Finite State Machines CSED311 Lab03 Joonsung Kim, joonsung90@postech.ac.kr Finite State Machines Digital system design 시간에배운것과같습니다. Moore / Mealy machines Verilog 를이용해서어떻게구현할까? 2 Finite State

More information

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp 1 0 1.7 6 5 'A ' '/ u 4 4 2 2 ' " JS P 프로그래밍 " A ', 'b ', ' 한 ', 9, \ u d 6 5 4 ' c h a r a = 'A '; 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 < % @ p a g e c o n te n

More information

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f JPA 에서 QueryDSL 사용하기위해 JPAQuery 인스턴스생성방법 http://ojc.asia, http://ojcedu.com 1. JPAQuery 를직접생성하기 JPAQuery 인스턴스생성하기 QueryDSL의 JPAQuery API를사용하려면 JPAQuery 인스턴스를생성하면된다. // entitymanager는 JPA의 EntityManage

More information

wtu05_ÃÖÁ¾

wtu05_ÃÖÁ¾ 한 눈에 보는 이달의 주요 글로벌 IT 트렌드 IDG World Tech Update May C o n t e n t s Cover Story 아이패드, 태블릿 컴퓨팅 시대를 열다 Monthly News Brief 이달의 주요 글로벌 IT 뉴스 IDG Insight 개발자 관점에서 본 윈도우 폰 7 vs. 아이폰 클라우드 컴퓨팅, 불만 검증 단계 돌입 기업의

More information

3 Contents 8p 10p 14p 20p 34p 36p 40p 46P 48p 50p 54p 58p 생명다양성재단 영물이라는 타이틀에 정 없어 보이는 고양이, 날카롭게 느껴지시나요? 얼음이 따뜻함에 녹듯이, 사람에게 경계심 많은 길고양이도 곁을 내어주면 얼음 녹듯이 당신을 바라봅니다. 길 위에 사는 생명체라 하여 함부로 대하지 말아주세요. 싫으면 외면해주세요.

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

View Licenses and Services (customer)

View Licenses and Services (customer) 빠른 빠른 시작: 시작: 라이선스, 라이선스, 서비스 서비스 및 주문 주문 이력 이력 보기 보기 고객 가이드 Microsoft 비즈니스 센터의 라이선스, 서비스 및 혜택 섹션을 통해 라이선스, 온라인 서비스, 구매 기록 (주문 기록)을 볼 수 있습니다. 시작하려면, 비즈니스 센터에 로그인하여 상단 메뉴에서 재고를 선택한 후 내 재고 관리를 선택하십시오. 목차

More information

BACK TO THE BASIC C++ 버그 헌팅: 버그를 예방하는 11가지 코딩 습관

BACK TO THE BASIC C++ 버그 헌팅: 버그를 예방하는 11가지 코딩 습관 Hanbit ebook Realtime 30 C++ 버그 헌팅 버그를 예방하는 11가지 코딩 습관 Safe C++ 블라디미르 쿠스퀴니르 지음 / 정원천 옮김 이 도서는 O REILLY의 Safe C++의 번역서입니다. BACK TO THE BASIC C++ 버그 헌팅 버그를 예방하는 11가지 코딩 습관 BACK TO THE BASIC C++ 버그 헌팅 버그를

More information

C O N T E N T S 목 차 요약 / 1 I. 중남미화장품시장현황 / 3 Ⅱ. 주요국별시장정보 / 9 ( 트렌드 유통망 인증 ) 1. 브라질 / 9 2. 멕시코 / 콜롬비아 / 칠레 / 64 Ⅲ. 우리기업진출전략 / 79 # 첨부. 화장품관

C O N T E N T S 목 차 요약 / 1 I. 중남미화장품시장현황 / 3 Ⅱ. 주요국별시장정보 / 9 ( 트렌드 유통망 인증 ) 1. 브라질 / 9 2. 멕시코 / 콜롬비아 / 칠레 / 64 Ⅲ. 우리기업진출전략 / 79 # 첨부. 화장품관 Global Market Report 17-023 Global Market Report 중남미주요국화장품시장동향과우리기업진출전략 C O N T E N T S 목 차 요약 / 1 I. 중남미화장품시장현황 / 3 Ⅱ. 주요국별시장정보 / 9 ( 트렌드 유통망 인증 ) 1. 브라질 / 9 2. 멕시코 / 29 3. 콜롬비아 / 46 4. 칠레 / 64 Ⅲ. 우리기업진출전략

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

120~151역사지도서3

120~151역사지도서3 III 배운내용 단원내용 배울내용 120 121 1 2 122 3 4 123 5 6 124 7 8 9 125 1 헌병경찰을앞세운무단통치를실시하다 126 1. 2. 127 문화통치를내세워우리민족을분열시키다 1920 년대일제가실시한문화 통치의본질은무엇일까? ( 백개 ) ( 천명 ) 30 20 25 15 20 15 10 10 5 5 0 0 1918 1920 ( 년

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 11 곡선과곡면 01 Spline 곡선 02 Spline 곡면 03 Subdivision 곡면 C n 연속성 C 0 연속성 C 1 연속성 2 C 2 연속성 01 Spline 곡선 1. Cardinal Spline Curve 2. Hermite Spline Curve 3. Bezier Spline Curve 4. Catmull-Rom Spline Curve 5.

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

윈도우즈프로그래밍(1)

윈도우즈프로그래밍(1) 제어문 (2) For~Next 문 윈도우즈프로그래밍 (1) ( 신흥대학교컴퓨터정보계열 ) 2/17 Contents 학습목표 프로그램에서주어진특정문장을부분을일정횟수만큼반복해서실행하는문장으로 For~Next 문등의구조를이해하고활용할수있다. 내용 For~Next 문 다중 For 문 3/17 제어문 - FOR 문 반복문 : 프로그램에서주어진특정문장들을일정한횟수만큼반복해서실행하는문장

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1); void method() 2); void method1() public class Test 3); args) A 제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor

More information

<C3E6B3B2B1B3C0B0313832C8A32DC5BEC0E7BFEB28C0DBB0D4292D332E706466> 11-8140242-000001-08 2013-927 2013 182 2013 182 Contents 02 16 08 10 12 18 53 25 32 63 Summer 2 0 1 3 68 40 51 57 65 72 81 90 97 103 109 94 116 123 130 140 144 148 118 154 158 163 1 2 3 4 5 8 SUMMER

More information

SIGIL 완벽입문

SIGIL 완벽입문 누구나 만드는 전자책 SIGIL 을 이용해 전자책을 만들기 EPUB 전자책이 가지는 단점 EPUB이라는 포맷과 제일 많이 비교되는 포맷은 PDF라는 포맷 입니다. EPUB이 나오기 전까지 전 세계에서 가장 많이 사용되던 전자책 포맷이고, 아직도 많이 사 용되기 때문이기도 한며, 또한 PDF는 종이책 출력을 위해서도 사용되기 때문에 종이책 VS

More information

<B3EDB4DC28B1E8BCAEC7F6292E687770> 1) 초고를읽고소중한조언을주신여러분들게감사드린다. 소중한조언들에도불구하고이글이포함하는오류는전적으로저자개인의것임을밝혀둔다. 2) 대표적인학자가 Asia's Next Giant: South Korea and Late Industrialization, 1990 을저술한 MIT 의 A. Amsden 교수이다. - 1 - - 2 - 3) 계량방법론은회귀분석 (regression)

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

System Recovery 사용자 매뉴얼

System Recovery 사용자 매뉴얼 Samsung OS Recovery Solution 을이용하여간편하게 MagicInfo 의네트워크를설정하고시스템을백업및복원할수있습니다. 시스템시작시리모컨의 - 버튼이나키보드의 F3 키를연속해서누르면복구모드로진입한후 Samsung OS Recovery Solution 이실행됩니다. Samsung OS Recovery Solution 은키보드와리모컨을사용하여조작할수있습니다.

More information

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - Lect04.pptx OBJECT ORIENTED PROGRAMMING Object Oriented Programming 이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. Class 와 object Class 와객체 클래스의일생 메소드 필드 String Object Class 와객체 3 클래스 클래스의구성 클래스 (l (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스

More information

Windows Server 2012

Windows Server  2012 Windows Server 2012 Shared Nothing Live Migration Shared Nothing Live Migration 은 SMB Live Migration 방식과다른점은 VM 데이터파일의위치입니다. Shared Nothing Live Migration 방식은 Hyper-V 호스트의로컬디스크에 VM 데이터파일이위치합니다. 반면에, SMB

More information

TTA Journal No.157_서체변경.indd

TTA Journal No.157_서체변경.indd 표준 시험인증 기술 동향 FIDO(Fast IDentity Online) 생체 인증 기술 표준화 동향 이동기 TTA 모바일응용서비스 프로젝트그룹(PG910) 의장 SK텔레콤 NIC 담당 매니저 76 l 2015 01/02 PASSWORDLESS EXPERIENCE (UAF standards) ONLINE AUTH REQUEST LOCAL DEVICE AUTH

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

Chapter ...

Chapter ... Chapter 4 프로세서 (4.9절, 4.12절, 4.13절) Contents 4.1 소개 4.2 논리 설계 기초 4.3 데이터패스 설계 4.4 단순한 구현 방법 4.5 파이프라이닝 개요*** 4.6 파이프라이닝 데이터패스 및 제어*** 4.7 데이터 해저드: 포워딩 vs. 스톨링*** 4.8 제어 해저드*** 4.9 예외 처리*** 4.10 명령어 수준

More information

Microsoft Word - 문필주.doc

Microsoft Word - 문필주.doc 포커스 포커스 모바일 광고기능을 갖는 아이폰 애플리케이션 문필주* 이요섭** 최근의 모바일 광고 시장은 이동통신사 중심의 SMS 발송 형태에서 아이폰의 등장과 앱 스토어(App Store)의 성공에 의한 콘텐츠 내의 플랫폼(App-vertising) 형태로 변해 가고 있다. 본 고에서는 모바일 광 고 아이폰 애플리케이션을 활용할 수 있는 방법에 대해 논의하고자

More information

오버라이딩 (Overriding)

오버라이딩 (Overriding) WindowEvent WindowEvent 윈도우가열리거나 (opened) 닫힐때 (closed) 활성화되거나 (activated) 비활성화될때 (deactivated) 최소화되거나 (iconified) 복귀될때 (deiconified) 윈도우닫힘버튼을누를때 (closing) WindowEvent 수신자 abstract class WindowListener

More information

810 & 820 810 는 소기업 및 지사 애 플리케이션용으로 설계되었으며, 독립 실행형 장치로 구성하거 나 HA(고가용성)로 구성할 수 있습니다. 810은 표준 운영 체제를 실행하는 범용 서버에 비해 가격 프리미엄이 거의 또는 전혀 없기 때문에 화이트박스 장벽 을

810 & 820 810 는 소기업 및 지사 애 플리케이션용으로 설계되었으며, 독립 실행형 장치로 구성하거 나 HA(고가용성)로 구성할 수 있습니다. 810은 표준 운영 체제를 실행하는 범용 서버에 비해 가격 프리미엄이 거의 또는 전혀 없기 때문에 화이트박스 장벽 을 목적에 맞게 설계된 어플라 이언스 원격 용도로 최적화된 어플라이언스 관리 및 에너지 효율성 향상 원격 관리 LOM(Lights Out Management), IPMI 2.0 장치 식별 버튼/LED 실시간 시스템 환경 및 오류 모 니터링 Infoblox MIBS를 통한 SNMP 모니터링 고가용성 공급 장치 예비 디스크 예비 냉각 팬 전원 공급 장치 현장 교체

More information

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상 Android 용 Brother Image Viewer 설명서 버전 0 KOR 아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상표입니다. Android는

More information

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++, Level 1은객관식사지선다형으로출제예정 1. 다음은 POST(Post of Sales Terminal) 시스템의한콜레보레이션다이어그램이다. POST 객체의 enteritem(upc, qty) 와 Sale 객체의 makellineitem(spec,qty) 를 Java 또는 C ++, C # 언어로구현하시오. 각메소드구현과관련하여각객체내에필요한선언이있으면선언하시오.

More information

PDF_Compass_32호-v3.pdf

PDF_Compass_32호-v3.pdf Design Compass는 특허청의 디자인맵 웹사이트에서 제공하는 디자인, 브랜드, 기술, 지식재산권에 관한 다양한 콘텐츠를 디자이너들의 입맛에 맞게 엮은 격월간 디자인 지식재산권 웹진입니다. * Design Compass는 저작이용이 허락된 서울서체(서울시)와 나눔글꼴(NHN)을 사용하여 제작되었습니다. 2 4 5 6 7 9 10 11 편집 / 디자인맵

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770> 예약어(reserved word) : 프로그래밍 언어에서 특별한 용도로 사용하고자 미리 지정한 단어 - 프로그램의 구성요소를 구별하게 해주는 역할 => 라벨, 서브 프로그램 이름, 변수에 연관되어 다른 변수나 서브 프로그램 등과 구별 - 식별자의 최대길이는 언어마다 각각 다르며 허용길이를 넘어서면 나머지 문자열은 무시됨 - FORTRAN, COBOL, HTML

More information

Cisco FirePOWER 호환성 가이드

Cisco FirePOWER 호환성 가이드 Cisco 호환성가이드 Cisco 호환성 이문서에서는 Cisco 소프트웨어와하드웨어의호환성및요건을다룹니다. 추가 릴리스또는제품정보는다음을참조하십시오. 설명서로드맵 : http://www.cisco.com/c/en/us/td/docs/security/firesight/ roadmap/firesight-roadmap.html Cisco ASA 호환성가이드 : http://www.cisco.com/c/en/us/td/docs/security/asa/compatibility/

More information

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Microsoft Word - windows server 2003 수동설치_non pro support_.doc Windows Server 2003 수동 설치 가이드 INDEX 운영체제 설치 준비과정 1 드라이버를 위한 플로피 디스크 작성 2 드라이버를 위한 USB 메모리 작성 7 운영체제 설치 과정 14 Boot Sequence 변경 14 컨트롤러 드라이버 수동 설치 15 운영체제 설치 17 운영체제 설치 준비 과정 Windows Server 2003 에는 기본적으로

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

ThinkVantage Fingerprint Software

ThinkVantage Fingerprint Software ThinkVantage 지문 인식 소프트웨어 First Edition (August 2005) Copyright Lenovo 2005. Portions Copyright International Business Machines Corporation 2005. All rights reserved. U.S. GOVERNMENT USERS RESTRICTED RIGHTS:

More information

주제별로명령들이따로있는것을보면주제끼리의순서는상관없어도명령들의위치를지 켜야할지도모른다. 하지만실험은해보지않았으니심심하면체크해봐도된다. [CRAB] CRAB 을하기위한가장기본적인세팅이다. jobtype = cmssw scheduler = glite 등이있다. 보통 CRAB

주제별로명령들이따로있는것을보면주제끼리의순서는상관없어도명령들의위치를지 켜야할지도모른다. 하지만실험은해보지않았으니심심하면체크해봐도된다. [CRAB] CRAB 을하기위한가장기본적인세팅이다. jobtype = cmssw scheduler = glite 등이있다. 보통 CRAB CRAB job 1. CRAB이란? CRAB: CMS Remote Analysis Builder 원격으로 Tier-2에접속해서일을하는프로그램이다. 사용자의컴퓨터가아닌외부의 Tier-2에서일이돌아가므로사용자의 terminal이꺼진다해도일이끊기지않는다. 2. 전제조건 private key 가있어야한다. VO member 여야한다. 3. sitedb CMS에서해당

More information

설치 순서 Windows 98 SE/Me/2000/XP 1 PC를 켜고 Windows를 시작합니다. 아직 컴퓨터에 프린터를 연결하지 마십시오. 2 PC에 P-S100 CD-ROM(프 린터 드라이버)을 삽입합니다. 3 설치 프로그램을 시작합니다. q CD-ROM의 PS1

설치 순서 Windows 98 SE/Me/2000/XP 1 PC를 켜고 Windows를 시작합니다. 아직 컴퓨터에 프린터를 연결하지 마십시오. 2 PC에 P-S100 CD-ROM(프 린터 드라이버)을 삽입합니다. 3 설치 프로그램을 시작합니다. q CD-ROM의 PS1 디지털 사진 프린터 P-S100 프린터 드라이버 설치 가이드 사용하는 컴퓨터에 따라 제공된 프린터 드라이버를 설치합니다. 설치 절차 에 대한 자세한 내용은 CD-ROM의 Readme 파일을 참조하십시오. 작동 환경 Windows 호환 모델: IBM PC/AT 및 호환품 운영 체제: Windows 98 SE/Me/2000/XP (Windows 98 SE/Me/2000/XP

More information

Jkafm093.hwp

Jkafm093.hwp 가정의학회지 2004;25:721-739 비만은 심혈관 질환, 고혈압 및 당뇨병에 각각 위험요인이고 다양한 내과적, 심리적 장애와 연관이 있는 질병이다. 체중감소는 비만한 사람들에 있어 이런 위험을 감소시키고 이들 병발 질환을 호전시킨다고 알려져 있고 일반적으로 많은 사람들에게 건강을 호전시킬 것이라는 믿음이 있어 왔다. 그러나 이런 믿음을 지지하는 연구들은

More information

Windows Live Hotmail Custom Domains Korea

Windows Live Hotmail Custom Domains Korea 매쉬업코리아2008 컨퍼런스 Microsoft Windows Live Service Open API 한국 마이크로소프트 개발자 플랫폼 사업 본부 / 차세대 웹 팀 김대우 (http://www.uxkorea.net 준서아빠 블로그) Agenda Microsoft의 매쉬업코리아2008 특전 Windows Live Service 소개 Windows Live Service

More information

SBR-100S User Manual

SBR-100S User Manual ( 1 / 13 ) SBR-100S 모델에 대한 사용자 펌웨어 업그레이드 방법을 안내해 드립니다. SBR-100S 는 신규 펌웨어가 있을시 FOTA(자동업데이트) 기능을 통하여 자동 업그레이드가 되며, 필요시 사용자가 신규 펌웨어를 다운받아 수동으로 업그레이드 할 수 있습니다. 1. 준비하기 1.1 연결 장치 준비 펌웨어 업그레이드를 위해서는 SBR-100S

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

연구노트

연구노트 #2. 종이 질 - 일단은 OK. 하지만 만년필은 조금 비침. 종이질은 일단 합격점. 앞으로 종이질은 선택옵션으로 둘 수 있으리라 믿는다. 종이가 너무 두꺼우면, 뒤에 비치지 는 않지만, 무겁고 유연성이 떨어진다. 하지만 두꺼우면 고의적 망실의 위험도 적고 적당한 심리적 부담도 줄 것이 다. 이점은 호불호가 있을 것으로 생각되지만, 일단은 괜찮아 보인다. 필자의

More information

0.筌≪럩??袁ⓓ?紐껋젾001-011-3筌

0.筌≪럩??袁ⓓ?紐껋젾001-011-3筌 3 4 5 6 7 8 9 10 11 Chapter 1 13 14 1 2 15 1 2 1 2 3 16 1 2 3 17 1 2 3 4 18 2 3 1 19 20 1 2 21 크리에이터 인터뷰 놀이 투어 놀이 투어 민혜영(1기, 직장인) 내가 살고 있는 사회에 가치가 있는 일을 해 보고 싶 어 다니던 직장을 나왔다. 사회적인 문제를 좀 더 깊숙이 고민하고, 해결책도

More information

컴파일러

컴파일러 YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",

More information

슬라이드 1

슬라이드 1 강력한성능! 인터넷 / 업무용데스크탑 PC NX-H Series Desktop PC NX1- H700/H800/H900 NX2- H700/H800/H900 NX1-H Series 사양 Series 제품설명 ( 모델명 ) NX1-H Series, 슬림타입 기본형모델중보급형모델고급형모델 NX1-H800:112SN NX1-H800:324SN NX1-H800:534MS

More information

특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가

특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가 www.kdnetwork.com 특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가능할 삭제할 건전지 사용자를 위한 개별 비밀번호 및 RF카드

More information

1

1 2/33 3/33 4/33 5/33 6/33 7/33 8/33 9/33 10/33 11/33 12/33 13/33 14/33 15/33 16/33 17/33 5) 입력을 다 했으면 확인 버튼을 클릭합니다. 6) 시작 페이지가 제대로 설정이 되었는지 살펴볼까요. 익스플로러를 종료하고 다시 실행시켜 보세요. 시작화면에 야후! 코리아 화면이 뜬다면 설정 완료..^^

More information

º»ÀÛ¾÷-1

º»ÀÛ¾÷-1 Contents 10 http://www.homeplus.co.kr 11 http://www.homeplus.co.kr 12 http://www.homeplus.co.kr 13 http://www.homeplus.co.kr Interview 14 http://www.homeplus.co.kr Interview 15 http://www.homeplus.co.kr

More information

차 례 4

차 례 4 제 50 회전국과학전람회 2004. 07. 20 차 례 4 - 1 - 표 2. 천체의화각 표 1. 초점거리와화각 - 2 - 그림 1. 목성의표면구조 - 3 - 그림 2. 목성위성의상호현상 - 4 - π 공전속도 원궤도의반지름 π 그림 3. 케플러회전 - 5 - 표 3. 목성의궤도자료 표 4. 목성의물리자료 표 5. 4 대위성의궤도자료및물리자료 - 6 - 그림

More information

지상파(디지털) 방송의 재전송이 큰 목적 중 하나이므로 전세계적으로 IPTV의 보급이 더욱 촉진될 가능성이 높음 단말기 측면 전망 향후에는 거치형 TV만이 아니고 휴대전화, 휴대게임기 등에 대해서도 각종 콘 텐트 전송이 더욱 확대될 것이고 더 나아가 휴대전화 TV 휴대게임기 등 단말기 상호간의 콘텐트 전송이 더욱 증가될 것임 서비스 측면 전망 유저가 편한 시간대에

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 11 장상속 이번장에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다. 상속이란? 상속의개념은현실세계에도존재한다. 상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성

More information

2007년 6월 고2 모의고사 국어,언어 문제.hwp

2007년 6월 고2 모의고사 국어,언어 문제.hwp 2007학년도 6월고2 전국연합학력평가문제지고 2 언어영역 언어영역 1 번부터 5 번까지는듣고답하는문제입니다. 방송을잘듣고 답을하기바랍니다. 듣는내용은한번만방송됩니다. 이제듣기문제는다끝났습니다. 6 번부터는문제지의지시 에따라답을하기바랍니다 1 언어영역고 2 2 고 2 언어영역 3 언어영역고 2 4 고 2 언어영역 5 언어영역고 2 6 고 2 언어영역 연탄천사

More information

[NO_11] 의과대학 소식지_OK(P)

[NO_11] 의과대학 소식지_OK(P) 진 의학 지식과 매칭이 되어, 인류의 의학지식의 수준을 높 여가는 것이다. 하지만 딥러닝은 블랙박스와 같은 속성을 가지고 있어서, 우리는 단지 결과만을 알 수 있기 때문에 이런 식의 의학지 식의 확장으로 이어지기는 힘들 수 있다는 것을 의미한다. 이것은 실제로 의학에서는 인공지능을 사용하게 될 때 여러 가지 문제를 만들 수 있다. 뿐만 아니라, 인간이 이해

More information

152*220

152*220 152*220 2011.2.16 5:53 PM ` 3 여는 글 교육주체들을 위한 교육 교양지 신경림 잠시 휴간했던 우리교육 을 비록 계간으로이지만 다시 내게 되었다는 소식을 들으니 우 선 반갑다. 하지만 월간으로 계속할 수 없다는 현실이 못내 아쉽다. 솔직히 나는 우리교 육 의 부지런한 독자는 못 되었다. 하지만 비록 어깨너머로 읽으면서도 이런 잡지는 우 리

More information

FileMaker Go 13 5 5 5 6 6 7 8 8 10 10 10 10 10 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 15 4 17 17 17 18 18 18 18 18 19 19 19 19 19 19 20 20 20 21 21 22 22 22 22 23 23 1. 2. 3. 4. 5. 6. 1. 2. 3. 1

More information

User Guide

User Guide HP ThinUpdate 관리자 설명서 Copyright 2016 HP Development Company, L.P. Windows는 미국 및/또는 기타 국가에서 Microsoft Corporation의 등록 상표 또는 상표입 니다. 기밀 컴퓨터 소프트웨어. 소유, 사용 또는 복사 에 필요한 유효한 사용권을 HP로부터 취득했 습니다. FAR 12.211 및

More information

*074-081pb61۲õðÀÚÀ̳ʸ

*074-081pb61۲õðÀÚÀ̳ʸ 74 October 2005 현 대는 이미지의 시대다. 영국의 미술비평가 존 버거는 이미지를 새롭 게 만들어진, 또는 재생산된 시각 으로 정의한 바 있다. 이 정의에 따르 면, 이미지는 사물 그 자체가 아니라는 것이다. 이미지는 보는 사람의, 혹은 이미지를 창조하는 사람의 믿음이나 지식에 제한을 받는다. 이미지는 언어, 혹은 문자에 선행한다. 그래서 혹자는

More information

*2008년1월호진짜

*2008년1월호진짜 3. USB 이동식저장장치를이용하여전파되는악성코드분석 1. 개 요 최근 USB 이동식 저장장치를 통하여 전파되는 악성코드에 대한 감염피해가 증가하고 있어 주의가 필요하다. 이번에 확인된 ntion.exe 악성코드는 감염 시, 특정 사이트에 접속하여 추가 악성코드를 다운로드하는 Dropper 기능을 수행한다. 또한, 웹 서버가 감염될 경우는 웹 서버내의 웹 페이지가

More information

2

2 2 About Honeyscreen Copyright All Right Reserved by Buzzvil 3 2013.06 2013.1 2014.03 2014.09 2014.12 2015.01 2015.04 전체 가입자 수 4 7 8 10대 20대 30대 40대 50대 9 52.27 % 42.83 % 38.17 % 33.46 % 10 Why Honeyscreen

More information

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx 과목명: 웹프로그래밍응용 교재: 모던웹을 위한 JavaScript Jquery 입문, 한빛미디어 Part3. Ajax Ch19. node.js 기본 2014년 1학기 Professor Seung-Hoon Choi 19 node.js 기본 이 책에서는 서버 구현 시 node.js 를 사용함 자바스크립트로 서버를 개발 다른서버구현기술 ASP.NET, ASP.NET

More information

PowerPoint Presentation

PowerPoint Presentation FAST CAMPUS 2014년 6월 2일 애플(Apple)이 세계개발자대회 (WWDC 2014)에서 ios와os X 기반의 애플리케이션 개발을 위해 새로운 프로그래밍 언어 스위프트 를 선보였습니다. 보통 프로그램 언어의 경우 사람이 사용하는 말과 유사할수록 성능은 떨어지는데 이는 사람의 말과 유사할 경우 컴퓨터가 이해하도록 바꾸는 데 시간이 많이 걸리기 때문입니다.

More information

F120L(JB)_UG_V1.0_ indd

F120L(JB)_UG_V1.0_ indd 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 전화끊기, 통화중메뉴사용하기 전화통화를종료하려면 통화중 ➌ ( 끊기 ) 를누르세요. 전원버튼으로통화종료 ( 124쪽 ) 로설정한경우통화중전원

More information

안전한 웨 애플리케이션을 위한 자바스크립트 보안

안전한 웨 애플리케이션을 위한 자바스크립트 보안 119 Y.E 리앙 지음 / 박미정 옮김 안전한 웹 애플리케이션을 위한 자바스크립트 보안 119 안전한 웹 애플리케이션을 위한 Y.E 리앙 지음 / 박미정 옮김 자바스크립트 보안 이 도서는 JavaScript Security(PACKT publishing)의 번역서입니다 표지 사진 김민국 이 책의 표지는 김민국님이 보내 주신 풍경사진을 담았습니다. 리얼타임은

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

새국어생활제 14 권제 4 호 (2004 년겨울 )

새국어생활제 14 권제 4 호 (2004 년겨울 ) 새국어생활제 14 권제 4 호 (2004 년겨울 ) 네티즌들이궁금해하는어원몇가지 (3) 115 새국어생활제 14 권제 4 호 (2004 년겨울 ) 네티즌들이궁금해하는어원몇가지 (3) 117 새국어생활제 14 권제 4 호 (2004 년겨울 ) 네티즌들이궁금해하는어원몇가지 (3) 119 새국어생활제 14 권제 4 호 (2004 년겨울 ) 네티즌들이궁금해하는어원몇가지

More information

MF Driver Installation Guide

MF Driver Installation Guide Korean MF 드라이버 설치설명서 사용자 소프트웨어 CD-ROM... 드라이버 및 소프트웨어 정보...1 지원되는 운영 체제...1 MF 드라이버 및 MF Toolbox 설치... [쉬운 설치]를 사용한 설치...2 [사용자 정의 설치]를 사용한 설치...10 USB 케이블 연결(USB를 이용해 연결하는 경우만)...20 설치 결과 확인...21 온라인

More information

E20023804(2005).hwp

E20023804(2005).hwp - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - - 9 - - 10 - - 11 - - 12 - - 13 - - 14 - - 15 - - 16 - - 17 - - 18 - - 19 - - 20 - - 21 - - 22 - - 23 - - 24 - - 25 - - 26 - - 27 - 100 기초선 중재(마인드 맵핑 프로그램을

More information

¼ÒµæºÒÆòµî.hwp

¼ÒµæºÒÆòµî.hwp 소득불평등 및 빈곤의 실태와 정책과제 요 약 ⅰ ⅱ 소득불평등 및 빈곤의 실태와 정책과제 요 약 ⅲ ⅳ 소득불평등 및 빈곤의 실태와 정책과제 요 약 ⅴ ⅵ 소득불평등 및 빈곤의 실태와 정책과제 제1장 서 론 1 2 소득불평등 및 빈곤의 실태와 정책과제 제1장 서 론 3 4 소득불평등 및 빈곤의 실태와 정책과제 제2장 소득분배 이론 및 국제비교

More information

멀티스레드를 위한 자바스크립트 프로그래밍 웹 워커

멀티스레드를 위한 자바스크립트 프로그래밍 웹 워커 Hanbit ebook Realtime 09 멀티스레드를 위한 자바스크립트 프로그래밍 웹 워커 Web Workers 아이두 그린 지음 / 김보경 옮김 이 도서는 O REILLY의 Web Workers의 번역서입니다. 멀티스레드를 위한 자바스크립트 프로그래밍 웹 워커 멀티스레드를 위한 자바스크립트 프로그래밍 웹 워커 초판발행 2012년 11월 23일 지은이 아이두

More information

ActFax 4.31 Local Privilege Escalation Exploit

ActFax 4.31 Local Privilege Escalation Exploit NSHC 2013. 05. 23 악성코드 분석 보고서 [ Ransomware 악성코드 ] 사용자의 컴퓨터를 강제로 잠그고 돈을 요구하는 형태의 공격이 기승을 부리고 있 습니다. 이러한 형태의 공격에 이용되는 악성코드는 Ransomware로 불리는 악성코 드 입니다. 한번 감염 시 치료절차가 복잡하며, 보고서 작성 시점을 기준으로 지속 적인 피해자가 발생되고

More information

새로운 지점에서 단이 시작하는 경우 기둥코로 시작하라고 표시합니다. 기둥코(standing stitch)로 시작하는 방법은 YouTube 에서 찾아볼 수 있습니다. 특수 용어 팝콘뜨기: 1 코에 한길긴뜨기 5 코, 바늘을 빼고 첫번째 한길긴뜨기코의 앞에서 바늘을 넣은

새로운 지점에서 단이 시작하는 경우 기둥코로 시작하라고 표시합니다. 기둥코(standing stitch)로 시작하는 방법은 YouTube 에서 찾아볼 수 있습니다. 특수 용어 팝콘뜨기: 1 코에 한길긴뜨기 5 코, 바늘을 빼고 첫번째 한길긴뜨기코의 앞에서 바늘을 넣은 Desire Copyright: Helen Shrimpton, 2016. All rights reserved. By: Helen at www.crystalsandcrochet.com 12 인치 모티브 worsted/aran(10ply), 5mm 바늘 사용 약 10인치 Double Knitting(8ply), 4mm 바늘 사용 미국식 용어를 사용합니다. 약어

More information

비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리 ArcGIS for Desktop 10.4 Single Use 설치가이드 Software: ArcGIS for Desktop 10.4 Platforms: Windows 10, 8.1, 7, Server 2012, Server 2008 ArcGIS for Desktop 10.4 시스템 요구사항 1. 지원 플랫폼 운영체제 최소 OS 버전 최대 OS 버전 Windows

More information

- 2 -

- 2 - 보도자료 미래부 - 부산시, 아시아디지털방송아카데미 ( 가칭 ) 설립공동협력키로 - 부산콘텐츠마켓 과함께아시아공동체의방송발전에크게기여할것 - - 1 - - 2 - - 3 - [ 붙임 1] 아시아디지털방송아카데미설립 MOU 체결 ( 안 ) ㆍ 2 7 6 10 5-4 - 참고 1 상호협력양해각서 (MOU) ( 안 ) 아시아디지털방송아카데미설립 운영을위한 상호협력양해각서

More information

1

1 1 2 3 4 5 6 b b t P A S M T U s 7 m P P 8 t P A S M T U s 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Chapter 1 29 1 2 3 4 18 17 16 15 5 6 7 8 9 14 13 12 11 10 1 2 3 4 5 9 10 11 12 13 14 15

More information

No Slide Title

No Slide Title 저속 고토크 유압 모터 JS,JH, 시리즈 2K / J2K, 6k / J6K 시리즈 2005-1 B137 001-02 June 2000 JH 시리즈 특징 스풀 밸브 및 지로터가 있는 컴팩트한 디자인. 수입 고압 용량 샤프트 씰, 다 양한 범위의 마운팅 플랜지, 샤프트, 포트, 속도가 설계 유연성을 제공합 니다. 샤프트 회전 방향 및 속도는 쉽고 부드럽게 제어할

More information

iOS5_1±³

iOS5_1±³ IDG Deep Dive ios 5 2 3 4 5 6 7 8 9 10 11 12 ios 5 토어 버튼이 상단 좌측에 추가되어 아이튠즈 스토 어의 적합한 영역으로 연결해 준다. 또한 블루투스의 원격제어 기능인 AVRCP(AV Remote Control Profile)가 1.3 버전으로 업데이 트되어 음악을 블루투스로 스트리밍할 때 트랙과 아티스트, 앨범 정보를

More information

......-....4300.~5...03...

......-....4300.~5...03... 덕수리-내지(6장~8장)최종 2007.8.3 5:43 PM 페이지 168 in I 덕수리 민속지 I 만 아니라 마당에서도 직접 출입이 가능하도록 되어있다. 이러한 장팡뒤의 구조는 본래적인 형태라 고 할 수는 없으나, 사회가 점차 개방화되어가는 과정을 통해 폐쇄적인 안뒤공간에 위치하던 장항 의 위치가 개방적이고 기능적인 방향으로 이동해가는 것이 아닌가 추론되어진다.

More information

암호내지2010.1.8

암호내지2010.1.8 Contents 분류 안내서 해설서 해당팀명 발간년월 대상 수준 인터넷 진흥 인터넷 이용 활성화 정보보호 시스템 관리 한국인터넷진흥원(KISA) 안내서 해설서 시리즈 DNS 설정 안내서 시스템관리팀

More information

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

Contents Test Lab 홖경... 3 Windows 2008 R2 서버를도메인멤버서버로추가... 4 기존 Windows 2003 AD 홖경에서 Windows 2008 R2 AD 홖경으로업그레이드를위한사젂작업 7 기존 Windows 2003 AD의스키마확장...

Contents Test Lab 홖경... 3 Windows 2008 R2 서버를도메인멤버서버로추가... 4 기존 Windows 2003 AD 홖경에서 Windows 2008 R2 AD 홖경으로업그레이드를위한사젂작업 7 기존 Windows 2003 AD의스키마확장... Active Directory Upgrade from W2K3 to W2K8 R2 5/10/2010 Microsoft Dong Chul Lee Contents Test Lab 홖경... 3 Windows 2008 R2 서버를도메인멤버서버로추가... 4 기존 Windows 2003 AD 홖경에서 Windows 2008 R2 AD 홖경으로업그레이드를위한사젂작업

More information

제 12강 함수수열의 평등수렴

제 12강 함수수열의 평등수렴 제 강함수수열의평등수렴 함수의수열과극한 정의 ( 점별수렴 ): 주어진집합 과각각의자연수 에대하여함수 f : 이있다고가정하자. 이때 을집합 에서로가는함수의수열이라고한다. 모든 x 에대하여 f 수열 f ( x) lim f ( x) 가성립할때함수수열 { f } 이집합 에서함수 f 로수렴한다고한다. 또 함수 f 을집합 에서의함수수열 { f } 의극한 ( 함수 ) 이라고한다.

More information

IRISCard Anywhere 5

IRISCard Anywhere 5 이 빠른 사용자 가이드는 IRISCard Anywhere 5 및 IRISCard Corporate 5 스캐너의 설치와 시작을 도와 드립니다. 이 스캐너와 함께 제공되는 소프트웨어는: - Cardiris Pro 5 및 Cardiris Corporate 5 for CRM (Windows 용) - Cardiris Pro 4 (Mac OS 용) Cardiris 의

More information

[서비스] 1. 오프닝 네트워킹 파티 (전체 공통) (1/13(월) 밤 9시) FAST TRACK ASIA와 CAMP에 대해 소개하고, 3개 코스의 전체 참가자들의 소개 및 네트워킹을 진행합니다. 2. 패스트트랙아시아 파트너 CEO들과의 네트워킹 파티 (전체 공통) (

[서비스] 1. 오프닝 네트워킹 파티 (전체 공통) (1/13(월) 밤 9시) FAST TRACK ASIA와 CAMP에 대해 소개하고, 3개 코스의 전체 참가자들의 소개 및 네트워킹을 진행합니다. 2. 패스트트랙아시아 파트너 CEO들과의 네트워킹 파티 (전체 공통) ( 대학생 대상 CAMP 일정표 (6주, 12개 강의 + 6개 서비스) [강의] 1. 사업계획서 작성의 모든 것 (1/14(화) 오전 10시) 사업계획서 작성에 필요한 실무 지식과 유의해야 할 점들을 설명하고, 샘플 사업계획서들을 살펴봅니다. 2. 운명을 함께 할 공동창업자 및 초기 핵심멤버를 구하는데 고려해야 할 점들 (1/16(목) 오전 10시) 공동창업자와

More information

041~084 ¹®È�Çö»óÀбâ

041~084 ¹®È�Çö»óÀбâ 1998 60 1 1 200 2 6 4 7 29 1975 30 2 78 35 1 4 2001 2009 79 2 9 2 200 3 1 6 1 600 13 6 2 8 21 6 7 1 9 1 7 4 1 2 2 80 4 300 2 200 8 22 200 2140 2 195 3 1 2 1 2 52 3 7 400 60 81 80 80 12 34 4 4 7 12 80 50

More information

2014학년도 수시 면접 문항

2014학년도 수시 면접 문항 안 경 광 학 과 세부내용 - 남을 도와 준 경험과 보람에 대해 말해 보세요. - 공부 외에 다른 일을 정성을 다해 꾸준하게 해본 경험이 있다면 말해 주세요. - 남과 다른 자신의 장점과 단점은 무엇인지 말해 주세요. - 지금까지 가장 고민스러웠던 또는 어려웠던 일과 이를 어떻게 해결하였는지? - 자신의 멘토(조언자) 또는 좌우명이 있다면 소개해 주시길 바랍니다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 2017. 9. 11 헬스커뮤니케이션 : 헬스캠페인목표와수용자의사회 심리적요인 헬스커뮤니케이션주체자들의 소통의목표는? 헬스커뮤니케이션주체자들의 소통의목표는? 수용자의변화 헬스커뮤니케이션주체자들 수용자들의변화 의료서비스제공자 : 건강행동변화, 의사결정정부 : 인식, 태도, 행동변화제약, 건강식품, 뷰티 : 구매 Effect: 수용자반응 Hierarchy 모델커뮤니케이션효과란사전에소통주체자가메시지를통해얻고자미리의도했던반응.

More information

신규투자사업에 대한 타당성조사(최종보고서)_v10_클린아이공시.hwp

신규투자사업에 대한 타당성조사(최종보고서)_v10_클린아이공시.hwp 신규투자사업에 대한 타당성 조사 (요약본) 2015. 4. 지방공기업평가원 제주관광공사가부족한쇼핑인프라를보완하고, 수익을제주관광진흥에재투자하여 관광산업활성화와관광마케팅재원확보 라는양대목적달성에기여하고공기업으로서사회적책임을다하고자시내면세점사업에투자하려는의사결정에대한타당도는전반적으로볼때 긍정 으로평가할수있음 역할및필요성 대내 외환경 정책및법률 경제성기대효과

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 9 강캐릭터컨트롤러 이대현교수 학습안내 학습목표 씬노드의구성및회전방법을응용하여, 구면카메라및캐릭터컨트롤을구현해본다. 학습내용 구면카메라구현을위한씬노드구성및회전캐릭터컨트롤을위한씬노구구성및회전 카메라및캐릭터컨트롤구현목표 카메라컨트롤 WOW의카메라컨트롤 ( 구면카메라 ) 마우스를이용한좌우패닝, 상하피칭. 휠스크롤을이용한줌인및줌아웃. 캐릭터를중심으로회전됨.

More information

iOS 7 핵심 노트: Xcode 5, 플랫 UI, API 중심으로 살펴보는 iOS 7

iOS 7 핵심 노트: Xcode 5, 플랫 UI, API 중심으로 살펴보는 iOS 7 Hanbit ebook Realtime 51 Xcode 5, 플랫 UI, API 중심으로 살펴보는 ios 7 ios 7 핵심 노트 야곰 지음 Xcode 5, 플랫 UI, API 중심으로 살펴보는 ios 7 ios 7 핵심 노트 ios 7 핵심 노트 Xcode 5, 플랫 UI, API 중심으로 살펴보는 ios 7 초판발행 2013년 12월 31일 지은이 야곰

More information

슬라이드 1

슬라이드 1 ment Perspective (주)아임굿은 빅데이터 기술력, 반응형웹 제작, 온라인마케팅 노하우를 겸비한 IT 솔루션개발 및 마케팅 전문 기업입니다. 웹 정보를 수집하는 크롟링 시스템과 대량의 데이터를 처리하는 빅데이터 기술을 통해 쉽게 지나칠 수 있는 정보를 좀 더 가치있고 흥미로운 결과물로 변화하여 고객에게 제공하고 있습니다. 또한 최근 관심이 높아지고

More information

목 차 1. 드라이버 설치...3 1.1 설치환경...3 1.2 드라이버 설치 시 주의사항...3 1.3 USB 드라이버 파일...3 1.4 Windows XP에서 설치...4 1.5 Windows Vista / Windows 7에서 설치...7 1.6 Windows

목 차 1. 드라이버 설치...3 1.1 설치환경...3 1.2 드라이버 설치 시 주의사항...3 1.3 USB 드라이버 파일...3 1.4 Windows XP에서 설치...4 1.5 Windows Vista / Windows 7에서 설치...7 1.6 Windows 삼성SDS 하이패스 USB 드라이버 설치 매뉴얼 삼성SDS(주) 목 차 1. 드라이버 설치...3 1.1 설치환경...3 1.2 드라이버 설치 시 주의사항...3 1.3 USB 드라이버 파일...3 1.4 Windows XP에서 설치...4 1.5 Windows Vista / Windows 7에서 설치...7 1.6 Windows 8에서 설치...9 2. 드라이버

More information

- i - - ii - - iii - - iv - - v - - vi - - vii - - viii - - ix - - x - - xi - - xii - - xiii - - xiv - - xv - - xvi - - xvii - - xviii - - xix - - xx - - xxi - - xxii - - xxiii - - xxiv - - 3 - - 4 -

More information