'npm'에 해당되는 글 8건

web/node.js

node.js oauth2 server 만들기

스프링 프로젝트에서는 자주 oauth2를 사용했었는데 node.js는 해본적이 없어서 공부할 겸 node-oauth2-server 라이브러리를 사용하여 진행해보고 있다.


확실히 힘든 부분이 있고 설명이 어려워서 외국에서 예로 인터넷에 올려논 부분을 실제로 돌려보면서 수정하여 진행하고 있다. 


설명과 소스는 git repository에 계속 수정해서 올릴 예정이다.

현재는 Authorization_code와 password 방식만 올려놓았다.


implict와 refresh_token 하는 기능도 수정해서 올려야겠다.


Git Repository 주소

https://github.com/weduls/node-aouth2-server-example

  1. Favicon of https://wedul.site BlogIcon 위들 wedul 편집답글

    refresh_token grant_type도 올려놓았다.

    implicit는 해당 라이브러리에서 주석처리되어있다. 이유는 나와있지 않아 해당 기능은 아직 지원이 어려울듯.. 자세한 사용 설명은 readme.md를 읽어보시길.

web/node.js

maxmind의 geoLite2를 이용해서 접속한 사용자의 지역정보 가져오기

서비스를 운영하다보면 사용자 아이피에 따라 장소에 맞는 상품을 추천해줘야 할 때가 있다.

그럴때 사용하는게 geoIp인데 이런 서비스를 제공하는 회사는 대표적으로 maxmind, db-ip, ipstack, ip2location 등이 존재한다.


그 중에 무료로 사용하기에 geoLite2가 좋다. geoLite2는 62%가 일치하고 geoIp2는 66% 일치한 정보를 제공한다. 그래서 무료로 사용할 수 있는 geoLite2를 사용해보자.


데이터베이스 다운로드

먼저 지역정보를 보관하고 있는 데이터베이스를 다운받아야 한다. 데이터베이스는 csv와 mmDB를 제공한다.  

링크 : https://dev.maxmind.com/geoip/geoip2/geolite2/ 


mmDB에서 데이터를 확인하기 어렵기 때문에 csv 파일에서 제공하는 정보를 보자. 우리가 필요한 정보는 사용자가 접속한 city (도시)정보가 필요한데 그 필드가 geoname_id로 되어 있다. 그 geoname_id는 지역에 고유 아이디로 이 아이디에 맞는 city 정보를 찾는 방법은 아래 주소를 통해 xml 형태로 받아 볼 수 있다. username 값은 회원가입을 통해 등록 할 수있다.

1
http://ws.geonames.org/get?geonameId=${geoname_id}&style=full&username=${userName}
cs


그럼 node.js에서 이 데이터베이스와 사용자 ip를 사용하여 city 정보를 추출하는 방법을 확인해보자.


우선 아래 주소에서 maxmind npm을 다운로드 받는다.

https://www.npmjs.com/package/maxmind


그리고 maxmind 라이브러리를 사용해서 데이터베이스를 로드하고 ip를 사용하여 지오로케이션 정보를 조회 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'use strict';
 
const maxmind = require('maxmind');
const path = require('path');
 
class MaxMindService {
 
  getIp(userIp) {
    const cityLookUp = maxmind.openSync(path.join(__dirname, './db/GeoLite2-City.mmdb'));
    const city = cityLookUp.get(userIp);
 
    return city;
  }
 
};
 
 
module.exports = new MaxMindService();
cs


테스트 코드를 만들어서 결과를 확인해보자.

1
2
3
4
5
6
7
8
9
10
11
'use strict';
 
const geoIp = require('../../lib/maxMind');
 
 
describe('geo IP', function () {
  it('아이피 정보로 지역정보 찾아보기', () => {
    console.log(geoIp.getIp('121.131.27x.1xx'));
  });
 
});
cs


