Data를 migration하는 것은 그리 유쾌한 작업이 아닙니다.

데이터를 분석하고 변환하여 옮기는 과정에 수차례의 실패를 각오해야 하는 신중한 작업이기 때문이죠. (사실 재미도 없습니다.)


많은 시스템에 자체적으로 제공한는 Import기능이 있지만,
저는 Excel을 이용하여 SQL구문을 만들고 이를 이용하여 데이터를 등록하는 방법을 선호합니다.


그 이유 중 하나는 실제 SQL구문을 실행한 뒤 에러가 발생했을 때, 이를 추적하기 쉽기 때문입니다.

또한, 추가적인 데이터를 등록할 때 재활용할 수 있는 점도 있습니다.



아래는 Oracle에 Insert할 때 사용했던 실제의 예제입니다.

=IF(L2="","NULL",CONCATENATE("TO_DATE('",TEXT(L2, "YYYY-MM-DD HH:mm:ss"),"','YYYY-MM-DD HH24:mi:ss')"))
=CONCATENATE(AL2," VALUES ('",A2,"','",B2,"','",C2,"','",D2,"');")


첫 번째 라인은 date 값을 column에 등록하기 위한 구문으로 변경하기 위해서 사용합니다.

두 번째 라인은 여러 cell의 값을 조합하여 실제 insert 구문을 만들기 위해서 사용합니다.


Datetime의 가공

Oracel의 경우 TO_DATE function으로 형변환이 필요합니다.

nullable column인 경우를 고려하여 값의 유무에 따른 분기처리가 또한 필요합니다.

Excel에서 date 값의 cell을 참조할 때 기본적으로 숫자로 취급하므로 이에 대한 방지 코드가 필요합니다.


IF

=IF({condition},{true case},{false case})

if function은 조건에 따른 분기 처리를 지원함. 위의 L2="", L2 cell이 empty인 경우를 의미하며 equal character가 하나인 것에 주의가 필요합니다.

TEXT

=TEXT({text},{format})

값의 포맷을 변경. 위의 TEXT(L2, "YYYY-MM-DD HH:mm:ss"), L2 값을 ToString() 처리합니다.


위 예의 결과는

TO_DATE('1980-06-26 00:00:00','YYYY-MM-DD HH24:mi:ss') 또는 NULL 이 됩니다.


Insert 구문의 작성

주로 INSERT ({columns}) VALUES ({values}); 구문의 {values} 쪽을 동적으로 작성하게 됩니다.


CONCATENATE

인자들을 combine하는 함수

=CONCATENATE(AL2," VALUES ('",A2,"','",B2,"','",C2,"','",D2,"');")

다만, 인자의 개수 및 길이에 제한이 있으므로 주의.

AL2는 static한 INSERT 구문이 있고 A2:D2까지의 값을 작은 따옴표로 감싸서 열거하였습니다.



※ H社의 Push 간 실제 작업에 활용한 결과물은 공용 drive에서 확인하세요.

'Database > Common' 카테고리의 다른 글

DA와 DBA의 업무 영역  (3) 2017.09.19

오랜만에 ADO.Net을 쓰려다 보니까, SqlConnection, SqlCommand 이런 녀석들의 사용 방법이 헷갈리더라구요... ㅡ.ㅡ

하여, Google 다음가는 우리의 친구 Stack overflow의 도움을 받았습니다.

SQL에 parameter 넘길 필요가 있어 해당 keyword로 검색하여 보니.. 아래와 같은 재미있는 4컷 만화가 :-)


enter image description here





그리고... 거기 달린 댓글...


References

https://stackoverflow.com/questions/7505808/why-do-we-always-prefer-using-parameters-in-sql-statements



한칸이 일주일.
가로 한 줄이 1년.

칸 채우기 해보면 뭔가 되게 짧게 살아온 느낌이 들 것도 같고...
남은 칸이 정말 수명일까봐 신경 쓰일 것도 같고..

'잡다한 수다' 카테고리의 다른 글

Promedica Innovation  (1) 2017.06.08
수원역 AK플라자에 건담베이스  (3) 2017.05.31
기다리기 지루해서..  (0) 2017.05.06
WELCOME  (6) 2017.04.26


Damon, Kenny, Phil, Todd 가 보입니다. :-)

0:54, Phil, Todd
1:18, Kapios, Phil, Damon,
2:14, Damon, Kenny, Phil
2:19, App 등록(ㅋ)
2:55, Todd

https://youtu.be/OULUegWdb9c


'잡다한 수다' 카테고리의 다른 글

생애 달력  (0) 2017.06.09
수원역 AK플라자에 건담베이스  (3) 2017.05.31
기다리기 지루해서..  (0) 2017.05.06
WELCOME  (6) 2017.04.26



7월 중 오픈 한다네요.

