web
JPA(Java Persistence Api)의 장점과 단점 및 사용해야 하는 이유.
국내에서는 Mybatis를 사용하지만 대기업과 여러 스타트업에서는 JPA를 사용하고 있는 추세이다. 그리고 세계적으로 JPA 특히 ORM 프레임워크인 하이버네이트 사용률이 더 높다.그래서 더 자세한 부분을 이해하기 위해서 공부를 시작했다. 공부 시작하기전에 왜 JPA가 좋은지 정리해봤다. 생산성- 개발자가 일일히 CRUD용 쿼리를 작성해줘야하던 Mybatis와 같은 Mapper방식은 컬럼이 추가되거나하면 수정해주어야하는 부분이 상당히 많았다. 이로 인해서 자바를 사용하지만 객체중심 개발이 아니라 데이터베이스 흐름으로 개발을 하게되는 문제가 있다. JPA를 사용하게 되면 쿼리를 직적 생성하는 것이 아니고 만들어진 객체로 데이터베이스를 다루기 때문에 객체 중심으로 개발을 진행할 수 있다. 유지보수- SQL을..
node.js에서 aws s3 스토리지에 이미지 저장하기
AWS에서 제공하는 S3 스토리지는 다양한 파일을 bucket에 보관할 수 있다. 자세한 내용은 생활코딩 강의 참고하면 좋다. https://opentutorials.org/course/608/3006 그럼 우선 aws sdk를 설치하여야 한다.1npm i aws-sdk --savecs 그리고 AWS IAM에서 생성한 사용자가 있어야 한다. 사용자는 S3에 대한 권한을 가지고 있어야 한다. 사용자를 생성하고 권한을 부여하는 기능은 어렵지 않기때문에 검색해서 적용하면 된다. 그리고 해당 사용자를 생성하면 csv 파일로 secretkey를 받을 수 있다. 이를 AWS S3에 접근하여 사용하기 위해서 사용된다. 기본 정보가 담긴 config.json 생성 우선 부여 받은 사용자 accessKeyId와 secr..
swagger api 보안 oauth2 설명
swagger ui 페이지가 아무에게나 노출되면 보안에 문제가 발생할 수 있다. 그래서 swagger 사용시에 접속권한이 있는 사용자만 접근 가능하도록 해야한다. 그 인증 방식중에는 여려가지 방식이 있는데 그 중 Oauth2 방식을 사용하는 법을 살펴보자. 우선 기본적인 swagger 설정이 되어 있어야 하고 그 부분은 이 곳에서 살펴보자. https://rokking1.blog.me/221349422825?Redirect=Log&from=postView 해당 링크에 들어가서 보면 swagger.js에 정의했었던 SwaggerDefinition을 보면 필요한 정보들을 입력하는데 보안을 적용하기 위해서 이 옵션 중에 가장 상위에 Security Definitions와 Security Requirements..
node.js 애플리케이션 프로세스 관리 도구 매니저
PM2는 built-in 되어있는 Load Balancer와 함께 node.js 애플리케이션의 runtime and process 관리 기능을 제공해 주는 라이브러리이다. PM2를 이용하여 application이 죽지 않고 돌아갈 수있게 watch 기능을 제공해주는 기능도 제공한다. 그리고 error.log, info.log, 자원 점유 등등 여러 기능을 제공해준다. 간단하게 설치부터 사용법에 대해 정리해보자. 설치 $ npm install pm2 -g 실행방법 $ pm2 start app.js 사용법은 아주 간단하다. 위와 같이 command로 프로그램을 실행할 때 여러 옵션도 줄 수 있다. 12// wedul_app.js 를 max_space_size를 500으로 지정하고 실행하라.pm2 start ..
request-promise를 통해 가져온 euc-kr 문자열 인코딩 문제 해결 (iconv)
크롤러를 만들기위해 필요로하는 페이지를 가지고 오기위해 request-promise를 사용하였다. 요새 대부분의 홈페이지는 utf-8을 사용하기 때문에 큰 문제가 없으나 euc-kr를 사용하는 옛날 사이트들이 있다. 그런 사이트들의 정보를 그냥 request해서 가지고 오게되면 한글이 다 깨져버린다. 그것을 해결해보자. 우선 request-promise를 사용하여 데이터를 가지고 와보자.12345678const request = require('request-promise'); class Crawler { async crawler() { let doc = await reqest('http://url'); }}Colored by Color Scriptercs 역시 euc-kr를 사용하는 것을 확인하고 있고..
Rest Operator와 Spread Operator
es6를 사용하면서 보게된 Rest Operator와 Spread Operator에 대해 정리를 해보자. Rest Operator기존에 리터널 문법을 사용하여 객체나 배열의 값을 변수로 바인딩하여 사용할 수 있었다. 근데 object라는 객체의 값이 많은경우에는 여기서 값을 모두 하나하나 뽑아내는건 어렵기 때문에 하나의 객체로 뽑아낼때 사용한다.123456789101112131415161718192021222324// 기존에 하나씩 속성을 뽑아서 사용하던 방식const object = {a : 'wedul', b : 'cjung', c : 'gglee', d : 'babo'};const {a, b} = object;console.log(a, b); #출력wedul, cjung // Rest Operato..
node.js로 구글 스프레드시트에 접속하여 데이터 가져오기
자신의 구글 드라이브에 있는 엑셀 (스프레드시트)에 접속하여 데이터를 가져오는 방법을 알아보자. 우선 google-spreadsheet에 접근할 수 있는 Js를 다운로드 받자.1npm i google-spreadsheet --savecshttps://www.npmjs.com/package/google-spreadsheet 구글 스프레드 시트 만들기 구글 드라이브에 스프레드 시트를 만들자. 저 주소 URL에 블록처리되어있는 부분이 바로 키로 사용된다 구글 스프레드 시트 접속권한 사용자 생성 그리고 이 스프레드 시트에 접속할 수 있는 계정을 만들어야한다. https://console.developers.google.com 이곳에 접속하여 사용자를 만들고 키를 생성한다. (단순하게 들어가서 확인해보면 무리없이..
router 경로 enumset 처럼 받는 방법과 테스트 사이트
router.get('/wedul/:name(cjung|gglee), () => { }); 이런식으로 기재되어 있는 router 주소 매핑을 책에서 봤다. 자세한 설명이 없어서 알아보던 중 /wedul/ 주소 다음에 cjung 또는 gglee가 올 수 있는 형태라고 한다. 이걸 찾아보면서 router 경로를 만들고 테스트 까지 해볼 수 있는 사이트를 찾았다. http://forbeslindesay.github.io/express-route-tester/ Route에 규칙을 추가하고 path에 테스트할 규칙을 입력하면 key와 RegExp 그리고 결과까지 확인 할 수 있도록 제공해준다. 좋다.
node.js에 swagger 적용
Spring Boot에 적용했었던 swagger를 node.js에도 적용해보자. spring boot에서는 자동으로 만들어졌으나, node.js에서는 Definition을 적용해줘야해서 귀찮다. 설정 방법을 알아보자. 설치 패키지12"swagger-jsdoc": "^3.0.2","swagger-ui-express": "^4.0.0"cs Definition정의 swagger에 대해 적용할 프로그램에 대한 정보와 path, api들 위치등에 대해 정의한 definition을 정의한다.1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768..
node.js에서 winston.js를 이용하여 로그 남겨보기.
node.js에서 로그를 남기기 위해 사용되는 logger중 대표적인게 winston이라고 한다. winston을 이용하여 간단하게 logger를 만들고 모든 동작에 대해 로그를 파일과 콘솔에 찍어보자. winston 설치1npm i winston —savecs logger 생성 https://github.com/winstonjs/winston위에 github에 나와있는 예제를 사용하여 그대로 logger를 만들어보자.123456789101112131415161718192021222324252627282930313233343536373839404142#logger.js/** * Created by wedul on 2018. 8. 30. */'use strict'; const winston = requir..