결과를 보면 ip에 맞는 위치정보가 출력된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{ city: { geoname_id: 1841277, names: { en: 'Mapo-gu' } },
  continent: 
   { code: 'AS',
     geoname_id: 6255147,
     names: 
      { de: 'Asien',
        en: 'Asia',
        es: 'Asia',
        fr: 'Asie',
        ja: 'アジア',
        'pt-BR''Ásia',
        ru: 'Азия',
        'zh-CN''亚洲' } },
  country: 
   { geoname_id: 1835841,
     iso_code: 'KR',
     names: 
      { de: 'Südkorea',
        en: 'Republic of Korea',
        es: 'Corea del Sur',
        fr: 'Corée du Sud',
        ja: '大韓民国',
        'pt-BR''Coreia do Sul',
        ru: 'Южная Корея',
        'zh-CN''大韩民国' } },
  location: 
   { accuracy_radius: 10,
     latitude: 37.5544,
     longitude: 126.9093,
     time_zone: 'Asia/Seoul' },
  registered_country: 
   { geoname_id: 1835841,
     iso_code: 'KR',
     names: 
      { de: 'Südkorea',
        en: 'Republic of Korea',
        es: 'Corea del Sur',
        fr: 'Corée du Sud',
        ja: '大韓民国',
        'pt-BR''Coreia do Sul',
        ru: 'Южная Корея',
        'zh-CN''大韩民国' } },
  subdivisions: [ { geoname_id: 1835847, iso_code: '11', names: [Object] } ] }
Process finished with exit code 0
 
cs


web/node.js

node.js로 구글 스프레드시트에 접속하여 데이터 가져오기

자신의 구글 드라이브에 있는 엑셀 (스프레드시트)에 접속하여 데이터를 가져오는 방법을 알아보자.

우선 google-spreadsheet에 접근할 수 있는 Js를 다운로드 받자.

1
npm i google-spreadsheet --save
cs

https://www.npmjs.com/package/google-spreadsheet


구글 스프레드 시트 만들기
구글 드라이브에 스프레드 시트를 만들자. 저 주소 URL에 블록처리되어있는 부분이 바로 키로 사용된다


구글 스프레드 시트 접속권한 사용자 생성

그리고 이 스프레드 시트에 접속할 수 있는 계정을 만들어야한다. https://console.developers.google.com 이곳에 접속하여 사용자를 만들고 키를 생성한다. (단순하게 들어가서 확인해보면 무리없이 만들 수 있다.)


키 만들기 버튼을 이용해서 키를 생성하면 해당 키드는 json 파일로 떨어지는데 이곳에 private_pw와 ID등이 들어있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
// 가짜 데이터
{
  "type""service_account",
  "project_id""ringed-dispatch-157300",
  "private_key_id""0467e31241242428c12412421412449234960ae3c749e1609c5e3ca53b41",
  "private_key""-----BEGIN PRIVATE KEY-----\8iBnuPwiI\n5/ZUYY3yv2n5+UAs+dLVAYo=\n-----END PRIVATE KEY-----\n",
  "client_email""820847001811221412412214124236-compute@developer.gserviceaccount.com",
  "client_id""1060476412312214212323ㄴㅇㅁㄹㄴㅇ5255744659718",
  "auth_uri""https://accounts.google.com/o/oauth2/auth",
  "token_uri""https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url""https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url""https://www.googleapis.com/robot/v1/metadata/x509/820847001836-compute%40developer.gserviceaccount.com"
}
cs

그리고 이 사용자에게 해당 문서의 권한을 공유 해준다.


Node.js로 접근하기

google-spreadsheet 라이브러리를 가져와서 사용자 정보를 입력하고 URL KEY를 이용해서 접속하면 해당 스프레드 시트에 접속할 수 있고 조작 및 정보를 가지고 올 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * Created by we on 2018. 9. 5.
 */
'use strict';
 
