체인의정석

라인해커톤 참여기2) 서버와 DB 연동하기 본문

블록체인/퍼블릭 블록체인

라인해커톤 참여기2) 서버와 DB 연동하기

체인의정석 2020. 12. 18. 03:06
728x90
반응형

1. 서버 접속정보는 env 파일로 빼두기

서버의 경우 local - dev -test - product 식으로 여러 단계로 분리해서 나누어서 관리해야한다. 물론 간단한 해커톤의 경우 그렇게 까지 나누지 않지만 특히 블록체인 프로젝트에서는 infura의 endpoint나 apikey 운영자의 wallet 프라이빗키 등을 그냥 두면 깃허브에 올릴때도 불편하기 때문에 git ignore에 env를 넣어주고 해당 파일 안에 접속정보 및 블록체인모듈에 필요한 정보들을 넣어둔다.

 

cross env를 넣어준다.

 

그리고 접속정보는 config 폴더 안에 CommonConfig를 두어서 공통설정값으로 넣어둔다.

블록체인을 쓴다면 해당 config도 추가해주어야 한다. 실제 프로젝트에서는 env파일을 통해 메인넷 테스트넷 관리자 키나 endpoint 등을 구분해주면 된다.

require('custom-env').env( true );

CommonConfig = {};

CommonConfig.Database = {
    host: process.env.DBHOST,
    port: process.env.DBPORT,
    user: process.env.DBUSER,
    password: process.env.DBPASS,
    waitForConnection: false,
    connectionLimit: 100,
    multipleStatements:true,
    timezone: '00:00'
};

CommonConfig.Blockchain={
    apikey: process.env.apikey,
    secret: process.env.secret,
    ownerWalletSecret: process.env.ownerWalletSecret,
    ownerWalletAddress: process.env.ownerWalletAddress,
    contractId: process.env.contractId
}

moduel.exports = CommonConfig;

2. 기존에 개발한 API를 config  값으로 바꾸어주고 모듈을 추가해준다.

const CommonConfig = dicontainer.get( "CommonConfig" );
const apikey = CommonConfig.blockchain.apikey;
const secret = CommonConfig.blockchain.secret;
const ownerWalletAddress = CommonConfig.blockchain.ownerWalletAddress;
const ownerWalletSecret = CommonConfig.blockchain.ownerWalletSecret;
const contractId = CommonConfig.blockchain.contractId;

이런식으로 넣어주면 설정값들을 env에서 가져와서 중요 정보들이 노출도 안되고 더 깔끔한 코드가 나오게 된다. diContainer는 여러개의 모듈이 동시에 실행되면 부하가 더 크기 때문에 부하를 줄이기 위하여서 하나의 모듈에서 여러모듈을 넣어놓고 가져다가 쓰는 구조를 만들기 위해 쓴다. (실장님이 만들어주셨다 난 아직 주니어 개발자 ㅎㅎㅎ)

 

실장님이 짜주신 항상 쓰는 모듈들 (미리 저장해놓았다가 재사용중이다. 물론 모듈중 블록체인 부분은 내가 구현하였다.) 모듈들도 프로젝트마다 업데이트 되는데 지금 상황에서는 저게 최신본이다. 물론 사용법과 원리는 다 물어봐서 알고 있다.

env를 쓸때는 pacakage.json에서 start 대신 dev 이런식으로 해주자.

이걸 깜빡해서 또 해맸다.

 

3. passport 바꿔서 로그인 설정

로그아웃은 route의 index.js에 있고,

passport.js는 지정된 폴더에서 보고 이해해서 바꾸어준다. 

 

4. app.js 설정

 

dicontainer에 사용하는 모듈을 넣어준다.

//Module container 
global.dicontainer = require( './module/diContainer' )();
dicontainer.register( "BigNumber", require( 'bignumber.js' ) );
dicontainer.register( "pathUtil", require( 'path' ) );
dicontainer.register( "crypto", require( 'crypto' ) );
dicontainer.factory( "CommonConfig", require( "./config/CommonConfig" ) );
dicontainer.factory( "Err", require( './module/error-handle' ) );
dicontainer.factory( "JSONResponse", require( "./module/JSON-Response" ) );
dicontainer.factory( "DB", require( './module/sql' ) );

개발일정이 촉박하여 나머지 부분은 나중에 정리하도록 하겠다.

728x90
반응형
Comments