* [끄적끄적]은 '일기' 혹은 '아주 사적인 나의 생각'을 풀어놓은 공간이기에. 공유하고 싶은 포스트만 부분적으로 공개합니다. 


[1]

presence of God를 느껴야겠다. 

내 삶 속에 주님을 느끼지 못하니, 죄에도 무감각해지고, 옳고 그름도 내 기준에서 한다. 

주님이 내 삶과 지금 이 곳에 임재하고 계심을 느끼자. 


[2]

일할 때는 그렇게 효율성을 추구하면서. 

왜 공부할 때는 비효율적으로 할까?

핸드폰, 컴퓨터... 

공부도 일할 때 처럼.. 


[3]

졸업이 다가온다.

사람들과 헤어짐에 오는 아쉬움.

불확실한 미래에 대한 두려움. 


사람들과는 아쉽지 않게 작별인사하고, 

불확실한 미래에 대해서는 주님 안에서 이겨내도록. 


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 인증서가 장착되지 않은 웹페이지는 보안상 취약할 수 밖에 없다. 

참고



[대화의 신_래리킹]

오랜만에 서점에 가서 책을 샀다. 자치회를 준비하면서 말, 대화에 대한 나의 부족한 부분이 드러나서일까? 대화를 할 때 내 머릿 속에서 완전히 정리가 안되서 내뱉는 느낌들이었다. 


래리킹이 말하는 대화의 법칙은 간단했다. (사실 여러가지 법칙이 있을 수 있지만 내 머릿 속에 남는건 많지 않다.) 솔직해져라 그리고 많이 알아라 . 대화에는 솔직할 필요가 있다. 당신이 잘 모르는 일이라면 혹은 대화에 자신이 없다면 미리 서두에 그에 대해 말해라. 대화는 쌍방 관계이지 내가 일방적으로 말하는 것이 아니다. 솔직해져야 상대방도 감안하여 듣는다. 그리고 내 자신을 들어내야 상대방도 마음을 연다. 그리고 아는 만큼 말할 수 있다. 회의 뿐만 아니라 일반적인 대화에서도 내 머릿 속에 든 것이 있어야 말을 잘 할 수 있다. 


대화의 시작은 질문에서 부터이다. '당신은?'이라고 되묻는 것을 잊지 말아라. 앞으로 공식적인 회의에서는 좀더 적어가야할 필요가 있을 것 같다. 모든 전문이 아니더라도. 내가 생각의 흐름을 따라갈 수 있을 정도의 키워드 정도는 있어야. 말을 좀더 자연스럽게 할 수 있지 않을까. 


대화의 신
국내도서
저자 : 래리 킹(Larry King) / 강서일역
출판 : 위즈덤하우스 2015.01.27
상세보기





[삼성처럼 회의하라_김영한, 김영안]


대화에 대한 부담감 때문인지, '대화의 신'에 이어 이 책을 고르게 되었다. 약 2주간 자치회 합숙을 하면서 여러 회의를 하였다. 항상 회의를 하면서 느낌점은 '비효율적'이라는 점이다. 회의를 통해 결론이 나오지 않고, 좋은 해결책이 제시되지 않은 것은 아니지만. 그 과정 중 다른길로 계속 세고, 잡담이 오가는 것이 너무 비효율적이라는 느낌을 지울 수 없었다. 


그렇다면 삼성은 어떻게 회의하는가. 일단 회의 의제 즉 목적이 정확히 제시되어야한다. 이것은 회의시간에 제시되어하는 것이 아니라 미리 공지가 되어 참석자들이 준비된 상태에서 회의를 들어올 수 있게 하여야한다.


회의록, 회의 시간이 끝났다고 모든게 끝난 것이 아니다. 희의간 나온 안건등을 간략하게 정리하여 참석자들에게 나누어 주어, 결정된 사항이 실제 실행될 수 있도록 하여야 한다. 불필요한 회의는 지양되어야한다. 항상 회의를 하기 전에 3가지를 확인해보아햐한다. 

    • 꼭 필요한 회의인가?
    • 실무자(담당자)가 스스로 결정할 수 있는 일은 아닌가?
    • 회의말고 더 좋은 수단은 없는가? 
그렇다면 회의진행자가 갖추어야 할 자질은 무엇인가? 일단 시간을 준수하게 하여야한다. 그래서 참석자들에게 '이 회의는 항상 정시에 시작하는구나'라는 긴장감을 놓지 않게 하여야한다. 시간준수는 시작시간에만 국한되는 것이 아니다. 끝나는 시간도 준수하여야하고, 앞에 타이머를 놓고 회의하는 것도 방법이 될수 있다. 

회의 중간중간에는 정리를 해주는 것도 중요하다. 이를 위해 화이트보드를 사용하는 것은 좋은 방법이다. 회의가 끝난 후에는 결론을 이끌어내고, 정리해주는 것도 잊지 말아야한다. (중간에 회의의 논점이 새면 바로 잡아주는 것은 당연한 이야기이기에 생략하도록한다.)

회의는 말하는 것 뿐만 아니라 듣는 것도 중요하다. 상대방을 존중해주고, 상대의 이야기에 관심을 기울인다는 것을 바디랭귀지등으로 반응해 주어야한다. '1분 말하고, 2분 듣고, 3분간 반응해준다' 를 잊지 않도록한다. 본인이 말을 하게 된다면 중요한 것 부터 말하고, 한번에 하나씩 말하는 것을 잊지말자. 

삼성처럼 회의하라
국내도서
저자 : 김영안,김영한
출판 : 청년정신(더불어책) 2004.08.06
상세보기






잡스에 의해 아이폰이 세상에 공개된 이후, 스마트폰은 전세계로 퍼져나갔다. 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