'잡다한 수다' 카테고리의 다른 글

생애 달력  (0) 2017.06.09
Promedica Innovation  (1) 2017.06.08
기다리기 지루해서..  (0) 2017.05.06
WELCOME  (6) 2017.04.26

 

Client 개발 시에 크롬에서 Cross Domain 이슈 회피하는 방법 공유해드립니다.

   - 방법 1 : 첨부한 파일을 다운받고 열려있는 크롬을 모두 종료 후에 다운받은 링크로 크롬을 실행한다.

     

chrome.exe


- 방법 2 : 크롬 바로가기를 복사하고 오른쪽 클릭 후 속성의 대상(T) "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --disable-web-security --user-data-dir 를 추가한다.  --args --disable-web-security --user-data-dir는 크롬에서 크로스 도메인을 체크하지 않는 옵션입니다.



 

상단에 다음과 같이 나오면 성공입니다.

감사합니다

'Tech. Etc' 카테고리의 다른 글

KEMP.Zipper 개발 회고  (0) 2017.07.17
JWS 소개  (4) 2017.05.22
Visual studio code 의 file tree에 icon 출력하는 방법  (4) 2017.05.17

제가 가진 TDD에 대한 관심과 열정은 아직 식지 않았습니다.

미국 현지 프로젝트를 통해서 constructor를 통한 dependency injection pattern을 숱하게 보면서 느낀 점도 많았고요, 아직 갈 길이 멀더라도 TDD는 선택이 아닌 당면한 과제가 된 것 같다는 인상을 받습니다.

 

다만, 계속 아쉬웠던 것은 사실상 현재 주로 작업하는 front-end, javascript에 대해서 (정확하게는 Angular)에 대한 TDD를 시도하지 못하고 있다는 점이었습니다.

1여년전에 도전했다가 angular node.js에 대한 이해 부족으로 미뤄왔던 것을, 이번 ionic2, eletron project를 통해서 node.js(정확하게는 npm)에 대한 경험이 쌓여 다시 시도해 보았습니다.

다행히 전보다는 쉽게 따라갈 수 있었고, 부족하지만 해당 내용을 공유하고자 합니다.

 

도구의 선택

Angular를 테스트하기 위한 최적의 옵션 중 하나는 karma & jasmine입니다.

Karma는 javascript code를 다양한 browser에서 테스트해 볼 수 있도록 도와주는 tool입니다.

JasmineTDD가 아닌 BDD(Behavior driven development) framework로써 자세한 내용은 다음 설명을 참고하세요.


Test-Driven Development : 비교적 새로운 소프트웨어 개발 기술로써, 프로세스는 아래와 같습니다.

 

개발된 코드의 특정 부분을 위한 시험(tests)을 작성합니다. 만약 계산기를 예로 들자면 양수, 음수 정수 등등을 더하는 시험을 작성합니다. 하지만 아직 실제 코드가 작성된 게 아니기 때문에, 테스트를 진행한다면 실패(fail)가 될 것입니다.

이제 시험에 연관된 개발코드를 작성합니다. 이 코드는 테스트를 성공(pass)하기 위한 것입니다.

테스트에서 성공하였다면 이제 작성한 코드를 제 위치에 리팩토링하며 집어넣습니다.

TDD는 개발자들이 개발의 명세(Specification)에 대해 개발을 직접 세밀하게 진행보기 전에, 보다 선명하게 생각할 수 있게 해줍니다. 또한 한번 작성된 시험은 언제나 유용합니다

 

Behavior-Driven Development : BDD는 명세를 작고 쉽게 작성합니다. 기본적으로 BDD는 아래 2개의 중심부분이 있습니다

 

테스트는 반드시 작고 한가지를 테스트해야합니다. 어플레키에션 전체를 테스트하는 대신, 작지만 많은 수의 시험(tests)을 작성합니다. 계산기를 예로 들자면 하나의 테스트는 '1더하기', 하나의 테스트는 '0더하기0', 또 다른 테스트는 '-5더하기6', 그리고 '1.2더하기3.1' 등을 작성하게 됩니다.

시험은 문장이어야 합니다. 자스민프레임워크와 계산기를 예로들면, 문장은 "Calculator adds two positive integers"와 같아야합니다. 그러면 테스팅프레임워크가 자동으로 테스트를 진행할 것 입니다.


출처: http://webframeworks.kr/getstarted/jasmine/

전 아직 위의 두 가지가 정확히 뭐가 다른 지 잘 모르겠네요.

 

Installing

우선 Node.js가 필요합니다.

https://nodejs.org/en/ 에 접속하여 LTS / Current version LTS를 다운로드 하여 설치합니다.

 

npm을 통해서 karma를 설치합니다.

콘솔창에서 다음 커맨드를 실행합니다.

Npm install karma --save-dev

