Node.js
[node.js] localhost https 적용 (SSL)
[node.js] localhost https 적용 (SSL)
2022.05.06서론 로컬에서 개발할 때 http://localhost:8000 과 같은 형태의 URL을 상용하게 됩니다. 하지만 소셜 로그인을 local에서 수행하고 싶을 때 벤더사마다 다른 보안 정책으로 https 프로토콜에서만 로그인이 가능하도록 막아놓는 경우가 있습니다. 이런 경우 개발을 끝낸 뒤 배포 후 테스트 서버에서 확인해야 하는 번거로움이 생기게 됩니다. 본 포스팅에서 간략히 TLS(SSL) 개념에 대해 정리하고 localhost에서 https 적용 방법에 대해 설명드리겠습니다. HTTP vs HTTPS Http는 Hyper Text Transfer Protocol의 약자로 네트워크를 통해 데이터를 전송하기 위한 프로토콜입니다. Https의 S는 TLS 또는 SSL을 사용하여 HTTP 요청 및 응답 을 암..
[express] Redis 개념 및 nodejs 캐시 구현 예제
[express] Redis 개념 및 nodejs 캐시 구현 예제
2021.12.19들어가며 웹 어플리케이션에서 데이터를 캐시하는 것은 매우 중요하며 고성능을 얻을 수 있습니다.물론 데이터를 관계형 데이터베이스에 저장 후 직접 쿼리하여 사용자에게 제공할 수 있지만 매 요청마다 쿼리를 해야하거나 메인페이지에 사용되는 타 API에 비해 상대적으로 많이 호출되는 데이터들은 캐시하는 것이 유리할 수 있겠습니다. 먼저 간단히 Redis에 대해 알아보고 express로 구현 예제를 작성하겠습니다. Redis란? REDIS(REmote Dictionary Server)는 메모리 기반의 “키-값” 구조 데이터 관리 시스템이며, 모든 데이터를 메모리에 저장하고 조회하기에 빠른 Read, Write 속도를 보장하는 비 관계형 데이터베이스입니다. 대표적으로 5가지의 데이터 형식으로 사용 가능합니다. St..
[sequelize] 모델 커스텀 메서드 선언 방법 (ES6)
[sequelize] 모델 커스텀 메서드 선언 방법 (ES6)
2021.09.18예제 모델 // 기존의 sequelize Profile 모델 class Profile extends Sequelize.Model { static init(sequelize, DataTypes) { super.init({ id: { type: DataTypes.INTEGER, allowNull: false, primaryKey: true, autoIncrement: true, }, name: { type: DataTypes.STRING(200), allowNull: false }, email: { type: DataTypes.STRING(200), allowNull: false, }, profile_url: { type: DataTypes.TEXT, allowNull: true, } }); return a..
[node.js] DI(의존성 주입) 구현하기
[node.js] DI(의존성 주입) 구현하기
2021.08.20DI (Dependency Injection) 의존성 주입(DI)는 잘 알려진 기술이다. IoC 컨테이너를 이용한 DI는 여러 모듈의 확장성과 독립성에 큰 도움을 준다. 특히 Spring에서 Java Bean을 이용하여 DI를 구현하는 것이 국내에서 가장 유명하다고 생각한다. 하지만 Node.js에서 DI는 그렇게 활발하게 쓰이고 있지 않는 것 같다. 왜냐하면 require로 모듈을 바로 불러오면 되기 때문에 굳이 필요성을 못 느끼기 때문이다. 하지만 이번에 공부를 하면서 node에서도 DI를 해야 하는 이유를 알게 되어서 예제 코드와 함께 설명하고자 한다. DI와 테스트 코드 의존성 주입은 하나의 패턴이다. 만약 의존되는 클래스를 매개변수로 전달해준다면, 모듈 안에서 클래스를 불러오거나 새로 만드는 것..
[node.js] 견고한 node.js 프로젝트 설계하기 (번역)
[node.js] 견고한 node.js 프로젝트 설계하기 (번역)
2021.08.09본 포스트는 Sam Quinn의 “Bulletproof node.js project architecture” 글을 번역한 것입니다. 혼자 보기 너무 아까운 글이기에 번역하여 공유합니다. Introduction Express.js는 node.js REST API를 만드는데 좋은 프레임워크지만, 어떻게 node.js 프로젝트 구조를 잡아야 할지 알려주지 않습니다. 우습게 들릴 수도 있지만, 이건 매우 큰 문제입니다. 올바른 node.js 프로젝트 구조는 코드의 중복을 피해 주고 안정성을 높여주며, 당신의 서비스를 확장하는데 도움이 될 것입니다. 이 포스트는 다년간의 부족했던 설계와 나쁜 패턴, 그리고 수없이 많은 코드 리팩터링 경험을 통해 쓰인 하나의 리서치입니다. 목차 폴더 구조 3 계층 설계 (3 Lay..
[express] 유효성 검사를 위한 express-validator 사용하기
[express] 유효성 검사를 위한 express-validator 사용하기
2021.07.16서론 Spring-boot를 공부하던 중 Bean Validation에서 제공하는 annotation을 사용해보니 코드가 너무 간결해지고 관리가 편하다는 것을 느꼈다. 그래서 node express에서도 요청 값을 validation 할 수 있는 라이브러리를 찾다가 알게 된 express-validator에 대한 설명글을 쓰고자 한다. 유효성 검사를 좀 더 간편하게! express-validator(npm) express-validator(getting-started) const { body, validationResult } = require('express-validator'); app.post( '/user', body('username').isEmail(), body('password').isLe..
[sequelize] timestamp 에 날짜, 시간에 대한 타임존(timezone) 처리 방법
[sequelize] timestamp 에 날짜, 시간에 대한 타임존(timezone) 처리 방법
2021.07.15문제 기존 Sequelize에서 날짜형(date, timestamp)을 저장시 -09:00 된 값으로 저장이 되었지만 mysql에서 값을 불러올 때에도 sequelize가 자동으로 +09:00 된 값으로 계산후 값을 반환했기 때문에 전혀 문제가 없었다. EX) sequelize "6월 4일 00:00" 저장 시 => 실제 mysql에 저장되는 값 "6월 3일 15:00" 하지만 최근 mysql에 저장되는 타임존을 UTC(국제표준시)에서 KST(한국표준시)로 변경한 것이 화근이었다. 한국 시간으로 값을 넣었는데 mysql timezone이 KST임에도 불구하고 sequelize가 -09:00 된 값으로 시간을 저장하게 되었버렸다. const Sequelize = require("sequelize"); //..
[node.js] Swagger 자동 생성 라이브러리 swagger-autogen 적용 예제
[node.js] Swagger 자동 생성 라이브러리 swagger-autogen 적용 예제
2021.07.08서론 https://github.com/davibaltar/swagger-autogen davibaltar/swagger-autogen This module performs the automatic construction of the Swagger documentation. The module can identify the endpoints and automatically capture methods such as to get, post, put, and so on. The modul... github.com swagger-autogen이라는 아주 좋은 라이브러리를 발견했다. 위 주소의 공식문서를 읽어보면 현재 구현되어 있는 라우터들의 모듈 별 엔드 포인트를 식별하고 응답 상태 코드, 바디 파라미터, 경..
[node.js] crypto를 이용한 Django 패스워드 저장방식 PBKDF2 알고리즘 구현하기
[node.js] crypto를 이용한 Django 패스워드 저장방식 PBKDF2 알고리즘 구현하기
2021.06.29구현하게 된 이유 현재 API서버는 Django로 만들어진 서버를 이용해 사용자의 아이디와 패드워드를 저장하고 있었다. 하지만 Django API서버의 기능 전부를 Node.js로 전환을 하고 있었다. 그러기 위해서는 Node.js의 사용자 패스워드 저장방식과 패스워드 검증 방식이 Django와 같은 방식으로 구현해야했다. 만약 다른 방식으로 패스워드 저장과 검증을 하게된다면 DB에 저장되어 있는 기존의 사용자의 패스워드를 사용할 수 없기 때문이다. 오늘은 Django 패스워드 저장방식(PBKDF2)과 검증방식을 Node.js로 구현하고자 한다. Django가 패스워드를 생성하는 방법 공식문서에 따르면 Django의 패스워드는 기본적으로 PBKDF2 알고리즘을 사용하여 아래와 같은 형태로 저장이 된다. ..
[node.js] crypto RSA 공개키 알고리즘 구현 예제
[node.js] crypto RSA 공개키 알고리즘 구현 예제
2021.06.231. RSA 암호 알고리즘이란? Rivet, Shamir, Adelman 세사람의 첫이름을 따 RSA라고 만든 암호 알고리즘을 보고자 한다. RSA 암호 체계는 미국 MIT에서 개발한 공개키 암호 시스템이다. 이 암호 알고리즘의 핵심은 큰 정수의 소인수 분해가 어렵다는 점을 이용하여 암호화를 시킨다. 이러한 RSA 암호 알고리즘은 전자상거래에서 가장 흔히 쓰고있는 공개키 알고리즘이다. 2. RSA 암호 알고리즘 방식 1. A가 B에게 정보를 안전하게 보내고 싶어한다. 이때 RSA 알고리즘을 이용하고자 한다. 2. B가 공개키와 개인키를 만들어 A에게 공개키를 보낸다. (개인키는 B만 가지고 있다.) 3. A가 B로부터 받은 공개키를 이용하여 보낼 정보를 암호화한다. 4. A가 암호화된 정보를 B에게 보낸..
[node.js] express 회원가입 인증 메일 발송 API
[node.js] express 회원가입 인증 메일 발송 API
2021.06.01[AWS SES] 다른 도메인을 발송자로 설정하여 Gmail로 발송하기 2021.06.01 - [AWS/SES (Simple Email Service)] - AWS SES 세팅 및 Gmail 리다이렉션 설정 AWS SES 세팅 및 Gmail 리다이렉션 설정 Intro 현재 회사에서 사용하고 있는 메일서비스는 후이즈메일을 사용하고 있다... charming-kyu.tistory.com 이전 편 에서 내 도메인을 발송자로 설정해 Gmail에서 발송이 가능하니 오늘은 node.js express 환경에서 회원가입 인증메일을 발송하는 API를 만들고자 한다. 만약 본인의 AWS SES가 Sandbox 환경이라면 1일 100건의 발송 제한 및 이메일 인증을 받은 계정으로만 메일을 발송할 수 있기 때문에 발신에 사..
[node.js] JWT 구현 예제
[node.js] JWT 구현 예제
2021.06.01Intro 웹 / 앱 개발을 하면 로그인 과정에서 반드시 만나게 되는 개념이 쿠키-세션이다. 최근 들어 IT 인프라 구성에는 많은 변화가 생겼다. 웹 기반의 서비스들은 웹과 앱을 함께 서비스하는 것을 넘어 ‘Mobile First’ 앱이 먼저라는 인식까지 생겨났다. 또한, AWS, Azure 와 같은 클라우드 서비스가 대중화되면서 고사양 단일 서버 아키텍처에서 중-저사양 다중 서버 아키텍처로 변화하고 있다. 이러한 상황에서 더 이상 쿠키-세션 기반 인증 아키텍쳐는 현재의 요구사항을 만족하지 못하고 있다. 하지만 실제 대기업에서 웹페이지를 만들 때 전부 쿠키-세션 기반 인증으로 구현한다. 즉, 쿠키-세션도 꼭 알아야 한다는 뜻 현재의 요구 사항을 그나마 충족시키는 Web Token 기반 JWT에 대해서 알..