Sangil's blog

https://github.com/ChoiSangIl Admin

Spring Boot 무료 Https 인증서(SSL) 발급하기 (letsencrypt) DEV / SERVER

2020-03-15 posted by sang12


이번에 블로그에 https를 적용하면서 letsencrtpt를 이용하여 스프링부트와 CentOs 환경에서 인증서를 발급받는 방법을 알아 보겠습니다. 
저는 https://github.com/certbot/certbot 깃허브 페이지에서 해당 소스를 clone해서 받아오는 방법을 이용하여 발급하였습니다.

yum install -y git 
git clone https://github.com/letsencrypt/letsencrypt
 

깃으로 해당 소스를 받아왔다면 아래와 같이 자신의 이메일과 도메인 주소를 입력합니다.

./letsencrypt-auto certonly --manual --email sang12@kakao.com -d test.co.kr

그리고 개인정보 아이피등이 활용될수있다는 것에 동의를 해주면 하나의 토큰값을 발급해줍니다.

해당 토큰값을 저의 사이트(test.co.kr/.well-known/~)에 인증을 해야 최종적으로 인증서가 발급됩니다. (putty로 서버에 붙어서 사용하는데 저 값을 복사할려고 컨트롤 c를 누를때마다 저 창이 꺼져서...부들부들했습니다 오른쪽마우스 키를 눌러도...동일... 그래서 저는 putty 상단창에서 오른쪽마우스 클릭하면 클립보드로 전체복사키가 있는데요 그걸 이용해서 복사해서 사용했습니다)

그럼 스프링부트에서 해당 위값이 나오게 수정을 해야하는데요. 아래와 같이 추가를 해줬습니다.

@RequestMapping(value = "/.well-known/acme-challenge/your tocken")
    @ResponseBody
    public String applyHttps(HttpServletResponse response) {
	return "your tocken";
    }

그리고 엔터를 눌러주면 /etc/letsencrypt/live/sang12.co.kr 해당 경로에 .pem 파일을 생성해주는데요 톰캣에서 인증서를 사용하기 위해서 아래와 같은 명령어를 사용해줍니다. 

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keywtore.p12 -name airpageserver -CAfile chain.pem -caname root

여기까지 SpringBoot에서 https를 인증서를 발급하는 방법을 알아보겠습니다. 이제 톰캣서버에 해당 인증서를 적용해봐야 겠네요.

#Spring Boot https 무료 인증서 #Spring Boot 인증서 발급 #letsencrypt 인증서 발급 #centos letsencrypt 발급
REPLY

node Js oracle procedure(프로시저) 실행 & DPI-1002 오류 DEV / SERVER

2020-02-25 posted by sang12


node Js에서 오라클로 프로시저를 실행하려고 하는데 해당 오류가 발생. DPI-1002: invalid dpiConn handle
커넥션 맺고 하는 부분은 아실거라 생각하고 생략!

문제의코드

var params = {
   P_RETURN:  { dir: oracledb.BIND_OUT }
};

await connection.execute( "CALL SP_TEST_CHOI(:P_RETURN)",
  params,
  function (err, ret) {
    if (err) {
      console.log('failed', err);
    } else {
      console.log(ret);
    }
  }
)

수정한 코드1

var params = {
   P_RETURN:  { dir: oracledb.BIND_OUT }
};

await new Promise (resolve => 
    connection.execute( "CALL SP_TEST_CHOI(:P_RETURN)",
    params,
    function (err, ret) {
       if (err) {
           console.log('failed', err);
       } else {
       console.log(ret);
       }
    }
));

- 수정한코드 최종 async/await으로 변경


var params = {
  P_RETURN:  { dir: oracledb.BIND_OUT }
};

let result = await connection.execute(
  'CALL HANMISHOP.SP_TEST_CHOI(:P_RETURN)',
  params
)
console.log(result);

#노드 oracle 프로시저 실행 #node 프로시저 실행 #node oracle 프로시저 #node oracle procedure 실행 #node oracle procedure await
REPLY

nodeJs mssql async, await transaction(트랜젝션) 처리 DEV / SERVER

2020-02-14 posted by sang12


서비스 로직 쪽을 개발하다 보면 여러개의 작업(디비 인서트 업데이트 딜리트 )을 수행 하다 하나의 로직에서 오류가 나면 전체를 롤백시켜야하는 경우가 있습니다. 그럴경우 하나의 트랜잭션으로 뭌어서 롤백처리 하는데요. 이번에 NodeJs에서 mssql과 연동하여 트랜잭션을 설정하는 방법을 알아보겠습니다

mssqlTransactionTest.js

const sql = require('mssql')
const dbConfigMssql = require('/dbconfig/dbconfig-mssql.js');

async function mssqlTransactionTest() {
    const conn = await new sql.connect(dbConfigMssql);
    const transaction = new sql.Transaction();

    try {
        await new Promise(resolve => transaction.begin(resolve));
        const request = new sql.Request(transaction)

        let result1 = await request.query("insert into TBTT1(col1) VALUES('111')");
        let result2 = await request.query("insert into TBTT2(col1) VALUES('XXXXXXXXXXXXXXXXXXXXXXXXXXXXX') ");
        let result3 = await request.query("insert into TBTT3(col1) VALUES('111')");

        await transaction.commit();
    } catch(err){
        await transaction.rollback();
        console.log("Error: " + err);
    };
}

mssqlTransactionTest();

dbconfig-mssql.js


module.exports = {
	user: '',
	password: '',
	server: '',
	port : '',
	database: '',
	options: {
		encrypt: false,
		enableArithAbort: true
	},
	pool:{
		max: 10,
		min: 1,
		idleTimeoutMills: 30000
	}
};

테스트 하기위해 mssql에 tbtt란 테이블을 생성했고 두번째 쿼리에서 컬럼값보다 큰값을 넣어서 오류를 생성하였습니다. 일반적으로 트랜잭션 처리를 하지 않으면 첫번째 쿼리의 데이터가 들어가게되는데요. 해당소스는 트랜잭션을 설정하고 catch문에서 롤백을 호출하기 때문에 전체 데이터가 안들어가는것을 볼 수있습니다. 그런데 트랜잭션을 잡아 놓고 커밋이나 롤백을 호출하지 않으면 테이블락이 잡혀서 셀렉트조차 안되더라구요. 오라클에선 로우락을 잡고 셀렉트도 정상적으로 되었는데 말이죠. 커밋과 롤백을 전절히 사용하여 테이블 락이 걸리는일이 없도록 주의해야겠네요.

#mssql 트랜잭션 #mssql transaction #mssql async transaction #mssql await 트랜잭션
REPLY