Angular CLI는 AngularJS를 사용함에 있어, 편리하게 project 구성, component 생성 등을 도와주는 interface입니다. Angular CLI 사용법에 대해 간단히 알아보겠습니다. 

#1 설치

$ npm install -g angular-cli

지난 포스팅에 알아본, angular cli 설치 command이다. cmd창에 입력하면된다. 

#2 프로젝트 시작 (ng new)

$ ng new 프로젝트명

Angular project를 생성해주는 command이다. dir 구조 및 필요한 파일들을 자동 생성 및 구성해준다. 

#3 컴포넌트, 디렉티브, 파이프 생성 (ng generate)

Angular CLI를 이용하면, 컴포넌트, 디렉티브, 파이프 등을 쉽게 생성할 수 있다. Command들은 다음과 같다. 

 Scaffold

Usage 

Componet

$ ng g componet 컴포넌트명 

Directive 

$ ng g directive 디렉티브명 

Pipe

$ ng g pipe 파이프명 

Service

$ ng g service 서비스명 

Class 

$ ng g class 클래스명 

Interface

$ ng g interface 인터페이스명 

Enum 

$ ng g enum 이넘명 

Module

$ ng g module 모듈명 







'IT & 개발 > angularJS' 카테고리의 다른 글

Angular 시작하기 (개발환경 세팅)  (0) 2017.11.07


오늘은 간단하게 명령어 중심으로 window 10 개발환경 세팅하는 법을 알아보자. 


#1 nodeJS 및 npm  환경 설정

npm을 이용하여 angular환경을 구축해야 하기 때문에, 먼저 nodeJS를 다운받아야 한다. 


nodeJS는 다음 링크에서 다운로드 받는다. 

https://nodejs.org/ko/download/




각자 OS에 맞게 다운로드 받으면 된다.


다운로드가 완료되었다면, cmd창을 열어서 다음 명령어를 입력해보자. 


$ node -v

$ npm -v


v6.7.0 과 같이 버전 정보가 출력된다면, 정상적으로 다운로드가 이루어진 것이다 .

다음으로 넘어가기 전에, npm 업데이트를 하고 넘어가자. 

cmd창에 다음 명령어를 입력하면 된다. 


$ npm install -g npm@latest   // npm 최신 버전으로 업데이트


#2 Angular 다운로드

AngularJS를 사용하기 위해선 package.json 파일 등 여러 파일 구조가 필요하다. 
하지만 이를 직접 코드를 작성하는 것은 꽤나 골아픈 짓이다. 
(물론 Angular를 이해하는데는 도움이 된다.)

이에 Angular CLI를 이용하여 간단히 개발환경을 구축해보자

$ npm install -g angular-cli

정상적으로 처리되었다면, angular를 개발하기 위한 준비가 완료된 것이다. 

#3 Project 생성

이제 마지막 단계인 프로젝트를 생성해보자. 
먼저 여러분이 소스파일을 저장하고 싶은 directory로 이동한다. 

(리눅스를 사용해본 경험이 없는 분들은.. 'cd directory주소'를 입력해주면 된다.  ex:  cd C:\Users\USER\OneDrive\개발\portfolio\portfolio )

이동 후 다음 명령어를 입력한다. 

$ ng new 프로젝트명

윈도우 참색창에서 해당디렉토리로 이동해보면, 프로젝트가 생성된 것을 확인할 수 있다. 

마지막으로 잘되었는지 확인해보기 위해. 

$ cd 프로젝트명
$ ng serve   // angular 서버를 실행하는 코드 


브라우저에서 'http://localhost:4200/'에 접속했을 때, 다음과 같은 창이 뜬다면..

여러분은 angular를 이용해 개발할 준비가 완료된 것이다. 



'IT & 개발 > angularJS' 카테고리의 다른 글

Angluar CLI 사용법  (0) 2018.02.16


Active X (액티브 X)

2017년 대선을 앞두고 유력 후보들이 ActiveX 폐지를 주장하고 있다. ActiveX가 무엇인지 간단히 알아보자. 


1. 도입

ActiveX는 취약한 웹 보안을 보완하기 위해 MS가 내놓은 플러그인이다. 사용자가 직접 인터넷에서 플러그인을 다운 받아야 한다. 이래서 대한민국 국민들은 인터넷으로 은행업무, 공공업무를 보기위해서는 많게는 5~6개의 플러그인을 다운 받아야 한다. 


99년 정부에서 ActiveX 도입을 결정할 때, 한국리눅스협의회에서는 ActiveX 허용시 보안 생태계가 극도로 나빠질 수 있다고 조언하였지만 정부는 듣지 않았다. 이에 대한민국은 최악의 ActiveX 생태계로 들어가게 된다. 