--save-dev 옵션은 package.json을 자동으로 갱신하도록 합니다. 이를 통해서 package.json 파일의 devDependencies에 해당 module이 등록되는 것을 확인할 수 있습니다.

 

기본적인 준비는 마무리 되었습니다.

 

Test code 작성

describe('calculator', function () {

 

    beforeEach(module('myApp'));

 

    var $controller;

 

    beforeEach(inject(function (_$controller_) {

        $controller = _$controller_;

    }));

 

    describe('mainController test', function () {

        it('sample test', function () {

            var $scope = {};

            var controller = $controller('mainController', { $scope: $scope });

            expect($scope.greeting).toBe('Hello world');

            expect($scope.fnTest()).toBe(2);

        });

    });

});

Inject를 통해서 controllerinstance를 가져옵니다.

이 부분은 학습이 더 필요한 영역으로 경험치가 아직 없습니다만, jasmine BDD framework는 문서화가 잘되어 있으므로 손쉽게 따라할 수 있을 것으로 생각합니다.

다만, 위의 코드를 통해서 우리는 특정 controller의 instance를 가져올 수 있습니다.

그리고, 해당 controller의 property나 function을 테스트할 수 있게 되죠.

 

테스트 대상이 되는 controller는 다음과 같습니다.

var myApp = angular.module('myApp', []);

 

myApp.controller('mainController', ['$scope', function ($scope) {

    $scope.greeting = 'Hello world';

    $scope.fnTest = function () {

        return 2;

    };

}]);

 

 

Configuration for test runner

Karma를 통해서 자동 테스트를 수행하기 위해서, test에 대한 설정 파일을 생성해야 합니다.

Karma init karma.conf.js

Test framework > jasmine

Use require.js > no

Browser > Chrome