const GoogleSpreadsheet = require('google-spreadsheet');
const defer = require('../defer');
 
// spreadsheet key is the long id in the sheets URL
const config = require('../../config/config');
 
class WedulData {
 
  constructor() {
    this.doc = new GoogleSpreadsheet(config.google.key);
  }
 
  async _initDoc() {
    await defer(this.doc, this.doc.useServiceAccountAuth)(config.google.credit);
    return await defer(this.doc, this.doc.getInfo)();
  }
 
  async readSheetData() {
    const sheet = (await this._initDoc()).worksheets[0];
    const rows = await defer(sheet, sheet.getRows)({offset: 1, limit: 100});
 
    return rows;
  }
 
}
module.exports = new WedulData();
cs


결과


web/node.js

Node js 테스트 프레임워크 Mocha

회사에서 node.js를 이용해서 백엔트 프로젝트에 참여하게 되어서 새롭게 node.js를 공부하게 되었다.

그러면서 node.js에서 새롭게 사용할 테스트 프레임워크를 찾던중 mocha라는 것을 발견했다.


Mocha
- node.js에서 사용하는 테스트 프레임워크로써 suite를 만들어서 unit 테스트를 가능하도록 제공해주는 프레임워크이다.


설치방법
mocha는 Node.js 6.x 버전 이상이부터 지원한다.

1
2
3
npm i mocha -g
 
npm i --save-dev mocha
cs

package.json에 해당 스크립트를 추가해준다.

1
2
3
"script" : {
  "test" : "mocha"
}
cs


사용방법

root 경로에 test directory를 생성하고 javascript를 추가한다. 그리고 describe와 it 메서드를 사용하여 테스트를 진행한다.

describe : 테스트의 suite()를 구성하기 위해 사용되는 집합 (모집군으로써 집단을 만드는데 사용)
it : 실제로 테스트를 진행하는 메서드


이런식으로 간단하게 지정하여 테스트를 진행할 수 있다.

몇 가지 추가기능을 더 설명하자면 같은 suite() 내부에서 테스트를 제외하고 싶은 경우에는 it.skip()을 사용하고 별도의 테스트만 진행하고 싶을 때는 it.only()를 사용한다.

Junit처럼 별도의 assert를 제공하는데 이는 다음 장에 정리해보자.




하이브리드/아이오닉

하이브리드 앱 소개 및 아이오닉 소개, 설치 방법

하이브리드 앱

-> 웹 기술을 통해 앱을 개발하여 다양한 OS에 지원되는 앱을 칭한다



하이브리드 앱과 네이티브, 웹앱 비교

네이티브 앱

장점 : 빠르다, 네이티브 API 사용의 편의성

단점 : 언어의 제약, 플랫폼 한정적


웹앱

장점: 유지보수의 편리성, 크로스 플랫폼

단점 : 네이티브 액세스 못함


하이브리드 앱

장점 : 웹개발과 동일하여 개발의 연속성, 크로스 플랫폼

단점 : 성능이 느리다. (저사양 기기에서 호환안됨, 최저 OS 버전 필요)




아이오닉 소개

아니오닉

-> 웹 사이트와 웹 애플리케이션 개발에 사용했던 html, css, javaScript 등을 그대로 사용할 수 있게 해주는 도구와 유틸리티의 모음

-> AngularJS를 사용하여 웹 애플리케이션을 지원

-> 사용자 인터페이스와 UX를 지원

-> CLI 환경에서 명령어 사용을 통해 조작


코르도바

->플랫폼과 애플리케이션 사이의 브릿지를 생성하기 위한 도구이며, 설치 가능한 네이티브 앱을 만들어 준다.

 

 
개발환경 구축

-> node.js 설치하여 onic CLI 설치, 코르도바 설치

-> npm install -g cordova ionic



 [ 1 ]  [ 2 ] 

푸터바

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today : 18
  • Yesterday : 371
  • Total : 93,047