The Pursuit of Happyness

반응형

Lenovo 에서 가장 저렴한 윈도우 노트북 ideapad 110s 에 대한 간단한 리뷰 입니다.



모델명은 80WG0001US 로 미국에서 판매되는 제품입니다.


구성품은 본체와 어댑터, 그리고 간단 매뉴얼이 전부였습니다.



제품의 주요 스펙은 다음과 같습니다.

스크린 사이즈 : 11.6인치

CPU : N3060 (1.6GHZ)

메모리 : 2GB

스토리지 (HDD) : 32GB eMMC

무선랜 : 802.11ac

기타 : HDMI 포트 / USB3.0 포트(1) / USB 2.0 포트(2) / 헤드폰 잭 / 마이크로 SD 슬롯




다음은 맥북 프로 15인치 (2014년 형) 와의 크기 비교 입니다.



처음 박스에서 꺼냈을 때, 배터리가 완전히 방전되어 있어서 어댑터를 꽂아야만 사용이 가능했습니다.




간단한 테스트를 거치고나서 불필요한 소프트웨어도 제거할 겸 한글 윈도우 10으로 클린 설치를 했습니다.


몇몇 드라이버는 자동으로 설치가 되지 않아서  수동으로 설치해줬고, 그래픽 드라이버와 무선랜 드라이버는 따로 업데이트를 했습니다.


그리고 나서 윈도우 업데이트를 하는데도 시간이 은근히 걸렸습니다.


참고로 부팅시간은 대략 30초 내외였습니다.




이 노트북은 TV에 연결해서 NAS에 있는 미디어 파일들을 재생하는 용도로 사용할 예정이었고,


주로 사용하는 동영상 재생 프로그램은 다음 팟 플레이어 최신버전 (2017-09-02 기준)이었습니다. 




TV는 4K를 지원하지만 보통 1080P 정도로 연결을 해서 사용합니다.


처음에는 동영상이 깔끔하게 재생되나 싶었는데, 시간이 지나면 어느 순간 말이 끊기는 현상이 나타났습니다.


원인은 10여분 이상 동영상을 재생하면 HDMI 포트 쪽으로 열이 많이 나서 그런지, 


CPU 점유율이 올라가면서 재생이 재대로 되지 않는 것으로 생각됩니다.


그냥 노트북 화면으로 보는 경우 10분 이상 재생해도 큰 문제가 생기지는 않았습니다.




문제가 하나 더 있었는데, 부팅시에 무선랜 어댑터를 제대로 찾지 못하는 현상이 종종 발생했습니다.


모든 110s 제품에 발생하는 문제인지는 알수가 없었습니다.





CPU를 많이 써야 하는 용도로는 추천하고 싶지 않고요,


웹서핑이나, 가벼운 문서 작업 등의 용도로 쓰기에는 상당히 괜찮아 보입니다. 


그리고 기본 스토리지가 32GB 이지만 OS 영역이 절반 이상 차지하기 때문에 실제로 사용가능한 용량은 그리 크지 않습니다.


그리고 화면 시야각도 좁은 편입니다.


가벼운 무게 (대략 1Kg) 와 상당히 깔끔한 디자인은 상당히 매력적입니다.


흰색 제품이고 플라스틱 마감이라서 그런지 맥북 보다 따뜻한 느낌이 들어서 좋습니다.


키 감은 다소 주관적인 부분이라 직접 체험해 보시는 것이 좋을 듯 합니다.


개인적으로는 살짝 쫀득한 느낌이 좋았고, 전원 버튼 누를때 살짝 딸깍하는 느낌도 괜찮았습니다.


키 배열에 있어서는 개인적으로 Page Up / Page Down 키가 없었으면 더 좋았을 거 같다는 생각이 들지만 그 외에는 대략 만족이었습니다.


터치 패드가 살짝 왼쪽으로 치우쳐 있는데, 중심이었으면 베스트였을 것 같습니다.



~








반응형

반응형

윈도우에서 npm으로 oracledb 모듈을 설치하던 중에 다음과 같은 에러가 발생했습니다.


MSBUILD : error MSB4132: The tools version "2.0" is unrecognized. Available tools versions are "4.0".


모듈 설치를 위해서 Python 2.7 과 Visual Studio 2017 CE 를 설치해 두었는데, 위와 같은 에러가 발생했습니다.


