전체 글
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..
테스트 모듈 Assert 정리
Assert는 node.js의 단위 테스트를 하기위해서 제공되는 테스트 모듈이다. 해당 모듈의 주요 메소드를 정리해보자. Assert 메소드 정리 // 모듈 로드 const assertion = require('assert');assertion.ok(object)인자값이 true가 아니면 에러assertion.ifError(object)인자값이 false가 아니면 에러assertion.equal(object, object) 두 개의 인자를 == 으로 비교 assertion.notEqual(object, object)두 개의 인자를 != 으로 비교assertion.staticEqual(object, object)두 개의 인자를 === 으로 비교assertion.notStaticEqual(object, ob..
node.js express 모듈 - router
Express 모듈은 node.js에서 핵심 모듈인 http와 connect 컴포넌트를 기반으로 하는 웹 프레임워크이다. 여기서 사용되는 router 기능에 대해 정리해보자.기본적으로 express 모듈을 사용하기 위해서는 다음과 같이 모듈을 로드해야한다. router 의 기본 형태는 다음과 같다. 123456const express = require('express');const router = express(); // 기본 동작 형태router.get('/' , (req, res, next) => { });Colored by Color Scriptercs 기본 router 등록은 위와 같다. http 요청 메서드에 따라 메서드의 이름은 post, put, delete등으로 변경해서 사용하면 되고 첫번..
node.js에서 NODE_ENV를 사용하여 개발, 운영 환경 구분하기.
express에서는 NODE_ENV라는 환경변수를 통해 개발환경과 운영환경에 따른 설정정보를 다르게 가져올 수 있다. 설정방법 Mac1export NODE_ENV=productioncs Window1set NODE_ENV=productioncs 사용방법expreess 모듈에서 process.env.NODE_ENV 값을 접근하여 저장된 환경설정 값을 가져올 수 있다. 아래와 같이 설정했을 때 환경설정이 없거나 developer이면 config/developer.js 파일을 읽어서 정보를 읽고 productiond이면 production.js 파일을 읽어온다. 이런 방식을 사용해서 개발과 운영에서 사용되는 db 정보 등등을 구별해서 사용할 수 있다.123456789101112131415161718192021..
Node js 테스트 프레임워크 Mocha
회사에서 node.js를 이용해서 백엔트 프로젝트에 참여하게 되어서 새롭게 node.js를 공부하게 되었다. 그러면서 node.js에서 새롭게 사용할 테스트 프레임워크를 찾던중 mocha라는 것을 발견했다. Mocha - node.js에서 사용하는 테스트 프레임워크로써 suite를 만들어서 unit 테스트를 가능하도록 제공해주는 프레임워크이다. 설치방법 mocha는 Node.js 6.x 버전 이상이부터 지원한다.123npm i mocha -g npm i --save-dev mochacspackage.json에 해당 스크립트를 추가해준다.123"script" : { "test" : "mocha"}cs 사용방법root 경로에 test directory를 생성하고 javascript를 추가한다. 그리고 des..
Spring Boot Cross Domain 처리
웹 브라우저에서 같은 도메인을 사용하는 서비스에 대한 요청은 정상적으로 처리가 되나 도메인이 같지 않은 서비스에 요청을 할경우에 오류가 발생한다. 이는 동일 출처 정책(Same Origin Policy) 라는 정책을 두어 다른 도메인의 서버에 요청하는 것을 보안 문제로 간주하고 이를 차단하는 것 때문에 발생한다. Spring Boot에서 간단한 방식으로 해결할 수 있다. 1. 요청에 @CrossOrigin 애노테이션 붙히기12345@GetMapping("/greet")@CrossOriginpublic Greet greeting() { return new Greet("test");}Colored by Color Scriptercs 2. 특정 도메인에서 오는 요청만 받고 싶을 경우.-> 특정 도메인에서 오는..
Fake SMTP로 메일 전송 테스트
간단하게 rabbitMQ 코드 만들어보는 도중에 메일전송기능이 필요했다. 그런데 메일을 계속 보낼수도 없기 때문에 메일이 잘 전송되고 있는지 확인할 수 있는 프로그램이 있는지 찾아봤다. 그중에 Fake SMTP 라는 프로그램이 있어서 소개해본다.프로그램은 하단에 첨부된 링크에서 다운받을 수 있다. 실행방법은 다운받은 파일위치에서 java -jar fakeSMTP-2.0.jar 명령어로 실행시키면 GUI 화면이 나온다. 스프링 부트에서 JavaMailSender와 간단한 설정을 통해 메일 전송 여부를 테스트 할 수 있다. 1234567891011121314151617181920212223242526// application.propertiesspring.mail.host=localhostspring.mai..
스프링 웹플럭스(spring webflux)를 활용한 간단한 리액티브 마이크로 서비스
자바 리액티브 프로그래밍은 리액티브 스트림 명세를 바탕으로 하고 있다. 리액티브 스트림 명세에는 컴포넌트 사이의 비동기 스트림 처리나 이벤트 흐름을 Non Blocking 방식으로 처리하기 위한 문법을 정의한다. 일반적인 옵저버 패턴과 달리 리액티브 스트림에는 시퀀스의 처리, 완료 알림, 실패시 backpressure 적용 등이 추가된다. backpressure는 받는 컴포넌트에서 보내는 컴포넌트에게 얼마만큼의 데이터를 소화할 수 있다고 알려줄 수 있다. 그래서 받는 컴포넌트에서 처리될 준비가 됐을 때만 데이터를 받을 수 있다. 그래서 서로 속도가 다른 컴포넌트 사이의 통신을 할 때 유리하다. 스프링 프레임워크 5 web flux는 Reactor 리액티브 스트림 명세를 기반으로 되어있다. 간단한 Spri..
리액티브 스트림의 이해
리액티브 스트림은 총 4개의 인터페이스로 구성되어 있다. ㅁ 발행자(Publisher) - 데이터의 소스를 가지고 있으며 Subscriber의 요청이 오면 데이터를 발행한다. 구독자는 발행자에 대한 구독을 추가할 수 있다. Subscribe 메소드를 통해서 구독자를 추가할수 있다.123public interface Publisher { public void subscribe(Subscriber