Internet Explore 11 버전에서 MS는 ActiveX의 취약성을 발견하고 이 기능을 제외 시켰다. 이와 동시에 대한민국 인터넷으로는 은행 업무를 볼 수 없는 초유의 사태가 일어난다. 이에 MS는 이례적으로 한국 Explore 11에만 ActiveX를 허용한다. 


박근혜 정부에서 '천송이 코트' 사건으로 해외에서 ActiveX때문에 한국 제품을 사지 못하자, ActiveX폐지를 지시한다. 이에 '공인인증서제도 폐지'(공인인증서 폐지 와는 다름)는 성공했지만. ActiveX폐지와 함께 .exe파일로 돌아서게 된다. 


2. ActiveX 단점

ActiveX의 단점은 간단한다. 보안이 뚤린 책임을 사용자가 지게된다. 정부 정책으로 ActiveX를 추진하고 있다. 이에 보안이 뚤리더라도 제공한 기업에서는 ActiveX를 제공했고 사용자의 컴퓨터를 탓하게 될수 있다. 

3. 해결책

이것도 간단하다. 제공사에서 자체적인 보안 기술을 강화한다. 해외에서는 다들 사용하는 방법이다. 사이트 보안은 자체 서버에서 책임을 져야하지, 사용자들의 컴퓨터를 해서는 안된다. 

단, ActiveX폐지를 위해서는 새로운 보안 솔루션 개발을 위해 수천억원의 예산이 들어가게 된다. 정부와 민간이 공동으로 뜻을 모아 추진해야될 일이다. 



http://www.pitchone.co.kr/8131



ionic 시작하기 

