The Pursuit of Happyness

반응형

테스트 환경 

Ubuntu (16.04.2 LTS)


예전에 한번 Ubuntu 에서 JDK 설치하기를 포스팅한 적이 있었는데, 다시 설치하다보니 예전 방법에서는 스크립트 오류가 나서 새로 포스팅을 합니다. (예전 포스트 바로가기)


참고로 예전 방식대로 oracle java 홈페이지에서 rpm파일을 다운로드 받아서 alien 을 이용해서 설치 하게 되면 /usr/sbin/alternatives 를 찾을 수 없다는 에러가 나오면서 스크립트가 중단되는 에러가 발생하며 종료가 됩니다. 


그래서 쉽게 설치할 수 있는 다른 방법을 이용해서 설치해 보겠습니다.


1. 먼저 터미널 창을 엽니다. (Ctrl + Alt + t)


2. 다음과 같이 입력하여 repository 를 추가합니다. 


$ sudo add-apt-repository ppa:webupd8team/java 



3. 설치 스크립트를 업데이트하고 설치합니다.


$ sudo apt update; sudo apt install oracle-java8-installer



(2017년 3월 19일 현재 jdk9 는 정식 릴리즈 되지 않은 상태지만 추후에는 설치 패키지 명을 oracle-java9-installer 로 바꿔주기만 하면 jdk9 도 설치가 가능할거에요..)


4. 추후에 나오는 팝업은 긍정적으로 답변하면 설치가 시작됩니다. (라이센스 동의 등..)


5. 환경변수 등록을 추가하고 싶다면 아래 명령어도 실행해 봅니다.


$ sudo apt install oracle-java8-set-default




ps. 혹시 예전 방법으로 설치하다가 오류가 나서 중간에 막혀있는 경우 아래 방법을 이용해서 해결합니다. 


1. 터미널을 엽니다. (Ctrl + Alt + t)


2. 다음 경로로 이동합니다.


$ cd /var/lib/dpkg/info



3. JDK 설치 관련 파일들을 체크합니다.


$ ls -ltr | grep jdk


jdk 설치 관련 파일들이 화면에 출력됩니다.


4. 설치하던 버전에 맞는 파일들을 삭제합니다. (잘못 삭제하면 다른 문제가 생길 수 있으니 주의!)


5. 다음 명령어로 패키지 삭제를 완료합니다.


$ sudo apt autoremove





반응형

반응형

테스트 환경


Ubuntu (16.04.1 LTS)


Virtual Box (V5.1.14)


Vagrant (1.9.1)



먼저 Vagrant 에 대해서 간략히 소개하자면.. 개발환경을 쉽고 빠르게 설정하기 위한 Virtual Machine 관리 툴 입니다. 


Vagrant는 Virtual Box 같은 Virtual Machine 프로그램을 명령어로 제어합니다.



@ Virtual Box 와 Vagrant 설치 


설치는 OS 환경에 따라 약간씩 다르지만 Ubuntu 기준으로 설명합니다. (Windows 나 Mac OS의 경우 GUI 로 쉽게 설치가 가능합니다.)


1) 먼저 Virtual Box 를 설치합니다. 


1. Virtual Box 설치에 앞서서 필요한 의존성 라이브러리들을 설치합니다. 


$ sudo apt install libqt5x11extras5 libsdl1.2debian libsdl-ttf2.0-0


각자 환경에 따라서 위의 라이브러리 이외에도 추가로 필요한 것들이 있을 수도 있습니다.


2. 홈페이지에서 deb 패키지를 다운로드 합니다. (https://www.virtualbox.org/wiki/Linux_Downloads)


3. dpkg 명령어로 다운로드 받은 패키지를 설치합니다. (아래는 5.1.14 버전 예시)


$ sudo dpkg -i  virtualbox-5.1.5.1.14-112924-Ubuntu-xenial_amd64.deb



2) 이번에는 vagrant 를 설치합니다.


1. 홈페이지에서 deb 패키지를 다운로드 합니다. (https://www.vagrantup.com/downloads.html)


2. dpkg 명령어로 다운로드 받은 패키지를 설치합니다. (아래는 1.9.1 버전 예시)


$ sudo dpkg -i vagrant_1.9.1_x86_64.deb 



@ Vagrant Box


Vagrant는 Virtual Machine을 쉽고 빠르게 생성하기 위해서 Box를 이용합니다.


Box 는 Virtual Machine 을 생성하기 위한 이미지 정도로 이해하시면 됩니다.



1) 먼저 Box 관리에 대한 명령어를 알아보겠습니다.


1. 현재 로컬 컴퓨터에서 사용가능한 Box들을 확인하는 방법


$ vagrant box list 



2. 로컬 컴퓨터에 필요한 Box 를 추가하는 방법


