분류 전체보기
[회고] 리팩토링을 꼭 해야돼?
[회고] 리팩토링을 꼭 해야돼?
2021.08.09리팩터링을 꼭 해야 하나..? (개발자경수님의 인스타툰) 2021년 3월 졸업작품을 코딩하던 중 든 생각이었다. 어차피 백엔드는 나 혼자 개발할 코드이고 기획 말고 추가 기능을 넣을 것이 없기 때문에 이미 만들어 놓은 API는 바뀌지 않을 것 같았다. 즉 유지보수가 필요 없다고 생각했다. 그렇게 수많은 버그를 수정하고 이걸 고치면 저게 고장 나고 저걸 고치면 이게 고장 나는 과정을 수 없이 반복하여 졸업작품을 완성하게 되었다. 곧바로 졸업작품 발표와 이어지는 교수님들의 압박 질문들.. 5개월간의 준비는 무성하게 완성 이후는 순식간에 지나갔다. 하지만 어느 날 문득 든 생각이 내 머리를 내려쳤다. 바로 졸업작품의 의의를 잊고 있었다. 1. 현재 혼자 개발하지만, 내가 일하는 곳은 조직이기 때문에 유지보수가..
[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] 오픈소스 기여 방법 (feat. 첫 오픈소스 기여)
[node.js] 오픈소스 기여 방법 (feat. 첫 오픈소스 기여)
2021.07.12들어가며 멋진 개발자는 무엇일까? 내 기준으로 대답을 한다면, 다른 개발자가 실질적으로 많이 사용하는 오픈소스에 기여하는 개발자라고 생각한다. (특히 Stars가 많은 ..!) 오픈소스에 기여한다고 해서 어떠한 금전적인 보상을 받지 않지만 단지 모두의 발전을 위해 오픈소스에 기여하는 개발자가 멋진 개발자라고 생각한다. 오늘은 내가 첫 오픈소스에 기여해본 기념으로 오픈소스 프로젝트 기여에 참고가 될 만한 내용을 공유하고자 한다. 왜 오픈소스 기여를 하는가? 1. 우리가 일반적으로 사용하는 수 많은 라이브러리나 프레임워크들은 거의 다 오픈소스로 이루어져 있다. 내가 자주 사용하는 프레임워크일수록 해당 프로젝트에 기여하는 것이 개발자의 의무 중 하나라고 생각한다. (기여의 형태는 아주 다양하고, 단순히 코드를..
[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에게 보낸..
AWS Lambda를 사용한 CloudFront 무효화 자동화 설정하기
AWS Lambda를 사용한 CloudFront 무효화 자동화 설정하기
2021.06.01CloudFront Cache Amazon CloudFront를 사용하면 사용자의 요청을 Edge Location에서 캐시 값을 검사하여 24시간 동안에는 사용자에게 다시 파일을 제공하지 않고 캐시 된 값을 빠르게 제공한다. 서비스의 종류에 따라 다르겠지만 만약 이미지를 제공하는 사이트라면 한번 올라간 이미지는 바뀔 일이 없어서 전송 비용을 아낄 수 있는 엄청난 기술이다. 물론 이미지 리사이징 후 다시 저장해야 하는 경우도 있지만 하지만 자주 바뀌어야 하는 오브젝트라면 S3에 원본 오브젝트가 바뀌어도 이미 캐시 된 이전 오브젝트가 클라이언트에게 제공되는 현상이 생길 수 있다. 오히려 자주 바뀌는 오브젝트는 CloudFront의 Cache가 오히려 독이 되는 셈이다. 그렇다고 오브젝트의 Cache가 즉시 ..
AWS S3 + CloudFront 대용량 파일 전송
AWS S3 + CloudFront 대용량 파일 전송
2021.06.01문제점 현재 웹서비스를 이용하려면 클라이언트가 200MB가 넘는 파일을 node.js로부터 전송받고 있다. node.js 는 싱글스레드이다. 이러한 단일 처리가 오래 걸리는 대용량 파일 전송은 적합하지 않기 때문에 빨리 대책을 모색하고자 했다. 수치적으로 보이는 문제점이 아래와 같았다. 높은 CPU 사용량 단일 클라이언트가 204MB 파일을 요청해 node.js 가 response 해주는데 CPU 사용량이 순간적으로 121% 까지 치솟는다. 눈대중으로 봐도 엄청난 과부하가 발생되는 것을 확인할 수 있다. 단 한 명의 클라이언트의 단 한 번의 요청으로 121%까지 치솟는 건 엄청난 문제가 아닐 수 없다. 만약 동시에 여러 명의 클라이언트가 동시에 요청을 한다면 서버가 어떻게 됐을지 상상이 가지 않는다. 물..
[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건의 발송 제한 및 이메일 인증을 받은 계정으로만 메일을 발송할 수 있기 때문에 발신에 사..
[AWS SES] 다른 도메인을 발송자로 설정하여 Gmail로 발송하기
[AWS SES] 다른 도메인을 발송자로 설정하여 Gmail로 발송하기
2021.06.01AWS SES 세팅 및 Gmail 리다이렉션 설정 Intro 현재 회사에서 사용하고 있는 메일서비스는 후이즈메일을 사용하고 있다. 가격은 월 29,500원 굉장히 사악했다. 사이트 회원가입시 인증 이메일 발송을 개발하기 위해 후이즈메일을 사용하 charming-kyu.tistory.com 이전 편에서 Gmail로 이메일을 전달하도록 처리했으니, Gmail에서 내 도메인 메일 주소를 발신자로 설정하여 메일을 전송하는 방법을 설명한다. 만약 본인의 AWS SES가 Sandbox 환경이라면 발신에 사용할 Email을 먼저 인증해야 한다. 설정 1. AWS SES - Identity Management - Email Addresses - Verify a New Email Address에서 발신에 사용할 내 도메..
[node.js] JWT 구현 예제
[node.js] JWT 구현 예제
2021.06.01Intro 웹 / 앱 개발을 하면 로그인 과정에서 반드시 만나게 되는 개념이 쿠키-세션이다. 최근 들어 IT 인프라 구성에는 많은 변화가 생겼다. 웹 기반의 서비스들은 웹과 앱을 함께 서비스하는 것을 넘어 ‘Mobile First’ 앱이 먼저라는 인식까지 생겨났다. 또한, AWS, Azure 와 같은 클라우드 서비스가 대중화되면서 고사양 단일 서버 아키텍처에서 중-저사양 다중 서버 아키텍처로 변화하고 있다. 이러한 상황에서 더 이상 쿠키-세션 기반 인증 아키텍쳐는 현재의 요구사항을 만족하지 못하고 있다. 하지만 실제 대기업에서 웹페이지를 만들 때 전부 쿠키-세션 기반 인증으로 구현한다. 즉, 쿠키-세션도 꼭 알아야 한다는 뜻 현재의 요구 사항을 그나마 충족시키는 Web Token 기반 JWT에 대해서 알..