Mac OS를 기준으로 작성되지만, window도 크게 다를 것 없다. ionic이 무엇인지 알고 싶다면, 과거에 게시글(http://fireburger.tistory.com/7)을 참고바란다. 

0. 준비사항 및 필자 개발 환경

  1. Visual Studio Code (https://code.visualstudio.com)  
  2. AngularJS 및 Typescirpt 그리고 Web 표준에 대한 간단한 사전 지식이 필요하다. 
* VS code는 미리 설치하고 따라오길 바란다. 
** ionic은 TypeScript 및 Angular로 이루어져있다. 이중 TypeSciprt는 마이크로소프트에서 만든 스크립트 언어로, JavaScript에 객체지향 및 프로그래밍적 요소를 강화시킨 언어이다. 이에 같은 마이크로소프트에서 만든 VS Code 에디터를 사용한다면 가장 효율적으로 개발을 진행할 수 있다.


1. nodeJS 다운 받기 

ionic은 npm install을 통해서 설치해야한다. 이에, ionic을 설치하기 이전에 우선적으로 nodejs를 설치해주어야 한다. 설치링크(https://nodejs.org/en/)
버전은 크게 상관이 없기에, 편한걸 받으면 된다. 본인은 17년 3월 기준 가장 최신버전을 받아서 사용했다.



2. ionic 및 Cordova 설치

이제 본격적으로 개발을 위해 ionic과 cordova를 설치하겠다. ionic에 대해서는 다들 알고 여기까지 왔을 것이라고 생각한다. 혹시 cordova에 대해 모르는 독자가 있을까 짚어보자면.. 하이브리드 앱을 만들기 위한 plugin들의 모음이라고 간단히 설명해본다. 웹에서 native 기능(카메라, gps 등)을 제공해주는 플러그인들 모음들이다. 자세한 것은 따로 공부해보자. 

우선 VS code를 실행 후 Ctrl+`(숫자 1 왼쪽에 특수문자)를 누르면 터미널 창이 하단에 뜰 것이다. 터미널창에 아래 코드를 입력하면 ionic 및 Cordova 설치가 시작될 것이다.



3. ionic 프로젝트 시작

ionic이 설치 되었으면, 이제 프로젝트를 시작해보자! 먼저 터미널 창에서 본인이 ionic 프로젝트 파일들을 저장하고 싶은 폴더로 이동한다. (리눅스 명령어를 사용하면 된다. 이동은 'cd', 현재 폴더 보는 것은 'ls', 새폴더는 'mkdir' 등.. 모른다면 구글링을 해보자).  원하는 폴더로 이동이 완료되었다면, 아래 코드를 터미널창에 입력한다. 


 
그러면 폴더가 만들어졌을 것이다. 만들어진 폴더로 이동 후
 
아래 코드를 다시 입력해 보자! ionic을 실행시키는 코드이다. 실행시키면 서버가 돌아감과 동시에 인터넷 브라우저가 켜지며, 현재까지 코딩된 사항들이 화면에 출력될 것이다.




여기까지 ionic 설치 및 프로젝트 생성까지 해보았다. 





오늘은 웹 기술 중 '데이터'를 위한 기술에 대해 알아보겠다. 


XML (eXtensible Markup Language)

XML은 전자적으로 데이터를 교환하기 위한 표준이다. HTML과 같은 마크업 언어이지만 특정 태그에 제약을 받지 않는다. 데이터를 표현하기 위한 언어이니만큼 태그를 사용자가 정의할 수 있도록 하여 내용성을 강조 하였다.

                                                                    (예시) 

 HTML

XML 

 <h1><fond=bold>Hello!!</font></h1>

<greeting>Hello!!</greeting> 


- XML의 특징

  • 단순성: XML은 다른 코드셋이 아닌 일반 텍스트로 되어 있어 판독이 가능하며, HW/SW에 의존하지 않으므로 단순해질수 있는 특징이 있다.
  • 표준성: W3C가 주도하므로 스펙의 표준화를 이룰 수 있다. 
  • 구조성: Data에 구조를 부여한다. XML은 data를 설명하는 의미가 담긴 태그를 제공할 뿐 아니라 특정 구조를 저장한다. 
  • 확장성: 사용자 임의로 무한한 태그 확장을 할 수 있으며, 상황에 따라 적절한 태그의 부여가 가능하다. 
  • Character Set: 모든 XML프로세서는 16bit Unicode를 지원하므로 한글과 같은 2byte 문자권의 데이터도 처리 가능하다. 

참고

http://blog.daum.net/_blog/BlogTypeView.do?blogid=0FDfM&articleno=11281814

http://marcof.tistory.com/45


JSON (JavaScript Object Notation)

JSON(JavaScript Object Notation)의 약자로 JavaScript에서 객체를 만들 때 사용되는 경량의 DATA-교환 형식이다. 이 표현식은 사람도 이해하기 쉽고 기계도 이해하기 쉬우면서 데이터의 용량이 작다. 이런 이유로 최근에는 JSON이 XML을 대체해서 설정의 저장이나 데이터 전송 등에 많이 사용된다. 

- JSON의 구조 및 특징
  1. Ajax로 서버와 통신하며 손쉽게 데이터를 주고 받을 수 있다.  
  2. Name, Value 형태의 쌍으로 구성된다.
  3. 값들의 순서화된 리스트로 나타난다.

 

 XML

JSON 

용량 

크다 

가볍다 

데이터 타입 

String 

stringm sumber, array, boolean 

속도 

느리다 

빠르다 

구성 

<tag>

객체, 배열 구조 



참고

생활코딩 (https://opentutorials.org/course/1375/6844)


Ajax (Asynchronous JavaScript and XML)

웹브라우저는 기본적으로 정적인 시스템이다. 흔히 우리가 인터넷 서핑을 하며 게시물들을 볼 때, 새로운 게시물이 올라왔는지 확인하기 위하여 '새로고침'을 누른다. 이는 웹이 전자 문서를 염두에 두고 고안된 시스템이기에 당연하게 생각되었다. 

하지만 Ajax가 도입되며 모든 것이 바뀌었다. Ajax는 웹브라우저와 웹서버가 내부적으로 데이터 통신을 할 수 있게 해준다. 그리고 변경된 결과를 웹페이지에 프로그래밍적으로 반영함으로써 웹페이지의 로딩 없이 서비스를 사용할 수 있게 한다. 예로 여러분이 Facebook을 사용할 때에 '새로고침'을 누르지 않더라도 새로운 포스팅이 업데이트 되는 것을 확인할 수 있다. 

Ajax는 JavaScript를 이용하여 비동기적으로 서버와 브라우저가 데이터를 주고받게 해준다. 이때 사용하는 API가 XMLHttpRequest이다. Ajax의 약자를 확인해보면 XML이라는 단어가 들어가지만 꼭 XML만 사용해야하는 것은 아니다. 오늘날은 오히려 JSON을 활용하여 데이터 통신이 더 많이 이루어지고 있다. 

참고




오늘은 웹키워드 중 네트워크와 관련된 부분에 대해 설명하겠다. 


URI (Uniform Resource Identifier)

URI는 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI의 존재는 인터넷에 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어다닌다. URI는 인터넷 상에 존재하는 html, gif, jpeg 등의 파일을 찾고 가져오는 일과 관련되어있다. 


URI는 선호도에 따라 URL(Uniform Resource Locator) 또는 URN(Universal Resource Name)의 둘 중 하나의 형태로 쓸 수 있다. 쉽게 설명하면 아래 그림과 같다. 




URL (Uniform Resource Locator)

URL은 네트워크 상에서 자원이 어디있는 지를 알려주기 위한 규약이다. 흔히 웹사이트 주소로 알고 있지만, URL은 주소 뿐 아니라 네트워크상의 자원을 모두 나타낼 수 있다. 그 주소에 접속하려면 해당 URL에 맞는 프로토콜을 알아야 하고, 그와 동일한 프로토콜로 접속해야 한다. 


URL은 제일 앞에 자원에 접근할 수 있는 http, telnet, ftp와 같은 프로토콜 이름을 적는다. 그 이후에는 구분자(:) 및 이외의 정보들을 적는데, 여러분이 흔히 아는 인터넨 주소를 떠올리면 된다. (ex. http://52.84.38.323)


참고

http://imovator.tistory.com/entry/%ED%8E%8C-URI-URL%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90


HTTP (HyperText Transfer Protocol)

인터넷 통신을 위해 사용되는 프로토콜이며, 우리가 웹브라우저를 통해 페이지들을 볼 수 있는 것은 모두 HTTP 덕분이다. HTML 뿐 아니라 이미지, 동영상등의 데이터도 전송이 가능하다. 


HTTP는 Server/Client 모델이다. 클라이언트는 서버에 URI를 사용하여 요청(Request)하고, 서버는 그 요청에 대해 반응(Response)한다. 즉, HTTP프로토콜을 사용하여 URI에 속한 URL 주소로 서버에 요청하면, 해당 서버에서는 요청에 응답하여 웹페이지를 띄워준다. 


HTTP는 Connectionless 한 프로토콜이기에, 요청/반응 이후에 접속을 끝는다. 이에, 서버와 계속해서 통신이 필요한 경우에는 Ajax와 같은 특수한 방법을 사용한다. 마찬가지로 Stateless 한 프로토콜이기에 상태 저장이 필요하면 쿠키나 세션 방식을 사용한다. 


다음은 HTTP에서 사용하는 Request Method들이다. 

HEAD, GET, POST, PUT, DELETE, TRACE, OPTIONS. CONNECT


참고

http://dalkomit.com/134


SSL (Secure Socket Layer)

Netscapt사에서 만든 웹서버와 브라우저 사이의 보안을 담당하는 프로토콜이다. 웹서버와 브라우저는 인증서 및 Key를 사용하여 URL 및 HTTP 데이터들을 암호화 하여 전송한다. 이후 각각은 서로에게 전송 받은 암호화된 데이터를 복호화하여 화면에 뿌리거나 저장한다. 

인터넷 서핑을 하다보면 URL창에서 'http'와 'https'를 본 기억이 있을 것이다. 'https'인 경우 뒤에 붙은 s가 SSL 인증서가 붙은 웹페이지임을 의미한다. 인증서는 인증 기관을 통해 발급 받을 수 있으며, SSL 인증서가 장착되지 않은 웹페이지는 보안상 취약할 수 밖에 없다. 

참고




잡스에 의해 아이폰이 세상에 공개된 이후, 스마트폰은 전세계로 퍼져나갔다. IT 생태계도 기존 PC에서 모바일로 급격히 이동되었다. 이에, 모바일 애플리케이션에 대한 사람들의 요구가 증가하였다. 


현재 모바일 시장은 Android와 iOS가 양분하고 있다. 하지만 대기업 혹은 대형 포털회사를 제외한 곳에서 2개의 언어로 애플리케이션을 개발하기란 쉽지 않다. 이를 보완하고자 등장한 것이 하이브리드 앱이다. 

하이브리드앱이란? 

하이브리드앱이란 '웹 + 네이티브앱' 으로 이루어진 애플리케이션이다. 애플리케이션 내 내용을 HTML, CSS등을 이용한 기술로 구성한다. 이 구성된 내용을 가지고, 네이티브 앱이란 그릇에 담아 출시하는 것이 하이브리드 앱의 기본 개념이다. 

하이브리드 앱 기술을 사용하면 웹 기술로 만든 하나의 page로 iOS와 Android 2개 부분에서 퍼블리싱이 가능하다. 이에 시간을 단축 할 수 있으며, 각각 iOS와 Android에 대한 많지 않은 지식으로도 애플리케이션을 퍼블리싱할 수 있다는 장점이 있다. 


하이브리드 앱에 대한 이미지 검색결과

- 하이브리드앱의 장점

      • 네이티브API와 브라우저 API를 이용한 다양한 개발이 가능
      • 웹 기술을 사용해 앱을 개발 가능 (UI를 통합하여 단일 코드로 개발 가능)
      • 한번의 개발로 다수의 플랫폼에 대응 가능 
- 하이브리드앱의 단점
      • 네이티브 기능에 접근하기 위해 결국 네이티브 지식이 필요
      • 웹뷰에서 앱을 실행하는 경우이기에 앱의 성능이 곧 브라우저의 성능
      • UI프레임워크 도구를 사용하지 않는다면 개발자가 UI를 제작해야 함

Ionic (아이오닉)

위에 언급한 것과 같이 하이브리드앱이 비록 성능 부분에서 단점을 가지고 있지만, 가지고 있는 여러 장점들 덕분에 활용하려는 사람들이 점점 늘어나고 있다. 이에 발 맞추어 하이브리드 앱 기술 및 Framework 또한 여러가지 것들이 세상에 나오고 있다. 

Phonegap, Framework7, JQuery mobile, senchatouch등 많은 기술들이 세상에 나왔다. 그 중 현재 전세계적으로 가장 많이 사용되고 있는 하이브리드앱 기술이 Ionic이다. ionic은 nodeJS와 AngularJS를 기반으로 만들어졌으며, 다음과 같은 특징들을 가진다. 

- Ionic의 특징
      • Cordova(Phonegap) 환겨을 제공한다. 
      • Cordova(Phonegap) 플러그인을 사용할 수 있다. 
      • AngularJS 기반으로 SPA(Single Page Application)를 MVC나 MVVM 패턴으로 개발할 수 있다. 
      • 네이티브에 가까운 UI 컴포넌트들을 제공한다. 
      • HTML5 애플리케이션을 빠른 시간 안에 개발할 수 있다. 
(출처: http://mobicon.tistory.com/488)

Ionic 공식 블로그에서는 다음과 같이 소개하고 있다. Where does the Ionic framework fit in Ionic"의 궁극적인 목표는 HTML5를 이용해 네이티브 앱을 더 쉽게 개발하기 위한 것이라고 소개하고 있다. 


Ionic은 nodeJS를 사용하여 자체적인 command를 가지고 있다. AngularJS를 사용하여 UI 또한 구성할 수 있다. 앱스토어 및 플레이스토어에 쉽게 등록할 수 있도록 설정을 할 수 있다. 마지막으로 위에 장점에도 설명하였듯이 자체적인 UI 컴포넌트를 가지고 있어 쉽게 애플리케이션을 구성할 수 있다. 아래 사진은 Ionic 자체 컴퍼넌트를 사용한 예제이다. 


ion-nav-bar 예제 {width:320px}

(출처: http://blog.saltfactory.net/ionic/create-hybrid-app-using-ionic.html)


최근 Ionic 팀에서는 Ionic2를 배포하엿다. (Ionic팀의 Ionic2 소개) 기존 Ionic에서는 AngularJS를 사용하였지만 Ionic2에서는 시대의 흐름에 맞추어 AngularJS2를 사용하였다. 그러면서 자연스럽게 AngularJS 버전이 바뀌면 JavaScript에서 TypeScript로 옮겨간 것 처럼, Ionic또한 TypeSript를 사용하고 있다. 


Ionic에 대한 자세한 정보를 알아보기 위해서는 'Ionic 공식 홈페이지''Ionic 포럼'을 확인해보면 좋다. 현재 Ionic에 대한 정보는 Stackoverflow보다 Ionic 포럼을 활용해야만 더 자세히 알 수 있을 것이다. 



참고

http://blog.saltfactory.net/ionic/create-hybrid-app-using-ionic.html

http://mobicon.tistory.com/488



MEAN Stack 이란? 

MEAN Stack 이란 다음 같은 독립적인 기술 이름의 각 앞글자의 철자를 따 온 것이다. 

M: MongoDB  E: ExpressJS  A: AngularJS  N: NodeJS

한 번쯤 이름을 들어본 사람은 알겠지만 각각의 언어는 모두 JavaScript에 그 기반을 둔다. 과거에는 웹 서비스를 개발하기 위해서는 프론트엔드를 위한 HTML/CSS/JavaScript와 서버를 위한 PHP/JSP/ASP, 또한 데이터베이스를 위해 MySQL/Oracle등을 배웠어야 했다. 이를 위해 각가의 언어를 배워야했고, 유지/보수 차원에서도 힘이들었다. 하지만 MEAN Stack을 사용하여 JavaScript 하나의 언어로 웹 애플리케이션을 만든다면 큰 장점을 가지게 된다. 


MongoDB

MongoDB는 NoSQL 진영의 대표적인 데이터베이스 기술이다. NoSQL은 기존의 RDB (Relational Database) 형식과 달리 Column과 Row를 가진 Table 형식을 가지지 않는다. Row는 있지만 Column은 가지지 않으며, key/value로 이루어져 있다. 

이로인해 엄격한 구조적 지배에서 벗어나 확장성이 매우 높아졌다. 또한 RDB형식에는 하나의 Table이 다른 것을 종속하지 못하였지만, NoSQL형식에서는 가능하다. 

MongoDB는 JSON을 바이너리화시킨 BSON이라는 형태로 값을 저장한다. 아래는 MongoDB의 예제이다. (_id는 Document를 MongoDB가 관리하기 위해 자동으로 부여하는 일종의 키값이다.)


Express

서버를 제작하다 보면, 귀찮고 시간이 많이 소요되는 작업이 많다. Express는 Node.js로 웹 애플리케이션 제작시 서버의 반복적 잡업을 간편화 시켜주는 프레임워크이다. 

- 서버 설치의 간편화
Node.js는 유연한 구조를 가지고 있는 대신, 웹사이트를 제작하여 구동하기까지 힘든 작업을 동반한다. Express는 다음의 방법들을 통해 이를 추상화하여 간편하 하였다. 
    • 웹 서버로의 요청
    • 요청에 대한 웹 서버의 응답
    • 웹 애플리케이션 구성하기 위한 체계화된 디렉토리 구조
- URL Routing 응답 및 매핑

- View: HTML 응답

- 세션관리

AngularJS

AngularJS는 HTML과 HTML에 삽입되어 나타나는 데이터를 함께 묶어서 표현해 주기 위해 사용된다. 웹페이지의 데이터 값에 변화가 생길 때, AngularJS는 변화를 곧바로 적용하여 업데이트를 가능하게 해준다. 이러한 방식을 Two-way Binding이라 부른다. (새로고침을 하지 않아도 웹창이 업데이트 되는 것)\


최근에는 Google Angular 팀에서 AngularJS 2를 내놓았다. 이는 AngularJS 1을 migration하지 않는 완전 새로운 프레임 워크를 내놓았기에 개발자들 사이에서 많은 의견이 오고갔다. 가장 큰 특징은 기존에 있던 Controller 기능은 사라지고, 웹을 Component화 시켰다. 기능을 모두 Component화 시켜 레고블록과 같이 조립시키기 위한 것이다. 


이를 위해 AngularJS1의 주요 기능인 Contorller, $cope, modeule, jqlite같은 요소들이 삭제되고, AtScript가 추가되었다. 


NodeJS

[Node.js 공식 홈페이지]
"Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율
적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다."

NodeJS는 서버를 구축하기 위해 사용되는 프레임워크이다. 웹 서버와 웹 서버에서 구동되는 애플리케이션 구축을 도와준다. NodeJs는 HTTP 서버 라이브러리를 포함하고 있는데, 이는 웹 서버를 실행시키기 위한 Apache 같은 서버 프로그램이 필요하지 않다는 것이다. 이에 Apache와 같은 서버 운용정책에 종속 적이지 않고, 다양하게 개발하는 것이 가능하다. 정책이 없는 만큼 복잡하기에 위에 적은 Express가 존재한다. 


NodeJS의 특징 중의 하나는 단일 쓰레드 환경을 도입한 것이다. 이에 동시접속자가 많아도 느려지지 않게 서비스를 구성할 수 있다. 이를 위한 것은 앞선 키워드 중 'Non-blocking I/O'와 'Event Loop'를 참고 바란다. 


참고

http://dog-paw.tistory.com/entry/MEAN-%EC%8A%A4%ED%83%9D-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C-MongoDB-Express-AngularJS-Nodejs




지난 포스팅에서 MVC를 비롯한 여러 디자인 패턴에 대해 알아보는 시간을 가졌다. 디자인 패턴을 비롯하여 웹서비스를 구현하기 위해서는 많은 여러가지 기술들이 접목되어야한다. 이러한 기술들을 無에서부터 쌓아나가기에는 시간과 돈이 많이 들 것이다. 이를 보완하여 無가 아닌 有에서 시작하기 위해 도와주는 것이 Framework이다. 


Framework

"소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스를 제공하는 것" 디자인 패턴으로 유명한 랄프 존슨 교수가 정의한 Framework이다. 위 정의를 보고, 'Framework와 라이브러리의 차이가 그럼 뭐지?' 라는 의문이 든다. 


라이브러리 '자주 쓰일 만한 기능들을 모아 놓은 클래스들의 모음집'로 정의할 수 있다. 하지만  Framework는 라이브러리에 기능은 물론, '자주 쓰일 만한 기능들을 모아 놓고, 개발자가 나름대로 기능을 확장, 설계 변형 하면서 사용해나갈 수 있는 모음집'으로 정의할 수 있겠다. 


즉, 쉽게 말하여 라이브러리지만 개발자가 주어진대로 사용하는 것이 아니라 입맛에 맞춰 확장, 설계, 변형 할 수 있는 집합체를 말할 수 있다. 그래서 Framework는 코딩을 하는데 있어 뼈대 및 골조라고 할 수 있다. 


- Framework의 장점

      • 동일한 결과를 얻기 위한 코딩 속도 보다 빠르고 간편하게 작성 가능
      • 개발자의 수준을 평준화 시키게 된다. (= 일정 수준의 성능이 나온다.)
      • 다른 사람이 작성한 코드라도 쉽게 패턴을 익히고 유지 보수에 편리하다. 
이어서 Framework의 여러 종류들에 대해 알아보자. 


참고

http://blog.naver.com/PostView.nhn?blogId=superb_lr&logNo=220560754376&categoryNo=70&parentCategoryNo=-1&viewDate=¤tPage=&postListTopCurrentPage=&isAfterWrite=true


- Framework7

Framework7은 무료 오픈 소스이며 HTML로 iOS 및 Android 하이브리드앱을 만드는 Framework이다. 


- Spring Framework

웹 서비스의 규모가 점점 커지며 엔터프라이즈급 개발을 해야할 일이 많이 생겼다. 이를 해결하기 위해 등장한 Spring Framework는 자바 애플리케이션 개발을 위한 포괄적인 기능을 제공하는 자바 플랫폼이다. Spring은 당신이 애플리케이션에 집중할 수 있도록 포괄적인 infrastructure를 둔다. MVC 모델을 기본적으로 제공한다. 




중, 고등학교 미술 시간 그림을 그릴 때 우리는 '구도'에 대해 배웠고, 이를 활용하여 그림을 그렸던 기억이있다. 컴퓨터 프로그램을 만들 때도 '구도', 전문용어로 '디자인 패턴'이 중요하다. 디자인 패턴은 건축으로 치면 공법에 해당하는 것으로 소프트웨어의 개발 방법을 공식화 한 것이다. 소수의 뛰어난 엔지니어가 해결한 문제를 다수의 엔지니어들이 처리할 수 있도록 한 규칙이면서, 구현자들 간의 커뮤니케이션의 효율성을 높이는 기법이다.  (위키피디아 참고)


웹 서비스를 디자인하는데 자주 사용되는 여러 디자인 패턴들이 있다. 자주 사용되는 만큼 검증된 내용들이고, 웹 서비스를 효율적으로 운영하는 것을 도와준다. 오늘은 그 디자인 패턴들에 대해 알아보고자 한다. (Model과 View를 어떻게 연결 지으냐에 따라 각 패턴이 나뉘게 된다.)


MVC (Model View Controller)

오늘날 웹 프레임워크의 시발점이다. MVC 모델이란, 하나의 웹 애플리케이션을 Model, View, Controller라는 세 가지 요소로 나누어 각각에 대하여 고유한 역할을 부여하는 일종의 설계 패턴이다. 쉽게 말하면 각 분야별로 일을 분업하여 전담하는 주체라고 할 수 있다. 

MVC 모델을 잘 이해하는 것이 웹 개발자에게는 대단히 중요하다. 특히 Model과 View는 MVC 외에도 사용되는 개념이니 유의해서 알도록 하자. 

- Model (모델)
Model은 데이터를 다루는 요소이다. Mysql, MongoDB와 같은 DBMS(Database Management System)를 통해 데이터베이스 상에서 새로운 테이블을 만들고, 저장하고, 수정하는 등 데이터를 다루는 거의 모든 작업을 담당한다. 

- View (뷰)

View는 웹 서비스 사용자들에게 직접적으로 보여지는 부분을 다루는 요소이다. 클라이언트가 브라우저 상에서 볼 수 있는 부분들, 즉 외관을 구성하는 요소들을 아우른다. 키워드 첫 부분에 설명한 웹 페이지 표현 요소들인 HTML, CSS, JavaScript 등의 파일들이 이에 속한다. 


- Controller (컨트롤러)

Controller는 Model과 View 중간에서 둘 간의 상호작용을 중재하는 요소이다. 쉽게 말하면 Model이 관리하는 DB에 저장된 데이터들을, 웹 브라우저 즉, View 창에 띄워주는 역할을 한다. 


즉, Controller는 클라이언트의 URL 요청을 받아(입력을 담당한다) 웹페에지를 보여주고자 하는데, 그 과정에서 필요한 데이터를 얻기 위해 Model에게 데이터를 요청하고, Model이 DBMS를 조작하여 해당 데이터를 찾아와 Controller로 전달해주면, Controller는 이 데이터를 해당 웹페이지의 View에 반영한 뒤 클라이언트 측으로 제공하는 것이다. 



(출처: http://coding-dragon.tistory.com/4)


위 그림과 같이 모든 입력은 Controller가 받아서 처리한다. 입력이 들어오면 Controller는 입력에 해당하는 Model을 업데이트하고, Model을 표현해 줄 View를 선택한다. 하나의 Controller는 여러개의 View를 가질 수 있으며, Controller는 여러개의 View를 선택하여 Model을 표형할 수 있다. 반대로 View는 Controller에서 어떤 동작이 일어나는지 알수 없다. 


이때 Controller는 View를 선택할 뿐 직접 업데이트 하지 않기 떄문에, 주로 다음과 같은 방법을 통해 View를 업데이트 한다. 

    • View가 Model을 직접 사용하여 업데이트

    • Model에서 View에게 Notify해 주는 방법

    • View에서 Polling하여 Model의 변화를 받아오는 방법

결국 View 화면을 업데이트하기 위해 Model을 직/간접적으로 참조하기 때문에 서로간의 의존성을 완전히 없앨 수 없다. '중매 아줌마'를 연상시켜보자. '중매 아줌마'는 남/녀를 선택하여 소개만 시켜줄 뿐, 서로가 서로에 대해 직접 알아가야한다. 즉, MVC 또한 Controller는 소개만 시켜줄 뿐 Model과 View가 직접 알아가야하는 부분이 있다. 이에, MVC 패턴을 사용할 경우 View와 Model간 의존성을 최소화 시키는게 좋은 구성이다. 


참고

- 코드라이언 (http://www.codelion.net)

http://coding-dragon.tistory.com/4



MVP (Model View Presenter)

MVP 모델은 MVC 모델의 단점을 보완하고자 파생된 모델이다. Model, View의 개념은 기존 MVC 모델과 같다. 하지만 MVC 모델의 한계였던 Model과 View의 의존성을 없애기 위해, Controller 대신 Presenter를 사용한다. 


(출처: http://coding-dragon.tistory.com/4)

Presenter는 Model과 View의 상호작용을 담당한다. Client에서 들어오는 입력은 MVC와 다르게 View가 받아 처리하며, 이벤트가 들어왔을 때 View는 이벤트를 Presenter에 전달한다. Presenter는 이벤트를 바탕으로 Model을 조작하고, 이를 바탕으로 View에 바인딩하면 각 요소들이 업데이트 되는 구조이다. 

View는 Presenter와 1:1 관계로 이루어진다. MVC에서 Controller는 View를 선택하고 Model을 조작하는 역할만 수행하고, 실제 화면 갱신은 Model과 View의 상호작용으로 이루어졌다. 하지만 MVP 모델에서는 Presenter가 Model과 View중간에서 상호작용을 관리하며 실제 화면 갱신 작업을 담당한다. 

즉, Presenter는 View와 그에 해당하는 Model의 인스턴스를 가지고, Model과 View 사이의 매핑을 전적으로 담당하는 구조이다. 이때 Model은 Presenter의 요청에 의한 처리만 수행하면 되므로 다른 요소와의 상호 작용에 대해 신경쓸 필요가 없다. 

Model과 View의 의존성은 MVC와 달리 사라졌지만. 여전히 Presenter와 View 간의 1:1관계로 인한 둘의 의존성이 매우 강해진다는 이슈가 있다. 

참고 및 인용

MVVM (Model View ViewModel)

이 역시 MVC 모델에서 파생되었으며, Model과 View 사이으이 의존성 뿐 아니라 View와 Controller 사이의 의존성도 고려하여 각 요소가 완전히 독립적일 수 있도록 설계된 패턴이다. 


(출처: http://coding-dragon.tistory.com/4)


MVP에서 Presenter와 View가 의존 관계에 있었다면, MVVM에서 View와 ViewModel은 독립적인 관계를 형성한다. MVP와 마찬가지고 View는 Client로부터 입력을 받고, ViewModel은 Presentation logic을 처리하여 View에 데이터를 전달하는 역할을 한다. 


각각의 View는 자신이 사용할 ViewModel을 선택하며, ViewModel은 Model을 베이스로 Presentation Logic에 따라 서로 다르게 구현된다. 따라서 View에 어떤 ViewModel을 연결하느냐에 따라 로직 처리가 달라지고, 각 로직 처링 따라 Model이 변경되면 해당하는 ViewModel을 사용하는 View가 자동으로 업데이트된다. 


결론

- 웹 디자인 프레임워크 사용의 장점
    • 재사용 및 유지/보수에 용이하다. 
    • HTML을 직접 다룰 수 있어 반응형 웹과 모바일 디바이스 지원 측면에서 좋은 전략을 세울 수 있다. 
    • 분업에 용이하다. 
    • URL 라우팅이 유용하고, 어떻게 구성하고 해석할지 쉽게 정할 수 있다. 
    • 시스템에 다른 부분을 변경하지 않으면서 UI를 쉽게 변경할 수 있다. 
    • 현재 사용하는 DB를 다른 환경으로 옮길지라도 룰에는 영향이 없다. 
    • 각 요소가 서로 독립적이다. 
그렇다면 위 3가지 모델 중 어떤 모델을 사용하는 것이 가장 좋을까? 어떤 모델을 사용하면 조금 더 깔끔한 구조로 코드를 작성하고 쉽게 테스트 할 수 있을까? 

정답은 없다. 현재 개발하고 있는 프로그램 규모에 따라 오버 펙이 되지 않도록 적절한 모델을 찾아 적용하는 것이 필요하다. 


+ Recent posts