(참고로 node oracledb를 설치하기 위해서는 Oracle Instant Client 혹은 XE 등이 필요하고, 그 외에 Python 과 C++ 컴파일러가 필요합니다.)



관련해서 검색을 하다가 아래 링크에서 답을 찾았습니다.


https://github.com/chjj/pty.js/issues/60



요점만 적어보면, 


1. 관리자 권한으로 명령 프롬프트를 실행합니다.


2. 다음 명령으로 빌드 관련 툴을 설치합니다.


 npm install --global --production windows-build-tools 


3. 다음 명령으로 빌드 툴에서 사용할 visual studio 버전을 설정합니다.


 npm config set msvs_version 2015 --global


그리고 나서 창을 닫고 새 창을 열어서 다시 시도하니 설치가 잘 되었습니다.







반응형

반응형

테스트 환경

Ubuntu 16.04.2 LTS


Oracle DB를 이용할 일이 생겨서 Ubuntu에 Oracle XE를 설치해 보았습니다.


설치하는데 아래 링크를 참조했습니다.

http://www.gokhanatil.com/2016/04/how-to-install-oracle-11gr2-xe-on-ubuntu.html


먼저 설치 패키지를 아래 링크에서 다운로드 합니다. 

(2017년 3월 30일 현재 2014년에 배포한 11gR2 가 최신버전 입니다.)

http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html


Oracle 홈페이지에서는 리눅스 용으로는 rpm을 zip으로 압축해서 배포하고 있습니다.


다운로드 완료 후에는 다음 명령으로 압축을 풀어 줍니다.


$ unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip


압축이 풀리면 Disk1 폴더가 생성되고 그 안에 rpm 파일이 있습니다.


rpm 파일을 Ubuntu 에서 쓰는 deb 파일로 변환을 해 주어야 합니다.


rpm을 deb로 변경할 때는 alien 을 사용하게 됩니다. 


만약 alien 이 설치되어 있지 않다면 다음 명령으로 설치합니다.


$ sudo apt install alien 


그리고 오라클 사용에 필요한 라이브러리를 설치합니다. (사용자의 환경에 따라 이미 설치되어 있을 수도 있습니다.)


$ sudo apt install libaio1


Disk1 폴더에서 아래 명령으로 rpm을 deb로 변경합니다. (시간이 상당히 걸리는 작업입니다.)


$ sudo alien --scripts oracle-xe_11.2.0-1.0.x86_64.rpm


deb 파일을 다음 명령으로 설치를 합니다.


$ sudo dpkg -i oracle-xe_11.2.0-2_amd64.deb


설치 도중에 /sbin/chkconfig 가 없다는 메시지가 나오게 되는데, redhat 계열에서 사용하는 설정인데 무시하셔도 상관 없습니다. 그래도 설정을 하고 싶다면, 아래 링크를 참조하세요.

http://meandmyubuntulinux.blogspot.com/2012/05/installing-oracle-11g-r2-express.html


그리고 설치 후에는 설정을 위해서 스크립트를 실행해야 합니다. 실행시에 발생할 에러를 막기 위해서 아래와 같이 링크를 설정하고 폴더를 생성합니다. (폴더가 이미 존재하는 경우도 있습니다.)


$ sudo ln -s /usr/bin/awk /bin/awk

$ sudo mkdir /var/lock/subsys


그리고 스크립트를 돌려서 초기 설정을 합니다.


$ sudo /etc/init.d/oracle-xe configure


초기 설정을 위해 몇가지 질문을 하는데, 성실히 대답해 주면 됩니다.


아래 명령으로 시작합니다.


$ sudo /etc/init.d/oracle-xe start


아래 명령으로 서버를 종료합니다.


$ sudo /etc/init.d/oracle-xe stop




반응형

반응형

테스트 환경

Ubuntu (16.04.2 LTS)


Ubuntu 사용 도중 crash 가 발생하면 부팅시에 계속 메시지가 나타나게 됩니다.


문제가 해결되고 나서도 메시지가 계속 나타나는 경우 다음의 방법으로 해결 합니다.


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


2. 다음 경로로 이동


$ cd /var/crash 



3. crash 파일 확인 후 삭제 



반응형

반응형

테스트 환경 

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" 은 해당 모델에서의 경로를 선언함




반응형