먼저 필요한 Box 의 URI를 확인합니다. Vagrant 홈페이지에 있는 Box 링크에서 찾을 수도 있고, (https://atlas.hashicorp.com/boxes/search) 아니면 필요한 Box 이미지를 다운로드 받아서 파일 경로를 지정할 수도 있습니다.


아래 명령어를 사용하면 vagrant 가 Box를 리스트에 추가합니다.


$ vagrant box add [box name or URI] --clean



3. 로컬 컴퓨터에 있는 Box를 제거 하는 방법


필요에 따라 같은 Box의 다른 버전들을 같이 가지고 있는 경우 버전을 명시해 주어야 합니다.


$ vagrant box remove [box name] --box-version [box version] 



4. 로컬 컴퓨터의 Box가 최신 버전인지 확인하는 방법


$ vagrant box outdated --global



@ Virtual Machine 관리 명령어


1. Virtual Machine 생성


$ vagrant init [box name or URI] --box-version [box version]


위의 명령어는 명령어를 실행한 경로에 "Vagrantfile" 을 생성하는데, 이 파일은 실제 Virtual Machine 을 생성할 때 필요한 설정 정보입니다.


실제로 존재하지 않는 위치를 입력해도 "Vagrantfile" 은 생성이 되지만, 다음 과정에 에러가 발생하게 됩니다.


2. Virtual Machine 시작 


$ vagrant up


위의 명령어는 "Vagrantfile" 이 있는 위치에서 실행되어야 하며, 설정파일에 맞게 새 Virtual Machine 을 Virtual Box에 실제로 생성하고 Virtual Machine 을 시작합니다. 만약 로컬 컴퓨터에 존재하지 않는 Box의 경우라도 위의 Box 링크 사이트에서 검색이 가능한 Box의 경우 다운로드하고 로컬 컴퓨터에 Box를 추가하고 나서 Virtual Machine을 생성하게 됩니다.


3. Virtual Machine 에 접속하기


$ vagrant ssh


위의 명령어를 이용해서 해당 Virtual Machine의 ssh 서비스에 접속할 수 있습니다. "Vagrantfile" 이 위치한 곳에서 실행해야 하며, ssh 를 직접 이용하고자 한다면 인증 키를 확인해서 접속할 수 있으나 상당히 번거롭기 때문에 위의 명령어를 이용하는 것이 가장 편합니다. 윈도우 서버를 위한 rdp 나 powershell 명령어도 있는데 제대로 동작하는지 확인은 해보지 못했습니다.


4. Virtual Machine 종료시키기


$ vagrant halt



5. Virtual Machine 삭제하기


$ vagrant destroy



~

반응형

반응형

OpenUI5 관련해서 마지막으로 Data Binding 에 대해서 알아보도록 하겠습니다.


최근 웹 개발 트렌드는 클라이언트에서 기본 페이지 레이아웃을 로딩하고, 웹브라우져에서 렌더링해서 보여줄 데이터를 비동기 방식으로 받아와서 화면에 보여주는 형태를 선호합니다. 데이터 바인딩은 특정 컨트롤에 표시되는 정보를 데이터 모델과 연결하여 컨트롤 상에서 데이터를 변경해도 그 결과가 모델에 반영이 되고, 반대로 모델의 데이터를 변경해도 컨트롤에 바로 표시되게 하는 것 입니다.


쉽게 이야기해서 Textfield 와 특정 모델을 연결시켜 놓으면, 사용자가 Textfield 에 입력한 값이 모델에 바로 연동되며, 반대로 javascript 상에서 모델의 값을 변경하면 연결된 Textfield 값이 변경됩니다.


이번 예제에서는 지난번에 만든 페이지를 데이터 바인딩을 사용해서 변경해 보겠습니다.


따라서 실제로 화면에서 보여지는 부분은 차이가 없습니다.


지난번에 작성한 Main.view.js 파일에서 List에 나타나는 데이터와 화면 오른쪽에 보여지는 사이트 정보를 데이터 모델로 옮기고 해당 부분을 바인딩해 보도록 하겠습니다.


기존에 List 컨트롤에 addItem으로 추가했던 ListItem 데이터 대신 바인딩할 Template을 준비합니다.


new sap.m.List({ showNoData: true , columns: [ new sap.m.Column() ] , items: { path: "/d/listItems" , template: new sap.m.StandardListItem({ title: "{title}" , icon: "{icon}" , info: { parts: ["rating"] , formatter: oController.infoFormatter } , description: "{description}" }) } })


List의 경우 여러 개의 아이템이 들어갈 수 있으므로 모델은 배열 형태로 표시됩니다. 따라서 해당 배열의 경로를 path로 지정하고 각각 표시될 정보를 배열 데이터의 키로 지정합니다.  예제에서 title: "{title}" 로 표시된 부분에서 {title} 이 바인딩 될 모델 데이터 상대 경로 입니다. 실제 경로는 [path] + /[배열 index]/ + title 이 됩니다.


그리고 info 항목을 보면 formatter를 사용했습니다. parts에 해당 모델에서 읽을 키들이 정의 됩니다. 여기서는 rating 값을 읽어서 controller에 있는 infoFormatter 함수가 화면에 출력될 값을 생성해서 return 해 줍니다.


비슷한 방법으로 TextArea에 들어가는 값도 바인딩을 해 보았습니다.


, new sap.m.TextArea({ cols:50 , rows:10 , value: "{/d/siteDescription}" }).addStyleClass("textArea")


TextArea에 들어가는 값은 경로를 {} 로 묶어 주면 됩니다. (value: "{/d/siteDescription}" 부분)



그리고 각 컨트롤에 모델을 지정해 주어야 하는데, List 나 TextArea는 View 안에 들어가는 컨트롤이기 때문에 View 에 모델을 설정해 주면 됩니다. 지금까지 사용하지 않았던 Main.Controller.js 파일에서 해당 부분을 다루어 보겠습니다.


먼저 컨트롤러에서 사용할 모델을 준비합니다.


oModel: new sap.ui.model.json.JSONModel()



컨트롤러 객체가 생성될 때 제일 먼저 실행되는 onInit 함수에 모델을 View에 바인딩하는 코드 (빨간색 표시 부분) 과 모델에 데이터를 설정하는 코드 (파란색 표시 부분) 을 추가합니다.


, onInit: function() { this.getView().setModel(this.oModel); this.oModel.setData({ d: { listItems: [ { title: "MoonBucks", icon: "sap-icon://e-care", rating: 2, description: "Description" } , { title: "StartBucks", icon: "sap-icon://e-care", rating: 4, description: "Description" } , { title: "CoffeeVince", icon: "sap-icon://e-care", rating: 3, description: "Description" } , { title: "StarBugs", icon: "sap-icon://e-care", rating: 1, description: "Description" } ] , siteDescription: "In the long history of the world, only a few generations have been granted the role of defending freedom in its hour of maximum danger. I do not shrink from this responsibility - I welcome it." } }); }



View에 모델이 바인딩되어 있기 때문에 데이터를 먼저 세팅하고 모델을 지정하든, 모델을 먼저 지정하고 모델에 데이터를 넣어 주던 순서는 상관이 없습니다.


마지막으로 rating 부분을 숫자에서 별표시로 바꿔주는 formatter 코드 입니다.


특별한 것이 없어서 설명은 생략합니다.


, infoFormatter: function(pInfo) { var stars = "★★★★★☆☆☆☆☆"; return stars.substr(5-pInfo, 5); }



이상으로 UI5에 대한 간단한 설명을 마치도록 하겠습니다.


바인딩이 적용된 소스 코드는 아래 git 링크에서 받아 보실 수 있습니다.


https://github.com/shineum/openui5/tree/Ch03_Data_Binding





반응형

반응형

이번에는 UI5 콤포넌트들을 이용해서 화면 구성을 해 보겠습니다.


결과물은 대략 다음 화면처럼 나오게 됩니다.


먼저 새로운 화면 구성을 위해서 Main.view 를 준비하였습니다.


지난번 app.js 파일에서 view 를 추가해주는 부분도 새로운 view에 맞게 코드를 변경해 줍니다.


Main.view 에서 보여지는 내용을 간단하게 리뷰해 보면, 화면 상단에 헤더 영역과 Section Title 이라고 표시되는 페이지 타이틀, 그리고 메인 컨텐츠로 리스트 아이템과 텍스트가 나오게 됩니다.


화면에서 색상, 폰트 등은 CSS 를 이용해서 처리한 부분이기 때문에 UI5 컴포넌트들 만으로는 위의 화면과 같이 출력되지는 않습니다.


참고로 CSS 가 적용되지 않았을 때의 화면 모습은 다음과 같습니다.

여기서 사용된 컴포넌트들을 헤더 영역부터 살펴보겠습니다.


헤더 영역에서는 영역을 좌측, 가운데, 우측으로 나눠서 다른 컴포넌트를 넣을 수 있도록 sap..m.Bar를 커스텀 헤더로 지정하였습니다. 그리고 왼쪽 영역에는 Label을 그리고 오른쪽 영역에는 Link를 넣어 주었습니다. 마지막으로 CSS에서 해당 element 를 쉽게 지정할 수 있게 addStyleClass를 이용해서 클래스 이름을 지정해 주었습니다.


var oPage = new sap.m.Page({ customHeader: new sap.m.Bar({ contentLeft:[new sap.m.Label({text:"OpenUI5 Logo"})] , contentRight: [new sap.m.Link({text:"Login"})] }).addStyleClass("headerBar") });


Section Title 부분은 Label 을 추가해 주었는데, HBox를 이용해서 Label만 한 줄에 나오게 처리하였습니다. 역시 CSS를 위해서 클래스 이름을 지정해 주었습니다.


oPage.addContent( new sap.m.HBox({items:[ new sap.m.Label({text:"Section Title"}) ]}).addStyleClass("sectionTitle") );


메인 컨텐츠 부분은 좌측에는 리스트를 스크롤 컨테이너에 담아서 보여주고, 우측에는 TextArea를 사용해서 페이지에 대한 설명을 보여줍니다.


oPage.addContent( new sap.m.FlexBox({ items:[ new sap.m.ScrollContainer({content: [ new sap.m.List({ showNoData: true , columns: [ new sap.m.Column() ] })


// ITEM 추가해주는 부분은 생락

]}).addStyleClass("scrollContainer") , new sap.m.TextArea({ cols:50 , rows:10 , value: "텍스트 내용 생략" }).addStyleClass("textArea") ] }).addStyleClass("mainContent") );


이 페이지에서 사용하기 위해서 몇가지 구글 폰트들을 index.html 파일에 추가하였습니다.


<link href='http://fonts.googleapis.com/css?family=Oleo+Script' rel='stylesheet' type='text/css'> <link href='http://fonts.googleapis.com/css?family=Leckerli+One' rel='stylesheet' type='text/css'>


마지막으로 CSS 파일에서 각 컴포넌트들의 모양을 잡아주면 됩니다. (CSS 파일에 대한 설명은 생략합니다..)




소스 코드는 아래 git 링크에서 받아 보실 수 있습니다.


https://github.com/shineum/openui5/tree/Ch02_Basic_UI




반응형

반응형

이번에는 OpenUI5 를 이용해서 간단한 웹 애플리케이션을 만들어 보겠습니다.


프로그래밍 언어를 처음 배울때 늘 보게되는 Hello World 를 화면상에 나타내는 코드 입니다.


HTML에서 간단하게 Hello World 라고만 써줘도 되지만, 추후에 기능이 많고 복잡한 웹 애플리케이션을 제작하기 위해서 기본 프레임을 만들어 보는 연습을 한다고 생각하시면 되겠습니다.


이 예제에서는 Javascript View를 이용하였으며, View와 Controller를 분리하여 작성하였습니다.


웹 애플리케이션을 실행할 때 진입점이 되는 경로는 index.html 입니다.


그리고 웹 애플리케이션의 기본이 되는 코드가 담겨져 있는 app.js 파일을 js 폴더에 두었고,


View 파일과 Controller 파일을 z_fiori 라는 폴더에 생성해 두었습니다.



먼저 index.html 파일을 살펴보면, 다음과 같습니다.


<!DOCTYPE html> <html> <head> <meta http-equiv='X-UA-Compatible' content='IE=edge' /> <title>OpenUI5</title> <script id='sap-ui-bootstrap' src='https://openui5.hana.ondemand.com/resources/sap-ui-core.js' data-sap-ui-theme='sap_bluecrystal' data-sap-ui-libs='sap.m'> </script> <script type="text/javascript" src="js/app.js"></script> </head> <body class="sapUiBody"> <div id="content"></div> </body> </html>


UI5 라이브러리는 제공해주는 CDN URL을 링크해서 최신버전에 맞춰두었습니다.


그리고 애플리케이션 기본 코드인 app.js 를 포함시킵니다.



다음으로 app.js 파일을 살펴봅니다.


sap.ui.localResources("z_fiori"); var sapApp = new sap.m.App(); sapApp.placeAt("content"); sapApp.addPage( sap.ui.view("view.HelloWorld", { viewName: "z_fiori.HelloWorld" , type: sap.ui.core.mvc.ViewType.JS }) );


먼저 sap.ui.localResources 를 이용해서 z_fiori 폴더를 리소스 경로로 지정합니다.


리소스 경로로 지정하고 나면, require 기능을 이용해서 해당 폴더에 있는 파일들을 로딩할 수 있습니다.


다음으로 App 객체를 생성해서 index.html 에 있는 "content" 라는 영역에 위치시킵니다.


마지막으로 App 객체에 뷰에 해당하는 페이지를 추가하여 줍니다.


viewName으로 z_fiori.HelloWorld 를 지정해 주었으므로, 앞에서 지정한 z_fiori 리소스 폴더에 HelloWorld.view.js 파일과 HelloWorld.controller.js 파일을 생성해 줍니다.



HelloWorld.view.js 파일은 다음과 같습니다.


sap.ui.jsview("z_fiori.HelloWorld", {
    getControllerName: function() {
        return "z_fiori.HelloWorld";
    }
    , createContent: function(oController) {
        var oPage = new sap.m.Page();

        oPage.addContent(
                new sap.m.Text({text: "HelloWorld"})
        );
        
        return oPage;
    }
});


뷰에서는 컨트롤러 이름을 설정하고, 화면에 표시될 UI 컨트롤들을 배치합니다. 웹 애플리케이션의 특성상 대부분 CSS에서 보여주는 부분을 수정하겠지만, 간단한 배치는 속성값을 지정해서 처리할 수도 있습니다.



마지막으로 HelloWorld.controller.js 파일 입니다.


sap.ui.controller("z_fiori.HelloWorld", {
    onInit: function() {
    }
});


아직은 컨트롤러에서 하는 일이 없으므로 그냥 위와 같은 형태만 만들어 줍니다.


이렇게 구성하고 나서 웹브라우저로 열어보면 대략 다음과 같은 화면이 나옵니다.


처음 index.html 파일에서 SAP 의 Blue Crystal theme을 기본 theme으로 사용하겠다고 지정했기 때문에 위와 같은 바탕화면이 나오게 됩니다.


또한 sap.m.Page 는 기본 설정에서 위쪽에 흰색 바탕으로된 헤더 영역이 생기게 되며, 필요하지 않은 경우 제거할 수도 있습니다.


추후에 기본 UI 컨트롤들에 대해서 더 알아보도록 하겠습니다.




소스 코드는 아래 git 링크에서 받아 보실 수 있습니다.


https://github.com/shineum/openui5/tree/Ch01_Hello_World




반응형

반응형

오늘은 SAP 쪽에서 웹 클라이언트 개발에 많이 사용되는 OpenUI5 프레임워크에 대해서 설명해 보겠습니다.


OpenUI5 는 http://openui5.org/ 홈페이지에서 Apache 2.0 라이센스로 무료로 배포하고 있습니다.


기업용 소프트웨어를 오랜동안 서비스해서 인지, 프레임워크가 상당히 깔끔하고 안정된 느낌입니다.



웹사이트에서 소개된 Key Features의 제목은 다음과 같습니다.


1. 엔터프라이즈  웹 툴킷


2. 파워풀한 개발 컨셉


3. 풍부한 UI 컨트롤을 제공


4. 일관성 있는 사용자 경험


5. 무료로 배포되는 오픈소스


6. 웹 브라우저 및 휴대용 기기에서 같이 사용가능한 반응형




Get Started 섹션에서는 OpenUI5를 사용하는 기본적인 방법이 소개되어 있습니다. OpenUI5를 사용법은 다음과 같습니다.


1. 웹페이지가 로딩될 때 UI5 라이브러리가 로딩될 수 있게 스크립트를 추가합니다. 


먼저 소스코드는 다음과 같은데, OpenUI5 라이브러리를 resources 폴더에 미리 준비해 두거나 (다운로드 받아서 압축 해재) sap cdn 링크로 걸어 주면 됩니다.


<!DOCTYPE html>
<html>
<head>
<meta http-equiv='X-UA-Compatible' content='IE=edge' />
<title>Hello World</title>

<script id='sap-ui-bootstrap'
    src='resources/sap-ui-core.js'
    data-sap-ui-theme='sap_bluecrystal'
    data-sap-ui-libs='sap.m'
    data-sap-ui-compatVersion='edge'
    data-sap-ui-preload='async'>
</script>

<script>
     sap.ui.getCore().attachInit(function () {
         jQuery("#content").html("Hello World - UI5 is ready");
     });
</script>

</head>
<body class='sapUiBody'>
    <div id='content'></div>
</body>
</html>


OpenUI5 에 jquery.sap 라이브러리가 포함되어 있어서 별도로 jQuery 라이브러리를 추가하지 않아도 jQuery 기능을 사용할 수 있습니다. (물론 포함되어 있는 라이브러리 버전에 따라 지원되는 내용이 다를 수 있습니다.)


AngularJS 등의 프레임워크를 사용해 보신 분들은 쉽게 이해하실 수 있는 코드라 생각됩니다. body에 div 엘리먼트를 준비해 두고, 자바스크립트를 이용하여 페이지가 로딩될 때, div 에 "Hello World - UI5 is ready" 라는 텍스트를 넣어주게 됩니다.


2. OpenUI5 컨트롤을 이용합니다.


<!DOCTYPE html>
<html>
<head>
<meta http-equiv='X-UA-Compatible' content='IE=edge' />
<title>Hello World</title>

<script id='sap-ui-bootstrap'
    src='resources/sap-ui-core.js'
    data-sap-ui-theme='sap_bluecrystal'
    data-sap-ui-libs='sap.m'
    data-sap-ui-compatVersion='edge'
    data-sap-ui-preload='async'>
</script>

<script>
    sap.ui.getCore().attachInit(function () {
        new sap.m.Text({
            text: "Hello World"
        }).placeAt("content");
    });
</script>

</head>
<body class='sapUiBody'>
    <div id='content'></div>
</body>
</html>


위에서는 jQuery를 이용하여 div 엘리먼트에 값을 넣어 주었다면, 이번에는 OpenUI5에 있는 UI 컨트롤 객체(여기서는 sap.m.Text)를 생성해서 컨트롤 객체의 메쏘드 placeAt을 이용하여 해당 div 엘리먼트에 컨트롤 객체를 설정해 주었습니다.


3. XML 뷰 (코드는 http://openui5.org/getstarted.html#step3 에서 확인하세요)

웹 애플리케이션의 View를 XML 로 만들어서 별도의 파일로 생성합니다. 나중에 나오지만 OpenUI5는 XML 이외에도 Javascript 나 HTML 형태의 View도 지원하기 때문에 필요한 형태의 View를 사용하시면 됩니다. 뷰 파일명은 *.view.xml 형식의 컨벤션을 사용합니다. 웹페이지의 설명에서는 App.view.xml 이라는 이름을 사용했습니다.


4. 컨트롤러 (코드는 http://openui5.org/getstarted.html#step4 에서 확인하세요)

뷰와 마찬가지로 컨트롤러도 별도의 파일로 생성을 합니다. 

컨트롤러에 대한 컨벤션입니다.

- 컨트롤러 이름의 첫글자는 대문자를 사용한다.

- 연관된 뷰와 1:1 로 매칭시키며, 같은 이름을 사용한다.

- 이벤트 핸들러는 "on"으로 시작한다.

- 컨트롤러 파일명은 *.controller.js 로 끝난다.


5. 데이터 바인딩 (코드는 http://openui5.org/getstarted.html#step5 에서 확인하세요)

UI 컨트롤 객체에 데이터 모델을 연결합니다.

예제에서는 컨트롤러에서 JSON 모델을 생성하고, 뷰를 가지고 와서 생성한 JSON 모델을 세팅합니다.

뷰에서는 Input (sap.m.Input) 객체를 생성하면서 value 를 모델의 /recipient/name 값에 연결시킵니다.

또한 description 도 모델의 /recipient/name 과 연결합니다.

이렇게 연결을 해 두면 사용자가 Input 의 값을 변경하면, 연결된 모델의 /recipient/name 값이 같이 변경되며, 반대로 컨트롤러에서 모델의 /recipient/name 값을 변경하면, Input 값도 같이 변경이 됩니다. (value 와 description)

XML 뷰에서의 데이터 바인딩 문법은 다음과 같습니다.

- 중괄호"{ ... }" 는 데이터 바인딩이 사용되었음을 나타냄

- "/recipient/name" 은 해당 모델에서의 경로를 선언함




반응형

반응형

애플에서 오늘 새로운 맥북프로 라인업을 공개하였습니다.


주요 변경사항은 다음과 같습니다.


1. Function 키 위치에 터치 바 적용 (13인치에는 기존 Function 를 탑재한 버전이 추가됨) 및 터치 ID 적용 

2. 밝고 색재현률이 높아졌으며 전력 소모가 더 적은 디스플레이 적용

3. 2세대 버터플라이 Mechanism 키보드 적용

4. 트랙패드의 크기가 커짐

5. USB-C 형태의 Thunderbolt3 포트 제공 (15인치 기준 4개) - 어느 포트로도 충전 가능

6. 더 얇아지고, 작아지고, 가벼워짐

7. 10시간 배터리 지속

8. 인텔 6세대 CPU 채용

9. Radeon 그래픽 칩셋 채용 (15인치에만..)

10. 더 빨라진 SSD 스토리지



오늘 발표에서는 새로운 터치 바를 지원하는 프로그램 (애플리케이션) 몇가지를 소개하였습니다. 애플 소프트웨어 뿐 아니라 파이널 컷 프로나 포토샵, 그리고 DJ 소프트웨어로 시연을 해 주었습니다.



그리고 중요한 가격!







Function 키가 있는 13인치 맥북 프로의 경우에는 CPU 및 그래픽 칩셋, 메모리 동작속도가 터치바가 있는 제품보다 많이 떨어지게 나왔습니다. 


15인치 맥북 프로 기준으로 전세대에 비해서 대략 400달러 정도의 가격 상승이 있었습니다. 업그레이드 된 하드웨어를 감안할 때 가격상승은 어느 정도 이해할 수 있는 부분이지만, 하드웨어에 있어서는 충분히 3~5년을 써도 괜찮은 사양을 제공하던 애플이 이번에는 경쟁사에 비해서 앞선다고 하기 힘든 사양을 내놓은 부분이 너무 아쉽습니다. 지금이 2014년도 아니고 2016년이 끝나가는 시점인데, 업그레이드도 불가능한 맥북프로 15인치의 메모리가 16기가라는 것은 1~2년 이상 쓰기 힘들다는 것을 감안하면 너무 비싸게 나왔다는 생각이 듭니다. 지금 시점이면 최소 32기가 정도는 줬어야 하지 않나 싶습니다. 

그리고 윈도우 진영에서는 터치 스크린으로 화면 어디를 클릭해도 되는 제품들이 쏟아져 나오는데, Function 키 부분만 터치로 작동하게 하는 것은 뭔가 시대의 흐름을 잘못 읽고 있는 것이 아닌가 합니다.


제품이 나오고나서 봐야하겠지만, 현재까지 다음과 같은 문제점이 많이 거론되고 있습니다.


1. Function 키 삭제는 아직 시기 상조다

2. Magsafe 가 없어진 것도 아쉽다.

3. 버터플라이 키보드는 별로다.

4. 가격이 너무 비싸다.

5. 메모리가 너무 작다.



사실 오늘 발표가 있기 전까지는 왠만하면 이번에 업그레이드 해야겠다는 생각을 했었는데, 어제 포스팅한 것처럼 10년만에 윈도우 사용자로 돌아가야한 시점이 된거 같다는 생각이 드네요..







반응형

반응형

애플의 맥북 발표를 하루 앞두고 마이크로소프트에서 조용하게 새로운 제품을 발표하였습니다.


이번에 발표한 제품은 서피스 스튜디오 입니다..



서피스 스튜디오는 아이맥을 연상시키는 디자인의 일체형 디자인의 데스크탑 컴퓨터 입니다.

최근 혁신은 없다를 외치고 있는 애플에서 내일 발표할 맥북 및 맥북프로 라인은 변화된 부분에 대한 것들이 상당히 공개되어 있어서 기대감이 떨어져 있는 상황에서 갑자기 마이크로소프트에서 엄청난 제품을 발표하였습니다. 



먼저 28인치의 화면크기는 아이맥27인치보다 1인치 정도 큽니다.

하지만 이 화면은 터치스크린이 지원되며, 제공되는 전용 펜으로 필기 및 드로잉 작업을 할 수 있습니다.

작업을 용이하게 하기위해서 스크린은 책상과 평행하게 놓을 수 있습니다.

또한 별도로 판매되는 서피스 다이얼을 통해서 화면 회전 및 그래픽 소프트웨어에서 색상선택 등의 작업을 할 수 있습니다.



화면 각도를 조정해 주는 부분이 약간 투박해 보이기는 하지만 전체적으로 멋진 느낌이 들며, 키보드와 마우스도 스튜디오에 맞춰서 제작된거 같습니다.


현재는 예약주문을 받고 있으며, 올해 12월 15일에 제품이 출시될 예정이라고 합니다.

https://www.microsoftstore.com/store/msusa/en_US/pdp/productID.5074015900


홈페이지에 공개된 사양은 다음과 같습니다.

 

 CPU

메모리

저장장치

 그래픽 카드

 가격

 기본사양

Intel Core i5 (Skylake)

 8 GB

Hybrid 1TB

GeForce GTX 965M 2GB GDDR5 

$2999.00

 중간사양

Intel Core i7 (Skylake)

 16 GB

Hybrid 1TB

 GeForce GTX 965M 2GB GDDR5

$3499.00

 최고사양

Intel Core i7 (Skylake)

 32 GB

Hybrid 2TB

 GeForce GTX 980M 4GB GDDR5

$4199.00


화면 해상도는 4500 x 3000 이며, Windows 10 Pro 가 제공됩니다.

박스에는 본체, 서피스 펜, 서피스 키보드, 서피스 마우스가 제공됩니다.

서피스 다이얼은 별도로 $99에 판매됩니다.


아직 정확한 CPU 스펙이 공개되지 않았지만, 인텔 6세대 Skylake i5 와 i7이 탑재될 것으로 보입니다.

인텔이 7세대 Kabylake CPU를 늦게 출시하게 되어 6세대 Skylake이 적용된거 같아서 살짝 아쉽습니다. 

그리고 CPU가 정확하게 6700T, 6700, 6700K 중에 어떤 것인지 명확하지 않습니다.


그 외에 아쉬운 부분은 상당히 비싸게 가격이 책정되었다는 것 정도일 거 같습니다.



이번에 MS에서 야심차게 준비한 제품인것 같은데, 애플도 긴장을 해야하지 않을까 싶습니다.


미국 사이트들의 반응은, 20년째 애플만 쓰던 유저가 이 제품은 꼭 써보고 싶다라는 의견도 있었습니다. 심지어 그 분은 그래픽 작업을 전문으로 하시는 분도 아니었습니다. 저도 주로 맥을 쓰고 있는데, 이 녀석은 정말 갖고 싶네요..




+ 업데이트로 추가합니다.

오늘 마이크로 소프트 매장에 가서 전시된 제품을 직접 구동해 봤습니다. 전시된 제품은 모두 엔트리 모델이었고, OS는 Windows 10 Pro 였고, CPU는 i5-6440HQ 였습니다. 아마 i7이 들어간 모델도 HQ 급일 것으로 예상됩니다. 이는 얼마전 출시한 신형 맥북프로에 들어간 CPU와 비슷한 스펙일 것으로 보입니다. 일단 U 시리즈가 아닌 것은 다행인데, 데스크탑용 CPU가 아니어서 터치 스크린이 필요하지 않으며, CPU 성능이 중요한 작업을 하시는 분들은 iMac 이 더 좋은 선택이 될 수도 있을 것 같습니다. 

그리고 서피스 다이얼은 화면에 붙일 수 있는 장치는 아니고 화면이 눕혀져 있는 경우 올려 놓았을 때 안 미끄러지고 있는 정도 였습니다. 생각 보다는 유용하지 않은 느낌이었는데, 이것은 어떤 작업을 하느냐에 따라 달라질 것 같습니다. 

테스트해본 제품에서 서피스 펜으로 드로잉 작업을 해 봤는데, 입력이 밀리는 감이 있었습니다. 엔트리 모델이라서 그런 건지 터치 스크린의 문제인건지는 잘 모르겠지만 서피스 프로 3 보다도 반응이 늦었던 거 같습니다.

많은 테스트를 해본건 아니었지만 엔트리 모델은 약간 성능이 부족하지 않나 싶은 생각이 듭니다. 하지만 그럼에도 불구하고 여전히 가격이 비싸서 그렇지 탐이 나는 제품인건 확실합니다. 







반응형

반응형

Machine Learning 에서 많이 사용되는 Python 기본 설치 방법입니다. 이 포스트에서 Python과 같이 설치할 라이브러리는 Machine Learning에서 필수적으로 사용되는 수치연산을 위한 numpy 와 데이터를 플롯팅 해주는 matplotlib 라이브러리 입니다.


참고로 현재 Python은 3.x 버전이 릴리즈 되었으나 3.x 버전과 2.x 버전의 차이가 크고, 아직은 2.x 버전의 라이브러리가 많아서 2.x 버전도 많이 사용되고 있어서 2.x 버전을 기준으로 정리해 보았습니다. 3.x 버전에서는 numpy 등의 라이브러리가 내장되어 있어서 설치는 용이하겠지만 아직까지는 Machine Learning 책들도 2.x 버전 기준으로 설명을 하고 있어서 2.x 버전 설치 방법을 알아두는 것이 아직은 의미가 있을 듯 합니다.


Python 및 라이브러리 설치 방법은 OS 에 따라서 약간씩의 차이가 있습니다. MacOS 의 경우 기본으로 Python이 설치되어 있고, Linux의 경우 apt 나 yum 등의 명령어로 설치가 가능합니다. 윈도우의 경우 여러가지 설치 방법이 있겠지만 가장 기본적인 설치 방법을 소개해 보겠습니다. 


1. Python 설치

Python은 아래 사이트에서 관리 됩니다.

https://www.python.org/

Download 탭을 클릭해서 2.x 버전 중에 최신버전 (현재 2.7.12)  다운로드 페이지로 갑니다.

본인의 개발 환경에 따라서 32bits 윈도우를 사용하면 Windows x86 MSI installer 를 64bits 윈도우를 사용하면 Windows x86-64 MSI installer 를 선택해서 다운로드 합니다.

다운로드 받은 파일을 더블클릭해서 설치합니다.


2. numpy 라이브러리 설치

Python에서 라이브러리를 설치하는 방법은 여러가지가 있습니다. 크게 세가지 방법이 있는데, 라이브러리를 직접 설치하거나, setup.py 를 실행하거나, pip 를 이용합니다.

numpy 의 경우에도 여러가지 설치 방법이 있는데, 여기서는 setup.py 를 이용해서 설치해 보도록 하겠습니다.

numpy 의 경우는 C++ 로 빌드된 모듈을 참조해서 사용하기 때문에 설치시에 Visual C++ 9.0 컴파일러를 요구합니다.

Visual C++이 설치되어 있지 않다면, 아래 마이크로 소프트 사이트에서 무료로 다운로드 받아서 설치합니다.

https://www.microsoft.com/en-us/download/details.aspx?id=44266


sourceforge 에서 numpy 라이브러리를 다운로드 합니다. 

https://sourceforge.net/projects/numpy/files/NumPy/

numpy 에 대한 최신정보는 아래 사이트에서 확인 가능합니다.

http://www.numpy.org/

최신버전을 다운로드 받았으면, 적당한 곳에 압축을 풉니다. (여기서는 C:\numpy 에 압축이 해제되었다고 가정)


이제 본격적인 설치를 위해서 커맨드 프롬프트를 실행합니다. (윈도우키 + R 누르고 cmd 입력)

numpy 압축해제 경로로 이동


cd C:/numpy


그리고 커맨드 프롬프트 상에서 다음과 같이 실행하여 numpy 를 설치합니다. (python 설치는 C:/Python2.7 에 되어 있다고 가정)


 C:/numpy>C:/Python2.7/python.exe setup.py install 


중간에 라이브러리를 컴파일 하는 시간이 상당히 오래 걸립니다. (사양에 따라 다르겠지만.. CPU도 거의 100% 차지합니다..)

적당히 기다리면 설치가 완료됩니다.


3. matplotlib 설치

관련 자료는 아래 사이트에서 찾아보실 수 있습니다.

http://matplotlib.org/index.html


아래 링크로 가시면 각 OS 별로 라이브러리 설치 방법이 소개되어 있습니다.

http://matplotlib.org/users/installing.html#build-windows


사이트에서는 Python을 처음 설치하면 WinPython 이나 Python(x,y) 등을 이용하길 권장하고 있으나, 표준 Python 설치 환경에서는 pip를 이용하라고 되어 있습니다. 참고로 CentOS (Linux) 에서는 pip 으로 설치가 제대로 되지 않아서, yum으로 설치했던 기억이..


커맨드 프롬프트에서 아래 명령어를 이용해서 설치하면 됩니다.


C:/Python2.7>python.exe -m pip install -U pip setuptools

C:/Python2.7>python.exe -m pip install matplotlib








반응형

반응형

이 포스팅은 Manning 출판사에서 나온 Getting MEAN with Mongo, Express, Angular, and Node 라는 책의 내용을 요약한 것입니다.


https://www.manning.com/books/getting-mean-with-mongo-express-angular-and-node


@ 풀스택 개발자의 장점

- 남들 보다 일을 더 많이 하게 된다. 

- 야근도 많이 할 수 있다.

- 서버도 체크해야하므로 퇴근과 주말은 없어진다.

- 개발 프로세스의 모든 과정을 이해함으로써 프로젝트의 흐름을 잘 파악할 수 있으며, 그것을 바탕으로 효율적인 코딩 작업을 할 수 있게 된다.

- 궁극적으로 본인의 가치가 향상 된다.


@ MEAN 이란?

책 제목에 나오는 Mongo DB, Express, AngularJS, Node.js 등의 기술을 바탕으로한 개발을 이야기함

- Mongo DB : NoSQL DB 중에 하나로 Document 형식으로 데이터를 저장하는 DB

- Express : jade 등의 템플릿 엔진을 이용해서 개발하는 백엔드 프레임워크

- AngularJS : 동적인 웹 애플리케이션을 개발할 때 사용하는 프론트엔드 프레임워크

- Node.js : javascript 언어를 이용해서 개발하는 소프트웨어 플랫폼


@ 개발 프로세스

1. Mock-up 사이트 개발

2. 데이터 모델링 및 DB 설계

3. API 개발

4. 애플리케이션에 실제 데이터 적용

5. 애플리케이션 마무리 작업


@ MEAN 설계

1. 블로그 페이지

-  컨텐츠가 풍부하다.

- 사용자가 하는 일이 적다.

- 첫 페이지 로딩이 빨라야 한다.

- 사용자들이 머무는 시간이 짧다.

- 공개적이고 공유가 가능하다.

2. Admin 페이지

- 기능이 풍부하다

- 사용자의 조작이 많다.

- 조작에 대한 반응이 빨라야 한다.

- 사용자들이 머무는 시간이 길다.

- 비공개 작업이다.


@ 웹 개발 설계

1. Express App : 서버에서 웹페이지를 생성해서 보내주는 방식 

2. Express and extras : 서버에서 웹페이지를 생성해서 보내주며, 페이지에 들어가는 내용은 클라이언트에서 데이터를 받아서 웹페이지를 렌더링 하는 방식

3. Angular SPA : 서버에서 정적인 웹페이지를 받아와서, 클라이언트에서 데이터를 받아와서 렌더링을 해주는 방식


@ 기타

- 책에서는 위의 웹 개발 설계에 소개된 방법에 따라서 예제 프로젝트를 작성해 가며 단계적으로 설명을 해줍니다.

- MEAN 각각에 대해서 깊이 있게 다루는 책은 아니지만, 웹 프로젝트를 다루는데 필요한 코드를 통해서 기본적인 사용법을 익히는 데 큰 도움을 줍니다.

- 테스트 서비스를 위한 Heroku 솔루션 사용법을 제공해 줍니다.

- Express 관련해서는 간단한 jade 템플릿 엔진에 사용법 및 라우팅에 대해서 설명합니다.

- Mongo DB 를 사용할 때는 mongoose 를 사용하여 객체 모델링이나 validation 을 하는 방법에 대해서도 소개하고 있습니다.

- REST API를 만드는 방법에 대해서 설명합니다.

- SPA (Single Page Application) 형식으로 앱을 제작하는 방법에 대해서도 설명을 해주고 있습니다.

- Angular JS는 1.x 버전으로 설명하고 있으며, 라우팅이나 데이터 바인딩에 대해서 설명합니다.

- 웹토큰을 이용한 로그인 인증 처리 예제를 제공합니다.


또한 무료로 배포하는 부록에는 Javascript 코딩 습관에 대한 저자의 노하우를 공개하고 있습니다. 


이미 각 스택에 대해서 잘 알고 계신 분이 보기에는 조금 아쉬운 감이 있겠지만, MEAN을 이용한 웹개발 입문자에게는 상당히 도움이 될 만한 책이라고 생각됩니다.






반응형