반응형

web/node.js

    ffmpeg로 동영상 정보 추출 및 썸네일 가져오기

    ffmpeg로 동영상 정보 추출과 썸네일을 가져올 수 있다. 간단하게 설치하고 cli를 통해 진행해보자. 설치 우선 mac os인경우 brew install ffmpeg로 설치하고 linux인 경우 sudo apt-get install ffmpeg로 설치하면 되다. 동영상 정보 가져오기 (ffprobe) ffmpeg에서 ffprobe를 이용해서 동영상 정보를 추출 할 수 있다. print_format옵션을 사용하여 json 형태로 출력이 가능하다. 만약 프로그램에서 사용 시 node에서는 child_process를 이용해서 실행 수 결과를 받아서 사용하면 된다. ffprobe -v quiet -print_format json -show_format -show_streams wedul.mp4 썸네일 만들기..

    node.js에서 multer 사용하여 이미지 업로드 및 텍스트 파일 다루기

    Multer는 파일 업로드를 위해서 사용되는 multipart/form-data를 다루기 위한 node.js 미들웨어이다. busyboy를 기반으로 하고 있다. 자세한 내용은 https://github.com/expressjs/multer/blob/master/doc/README-ko.md 이곳에서 참고하면 된다. 그럼 간단하게 multipart/form-data로 올린 이미지 파일과 텍스트파일을 request post로 받아서 처리하는 코드를 만들어보자. 우선 multer를 설치한다. npm i multer 그리고 이미지 파일을 특정 경로에 저장해놓고 사용할 수 있지만 나는 메모리 스토리지를 사용해서 조작하는 방식으로 진행해보겠다. multer 라이브러리를 선언하고 memoryStorage를 사용할 수..

    Nginx, Apache 그리고 node.js 성능 관련 잡다한 정리

    Nginx과 Apache 비교 Nginx Apache 특징 - Nginx는 싱글 스레드 Event driven 방식- 미리 설정된 worker 프로세스 안에서 요청이 들어올 때 마다 요청을 분배하여 worker에게 역할을 분배- 기존에 정해놓은 리소스를 사용하기 때문에 CPU, Memory 등의 자원 사용률이 낮음 - 요청이 올 때마다 쓰레드를 생성하여 할당한다. 작업이 많아질 경우 많은 쓰레드할당이 필요하다. 그리고 쓰레드들이 작업을 진행 할 때마다 CPU를 사용하려 하기 때문에 문맥교환이 자주 발생된다. 차이점 - Apache에 경우 Blocking 방식으로 Network, DB 등 별도의 동작이 진행 될 때 Block되지만 Nginx는 Non-blocking 방식을 지원함 Non-blocking, ..

    sequelize에서 상황에 따라 조인 테이블을 변경하는 방법 - alias

    sequelize를 사용하다 보면 하나의 필드를 어떤 상황에서는 User테이블과 조인하고 다른 상황에서는 Dept 테이블과 조인을 하고 싶을 때가 있다.예를 들면 만약 로그를 기록 한다 하였을 때 모든 행위마다 로그를 기록할 수는 없기때문에 로그 테이블에 필드에 type을 나누고 발생한 object의 index만을 기록해서 진행하고 싶을 때 그럴 수있다. 그럴경우 targetIndex의 경우 동작 타입에 따라 User테이블과 조인할 수도 있고 Dept 테이블과 조인하는 등 유동적인 조치가 필요하다. 우선 Model을 define 하는 부분을 확인해보자.12345678910111213141516const Pub = Sequelize.define('pub', { name: { type: Sequelize.S..

    sequelize에서 조인 시 left join이 되지 않을 때 처리하는 방법

    sequelize에서 조인을 할때는 include를 사용해서 다음과 같이 한다. 123456await This.User.findOne({ attributes: ['id', ['name', 'userName']], include: [ { model: this.Dept} ]});Colored by Color Scriptercs물론 기존에 Model을 define할 때 연관관계를 설정을 해놓은 상태여야 하고 이렇게 할 경우에 나는 left join이 아니라 inner join으로 다음과 같이 되었다. SELECT id, name as userName FROM User u inner join Dept d on u.userId = d.userId;그래서 검색해서 알아보다보니 required 옵션을 부여하게 되면 ..

    sequelize에서 alias 사용하여 검색하는 방법

    sequelize에서 검색을 할 때 alias를 줘서 검색하는 방법은 다음과 같다. 생각보다 간단하다. 123await This.User.findOne({ attributes: ['id', ['name', 'userName']] //id, first AS firstName});Colored by Color Scriptercs

    sequelize 사용시 테이블 이름 변동없이 고정 Alias 사용방법

    sequelize는 마찬가지로 ORM을 사용하다보니 직접적으로 쿼리를 사용하는 것보다 정확하게 알지못하면 역시 개발속도도 늦어지고 문제가 많아지는 단점이 있다. 이번에는 sequelize를 사용하는데 조인할 때 테이블 이름이 갑자기 User에서 Users로 바뀌는 이슈가 발생했다. 이 이슈를 해결하기 위해서 sequelize Document를 검색했고 거기서 freeTableName 옵션을 발견했다.1234567891011121314151617181920212223242526const Bar = sequelize.define('bar', { /* bla */ }, { // don't add the timestamp attributes (updatedAt, createdAt) timestamps: fals..

    sequelize에서 timezone 설정 추가

    sequelize를 통해 datetime 필드에 값을 삽입해봤을 때 계속해서 값이 UTC 시간대로 들어가게 되었다. 그래서 해당 블로그(http://ggamu.com/81)에서 제공하는 방식대로 database 자체에 timezone을 서울로 변경하였다. 하지만 그래도 계속해서 값이 UTC로 들어갔고 그래서 혹시 몰라 삽입하는 코드에 new Date('2018-10-18 11:11:11').toLocalString()를 설정해줬다. 하지만 그래도 역시나 ㅜㅜ 그래서 sequelize 라이브러리 자체에 설정을 하는 부분이 있는지 싶어서 확이해봤는데, 설정 자체에 timezone을 설정하는 부분이 있었다. 그래서 sequelize 객체를 만들때 사용하는 option에 timezone옵션을 부여해줬다.1234..

    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

    Promise에서 Unhandled Rejection 설명

    Rejection은 프로미스에서 발생하는 에러를 칭한다. Es6에서는 비동기 동작의 상태 표현으로 "pending", "fulfilled", "rejected" 세가지가 정의 되었다. pending은 비동기 작업중인 것을 나타내고 fulfilled는 비동기 동작이 완료된것을 표현한다. 그리고 rejected는 비동기가 실패한 것을 표현해준다. promise에서 작업이 성공할 경우에는 resolve를 실행하고 실패할 경우에는 reject를 수행한다. 그럼 Promise에서 에러가 발생했을 때는 어떻게 처리하는게 좋을 까? 대부분은 에러가 발생했을 때는 promise chaining을 사용해서 .catch(err => { } );로 잡을 수 있다. 그럼 이런 경우에도 정상적으로 잡힐까? 12new Promi..

반응형