Location of test code > {test.js 파일의 path} 예를 들면 ‘test/*.js’

 

Run test

테스트를 위해서는 angular / angular-mocks / jasmine-core 등이 필요합니다. 아래의 devDependencies 항목을 package.json 파일에 붙여넣기를 한 후 저장합니다.

{

  "name": "tddtest",

  "version": "1.0.0",

  "description": "",

  "main": "index.js",

  "scripts": {

    "test": "echo \"Error: no test specified\" && exit 1"

  },

  "author": "Ethan",

  "license": "ISC",

  "devDependencies": {

    "angular": "^1.6.4",

    "angular-mocks": "^1.6.4",

    "jasmine-core": "^2.6.2",

    "karma": "^1.7.0",

    "karma-chrome-launcher": "^2.1.1",

    "karma-jasmine": "^1.1.0"

  }

}

 

Npm install을 수행하면 package.json에 선언한 module중 필요한 것을 자동으로 다운로드합니다.

 

거의 모든 준비가 완료되었습니다.

마지막으로 실제로 test간 사용할 파일의 karma config값을 수정해야 합니다.

// list of files / patterns to load in the browser

    files: [

      'node_modules/angular/angular.min.js',

      'node_modules/angular-mocks/angular-mocks.js',

      'app/*.js',

      'tests/*.js'

    ],

files arrayangular, angular-mock, source file 그리고 test file을 순서대로 작성합니다.

 

Karma start karma.conf.js를 수행합니다.

마지막 인자는 테스트 환경을 설정 파일을 지정합니다.



 

테스트 코드의 수행 결과가 출력됩니다.

Karma.conf.js 파일의 autoWatch 값을 true로 설정한 경우 Source code, test code 가 변경된 경우 자동으로 탐지하여 테스트 결과를 화면에 출력하여 줍니다.


References

https://www.youtube.com/watch?v=shqptAMZ_NM

https://www.youtube.com/watch?v=YRzr27Bpx_g

http://webframeworks.kr/getstarted/jasmine/

http://www.bradoncode.com/blog/2015/05/19/karma-angularjs-testing/


'Dev pattern' 카테고리의 다른 글

[펌] 자바스크립트 코딩 컨벤션 가이드  (0) 2017.10.16
WPF Developement  (0) 2017.07.21
AngularJs service unit test via jasmine.  (0) 2017.06.29

얼마전에 Jason에게 물티슈를 조금 선물 했는데...
아이가 모델 포즈로 인증을 해주네요 ㅎㅎ
그덕에 박스가 엄청 큰 느낌 ㅋㅋ



허락없이 올리는 사진이라 주소랑 얼굴은 가렸습니다.
이쁘게 늘 건강하게 웃으며 자라길~!

'Today R&D Office' 카테고리의 다른 글

데일리 컨텐츠 List  (1) 2017.04.27

JWS 를 소개하겠습니다.


JOSE (JSON Object Signining and Encryption) 의 아래에 있는 Spec 중 하나로 OAuth 의 근간이 된 기술이라고 한다.



아래는 JOSE 에 속한 기술들. 이 외에도 좀 더 있다.


JWT (JSON Web Token) : JWS or JWE

JWS (JSON Web Signature) : 서버에서 인증을 증거로 인증 정보를 서버의 private key 로 서명한 것을 Token 화 한것.

JWE (JSON Web Encryption) : 서버와 클라이언트 간 암호화된 데이터를 Token 화 한것.

JWK (JSON Web Key) : JWE 에서 payload encryption 에 쓰인 키를 token 화 한것. (물론, 키 자체도 암호화되어 있죠.)



JWS 구조는 header, payload, signature 로 나뉘며 header 와 payload 는 JSON Object 로 되어있고 signature 는 이 둘을 서명한 것이다.

각각에 대해 Base64  를 하고 . 으로 구분하면 이것이 바로 JWT 가 된다.


예를 들어보자

header 원본: 

{

  "alg": "HS256",

  "typ": "JWT"

}


payload  원본:

{

  "sub": "1234567890",

  "name": "John Doe",

  "admin": true

}


JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ


Base64(header) = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Base64(payload) = eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

Base64(signature) = TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ



서명에 쓰인 키는 Token 을 생성하는 자 (주로 인증 서버) 의 private key 이다.

이는 내부적으로 생성하여 가지고 있으면 된다.



자, 그럼 JWS 를 이용하여 인증을 하는 매커니즘을 살펴보자.

1. 클라이언트 A 가 로그인

2. 서버에서는 payload 에 넣고 싶은 내용을 담은 후 (로그인한 사람의 정보, 접근 권한 등) 서명하고 Token 발행

3. 클라이언트는 다음 통신에서 항상 Token 을 함께 전달

4. 서버에서는 주요 통신에서 Token 을 확인. 내가 서명한 것이 맞는지 서명에 대한 validation 수행

5. 내가 한 서명이 맞고 인증 정보를 확인한 후 적절히 행동.

How does a JSON Web Token works


payload 는 제약이 없다.

하지만 header 의 경우 pre defined key 가 있기 때문에 이를 제외하고 추가할 내용이 있다면 추가하면 된다.



아래는 참고 사이트

JOSE http://jose.readthedocs.io/en/latest/

JOSE Documents https://datatracker.ietf.org/wg/jose/documents/ 

AuthO https://auth0.com/learn/json-web-tokens/

JWT https://jwt.io/

Visual studio code는 Microsoft에서 배포한 IDE입니다. (#)

공식 홈페이지에서 Free. Open source. Runs everywhere. 라고 특징을 소개하고 있습니다.

개인적으로는 Light라는 키워드를 추가해도 좋을 것 같습니다. :-D



일전에 Eddy와 Julian께서 eletron을 review할 때 소개되었던 툴이기도 하죠. (electron으로 개발된 툴입니다.)



최근 ionic2 검증을 시작하면서 Visual studio code를 본격적으로 사용하고 있는데요.

아직 걸음마 단계라 이런 저런 강좌를 많이 찾아서 보면서 다양한 시도를 해 보고 있습니다.


그러던 중, signature pad를 접목하는 youtube샘플을 찾았는데, 그 강좌를 보다가 재미있는 것을 발견했습니다.

youtuber가 사용하는 Visual studio code가 제 것과는 많이 달랐습니다.


그의 file tree는 매우 화려했습니다. 각각의 폴더 및 파일의 좌측에 형형색색의 icon이 붙어 있었습니다.


그래서 찾아보기 시작했습니다.

어떻게 하면 (Visual studio code를 꾸밀 수 있는가) file tree에 icon을 추가할 수 있는가를 말이죠.

방법은 간단합니다.



기본 look, 깔끔 그 자체입니다.


파일 > 기본 설정 > 파일 아이콘 테마 메뉴로 이동합니다.


dropdown list에서 아이콘 테마를 추가로 설치하던가 기설치된 항목 중 하나를 선택하여 적용합니다.


이로써 file tree에 예쁜 icon이 적용되었습니다. (theme name: File icons (#))



기본 설정에서 icon 출력을 지원하지 않았던 것은 아마도 light한 tool을 개발하겠다는 방향성에 기반한 것으로 보입니다.

Visual studio code blog의 내용 중에 file tree에 icon을 출력하는 것이 무겁고, 반면 큰 가치는 느낄 수 없을 것이라고 생각했다는 얘기가 있네요. (#)


References

https://code.visualstudio.com/

https://code.visualstudio.com/blogs/2016/09/08/icon-themes

https://marketplace.visualstudio.com/items?itemName=file-icons.file-icons



'Tech. Etc' 카테고리의 다른 글

KEMP.Zipper 개발 회고  (0) 2017.07.17
개발시 크롬에서 Cross Domain이슈 회피 방법  (0) 2017.05.26
JWS 소개  (4) 2017.05.22

+ Recent posts