mac에 cordova(PhoneGap)을 이용한 IOS용 간단한 inapp brower 만들기

1. cordova(PhoneGap)을 이용하기 위해서는 nodejs를 설치해야된다.
https://nodejs.org 에 접속하여 최신 nodejs를 설치한다.

2. nodejs를 이용하여 cordova를 설치한다
mac에서 터미널을 이용 다음을 입력하여 cordova를 설치한다

sudo npm install -g cordova

3. mac에서 작업할 폴더위치를 생성한다 임시로 workspace로 정함

4.mac터미널에서 해당 작업폴더로 이동한 후, cordova를 이용하여 신규프로젝트를
생성한다. com.moramcnt.mosaicadm라는 ID의 mosaicadm라는 프로젝트 생성

cordova create mosaicadm com.moramcnt.mosaicadm "MosaicAdmin"

5. xcode용 프로젝트 자동생성을 위하여 platform 명령을 사용하여 생성한다.
생성된 디렉토리로 이동하여 터미널로 다음을 입력한다.

cordova platform add ios

6. in app 브라우저를 위해서 플러그인을 설치한다.
기본적으로 특정외부 url로 이동하게 되면 ios에서는 safari브라우저를 이용하여 이동하게 된다.
이를 생성된 앱안에서 이동하게끔 하려면 inappbrowser 플러그인을 설치해야된다.
생성된 디렉토리로 이동하여 터미널로 다음을 입력한다.

cordova plugin add cordova-plugin-inappbrowser

7. app가동시 특정 url로 바로 접속하기 위해서 index.html파일을 변경한다.
생성된 디렉토리의 www/index.html 파일이 있다 이를 변경한다.
해당 url은 네이버 모바일 홈으로 임시 지정한다.

<!DOCTYPE html>
<html>
  <head>
    <title>moram admin</title>
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">
    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
        // external url
        var ref = window.open(encodeURI('http://m.naver.com'), '_blank', 'location=no,toolbar=no');
    }
    </script>
  </head>
  <body>
  </body>
</html>

8. 아이콘및 앱 가동시 초기로딩 화면(splash) 파일을변경한다.
초기 디폴트 아이콘은 cordova로 지정된 디폴트 아이콘밖에 없다 이를 변경하기 위하여 다음을 처리한다.
8-1. imagemagick을 설치한다.
변경을 위해서는 imagemagick 라는 프로그램이 필요로 한데.
home-brew라는 프로그램이 필요하다 이를 먼저설치힌다.
터미널을 이용하여 다음을 입력한다.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

imagemagick을 설치한다.

brew install ghostscript imagemagick

8-2. 아이콘 자동배포및 splash의 자동배포를 위해서는 cordova-icon, cordova-splash nodejs를 통하여
각각 설치힌다. 터미널을 통하여 다음을 입력한다.

npm install -g cordova-icon cordova-splash

8-3. 변경할 아이콘 및 초기로딩 파일을 프로젝트 루트에 등록
생성된 디렉토리로 이동후 지정할 아이콘및 splash파일은 png 파일 중 싸이즈가 가장 큰 파일을
icon.png, splash.png로 각각 이름을 변경하여 등록한다.

8-4. cordova-icon cordova-splash를 실행하여 각각 필요한 싸이즈에 맞는 이미지를 자동등록 한다.
생성된 디렉토리로 이동후 cordova의 명령어를 이용하여 cordova-splash, cordova-icon 을 입력한다.

cordova-splash
cordova-icon

9. ios프로젝트에 신규변경된 항목들을 적용한다.
index.html파일이나 config.xml파일 및 이미지들이 변경될 경우, 해당 데이터를 적용시키기 위하여
다음과 같은 명령을 입력한다.
생성된 디렉토리로 이동후 cordova명령어를 입력한다.

cordova prepare ios

10. 생성된 프로젝트로 이동하여 xcode로 프로젝트를 로드한다.
해당 platform 폴더로 이동하여 프로젝트를 더블클릭한다.

11. xcode 프로젝트에서 특정폰에 빌드하기 위해서 Singnig정보를 설정한다.
설정할 Singnig 파일이 없을경우 생성은 다른 구글링을 통하여 알아본다.

12. xcode에서 컴파일 하여 확인 한다.

Node.js에서 uncaughtException시에 winston 로거 이용시 기록이 안될경우

아래와 같이 비정상 예외 발생시 로그에 기록을 남기려고 하였으나, 로그에 기록이 안남는다면

process.on('uncaughtException', function (err)
{
	logger.error("*uncaughtException(), Exception : " + err.stack);
	process.exit(1);
})

다음과 같이 setTimeout을 주게 되면 에러로그를 남길수 있다.

process.on('uncaughtException', function (err)
{
	setTimeout( function() {
		logger.error("*uncaughtException(), Exception : " + err.stack);
		process.exit(1);
	}, 1000);
})

nodejs 오라클연동 node-oracledb 설치

1. NodeJS 설치
기준)NodeJS Version 0.12.0-x64
https://nodejs.org/en/download/ 에서 64 비트용 버전 0.12.0- 64bit
주의) 버전의 맞춤이 중요 (최신버전 4.0 기준으로 설치가 잘 안됨)

2. 오라클용 인스턴스 DLL, SDK 설치
기준) 오라클 12.1.0.2 64bit용
instantclient_basic-windows.x64-12.1.0.2.0.zip
instantclient_sdk-windows.x64-12.1.0.2.0.zip

2.1 버전에 맞는 실행가능 DLL, SDK 각 2개의 압축파일을 다운로드
다운로드 받은 파일을 같은 폴더에 압축해제
ex) C:\oracle\instantclient
2.2 압축해제 한 디렉토리에 윈도우즈 환경변수에 PATH 설정
제어판 -> 시스템 및 보안->시스템->고급시스템설정->환경변수 PATH에 추가

3. 파이선 설치
기준) Python 2.7.10 MSI 64Bit
– Download Windows x86-64 MSI installer 를 다운받아서 설치
– 설치된곳을 환경변수 PATH에 등록

4. 비주얼 스튜디오 개발 커멘드창에 환경변수 설정
기준) Visual Studion 2013
2.1 도스창에서 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat 실행
2.2 도스창에서 각 set 설정을 실행
set OCI_LIB_DIR=C:\oracle\instantclient_12_1\sdk\lib\msvc
set OCI_INC_DIR=C:\oracle\instantclient_12_1\sdk\include

5. NodeJS 의 npm을 이용하여 node-oracledb를 설치
npm install oracledb

6. 설치테스트
node test.js

module.exports = {
  user          : process.env.NODE_ORACLEDB_USER || "db아이디",
  password      : process.env.NODE_ORACLEDB_PASSWORD || "db패스워드",
  connectString : process.env.NODE_ORACLEDB_CONNECTIONSTRING || "db아이피/dbSID",
  externalAuth  : process.env.NODE_ORACLEDB_EXTERNALAUTH ? true : false
};
var oracledb = require('oracledb');
var dbConfig = require('./dbconfig.js');

oracledb.getConnection(
  {
    user          : dbConfig.user,
    password      : dbConfig.password,
    connectString : dbConfig.connectString
  },
  function(err, connection)
  {
    if (err) {
      console.error(err.message);
      return;
    }
    connection.execute(      
	"select issue_yymm, epc_code, remark, tag_location_seq,  reg_date from tag_issue WHERE rownum < :did",
      [50],
      function(err, result)
      {
        if (err) {
          console.error(err.message);
          doRelease(connection);
          return;
        }
        console.log(result.metaData);
        console.log(result.rows);
        doRelease(connection);
      });
  });

function doRelease(connection)
{
  connection.release(
    function(err) {
      if (err) {
        console.error(err.message);
      }
    });
}

참고싸이트

--NodeJS Home
https://nodejs.org

--파이선 Home
https://www.python.org/

-- 오라클 Instant Client Downloads
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

-- 오라클 NodeJs 디벨로퍼 센터
http://www.oracle.com/technetwork/database/database-technologies/node_js/oracle-node-js-2399407.html

-- 오라클 npm oracledb 홈
https://www.npmjs.com/package/oracledb

-- node-oracledb 예제
https://github.com/oracle/node-oracledb/tree/master/examples