Backend/Node.js 10

Node.js - Nodemailer + Gmail 사용하여 비밀번호 찾기 구현

Nodemailer 에서 Gmail을 사용하기 위해서는 앱 비밀번호 설정이 필요하다. 구글 계정설정 → 보안 → 앱 비밀번호 추가 * 생성된 앱 비밀번호는 다시 확인할 수 없으므로 기록이 필수다. 구글 계정 메뉴에서 자물쇠 모양 보안을 들어간다. 이 곳에서 2단계 인증을 하면 앱 비밀번호를 추가할 수 있다. - nodemailer 코드 const nodemailer = require('nodemailer') const transport = nodemailer createTransport({ service: 'Gmail', auth: { user: "google account", # 본인 구글 계정 pass: "app password", # 본인 앱 비밀번호 }, }) ... const message = ..

Backend/Node.js 2022.03.07

Node.js - JWT 기본

1) JWT JSON Web Token의 약자로 flask 포스팅에도 잠깐 다루긴 했지만 인증을 위한 정보를 특별한 저장소를 이용하지 않고, 전자 서명을 이용하여 확인하는 방법이다. - JWT의 구성 header - 토큰의 타입, 데이터 서명 방식 payload - 전달되는 데이터 signature - 헤더와 페이로드의 전자서명 JWT는 Web Token, 데이터를 웹에서 사용하기 위한 스펙이므로 웹에서 문제없이 사용할 수 있는 문자열로만 구성된 base64 인코딩을 사용 (JWT의 생김새는 이 포스팅에서 확인 가능) 서버는 JWT를 생성할 때, 비공개키를 이용하여 서명한다. payload를 조작할 경우 서명이 일치하지 않기 때문에 인증에 실패한다. - JWT 작동 방식 1. 사용자 로그인 2. 서버는 ..

Backend/Node.js 2022.03.07

(정리) 3계층 구조로 백엔드 회원가입 Rest API 구현

Rest API의 핵심은 요청이 왔을 때 응답을 보내는 것이다. - 회원가입 API 1. API 설계하기 (1) URI 엔드포인트와 HTTP 메소드를 정한다. 회원가입 API이므로 URI는 /user/register 또는 user/create 등으로 정할 수 있다. 회원가입은 사용자 정보를 처음 db에 저장하는 과정이므로 method를 POST로 한다. (2) 요청으로 받을 데이터(json)과 응답으로 보낼 데이터를 정한다. 회원가입이므로, 사용자 이름, 이메일, 비밀번호 등을 받는다. 프론트에서는 사용자가 누구인지 식별해야하므로, id를 내보낸다. id와 같이 프론트에서 사용할만한 데이터들은 내보내준다. (3) Mongoose Schema를 만든다. 반환할 json 데이터를 바탕으로 스키마를 만든다. ..

Backend/Node.js 2022.03.07

Node.js - Async Request Handler (비동기 오류 처리)

1) request handler 흔히 promise()를 사용한 catch(next)와 async function의 try ~ catch, next를 사용하여 오류를 처리해왔다. 근데 이들 구문을 작성하는 것은 귀찮고 실수하기 쉽다. async request handler는 request handler를 async function으로 작성하면서 try~catch, next를 자동으로 할 수 있도록 구성한 아이디어다. 아래 코드에서 asyncHandler는 requestHandler를 매개변수로 갖는 함수형 미들웨어다. const asyncHandler = (requestHandler) => { return async (req, res, next) => { try { await requestHandler..

Backend/Node.js 2022.02.26

Node.js - Express.js와 MongoDB로 웹서비스 만들기

*참고하면 좋을 포스팅* Mongoose ODM 기초와 간단한 CRUD 구현 코드(Node.js) 1) Mongoose ODM이란? Object Data Modeling MongoDB의 Collection에 집중하여 관리하도록 도와주는 패키지다. Collection을 모델화하여, 관련 기능들을 쉽게 사용할 수 있게 도와준다. Mongoose ODM을 사용하는.. disdlzheld.tistory.com 1) Express.js + Mongoose로 CRUD 구현하기 (1) 모델 선언하기 MongoDB의 ObjectID는 URL에 사용하기 좋은 값이 아니기에 대체할 수 있는 shortId를 생성할 것이다. ---./models/schemas/post.js const mongoose, { Schema } =..

Backend/Node.js 2022.02.26

Node.js - Express.js와 REST API (2)

자바스크립트의 Array 함수 사용하여 데이터 처리 구현 router와 route handler 사용해 HTTP요청, 응답 처리 구현 (1) 메모 목록 구현하기 - models/note.js note라는 모델을 모듈로 선언 let notes = [// 데이터들 { id: 1, title: 'first note', content: 'My first note' } ]; exports.list= () => { // list를 내보내기 위한 exports return notes.map(({ id, title }) => ({ id, title, })) } map이라는 배열 함수를 사용하여 { id, title }를 하나씩 순회하여 받아옴 - routes/not..

Backend/Node.js 2022.02.20

Node.js - Express.js와 REST API (1)

1) Middleware 미들웨어는 Express.js 동작의 핵심으로, HTTP 요청과 응답사이에서 단계별 동작을 수행해주는 함수다. 2) 미들웨어의 작성과 사용 const middle = (req, res, next) => { ... next(); } const middle2 = (req, res, next) => { ... next() } next(); } 위의 코드처럼 req, res, next를 인자로 갖는 함수를 작성하면 미들웨어가 된다. next() 함수를 통해 다음 미들웨어를 호출하는 것이다. next() 함수가 호출되지 않으면 미들웨어 사이클이 멈추기 때문에 주의해야한다. - 어플리케이션 미들웨어 app.use((req, res, next) => { ... next()// 첫 번째로 실행..

Backend/Node.js 2022.02.20

Node.js - 웹과 Express.js

1) 웹 서비스 동작 방식 브라우저가 인터넷을 통해 HTTP 요청을 서버에 전달 → 서버는 사용자의 HTTP 응답을 브라우저로 전송 → 브라우저는 HTTP 응답을 사용자에게 적절한 화면으로 노출 ===HTTP 요청 예시=== GET / HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Accept: text/html Accept-Language: ko-KR Accept-Encoding: gzip, deflate Connection: keep-alive 요청 - 어떤 사용자가 어떤 데이터를 필요로 하는지 등을 담고 있다. ===HTTP 응답 예시=== HTTP/1.1 200 OK X-Powe..

Backend/Node.js 2022.02.20

Node.js - NPM과 모듈

1) NPM Node Package Manager의 약자로 Node.js 프로젝트를 관리하는 필수 도구다. (온라인 저장소 + 커맨드라인 도구) 온라인 저장소: 오픈소스 라이브러리와 도구들이 업로드되는 저장소 커맨드라인 도구: 프로젝트 관리를 위한 다양한 명령어 제공 2) NPM 사용 ( 간단한 프로젝트 시작에만 필요한 내용만을 함축적으로 다루겠다.) - 프로젝트 생성하기 $npm init 프로젝트 디렉터리를 생성한 뒤, 해당 디렉터리 안에서 init 명령어를 사용하여 프로젝트가 생성 가능하다. 사진 처럼 몇 개의 질문이 나올 텐데 처음엔 필요한 거 빼고 그냥 모두 엔터. 그럼 package.json 이라는 파일을 만들어준다. * 여기서 package.json이란? 프로젝트 관련 정보들이 저장되는 파일로..

Backend/Node.js 2022.02.18

Node.js 이해

1) Node.js Node.js는 자바스크립트를 어느 환경에서나 실행할 수 있게 해주는 실행기다. 브라우저에서 실행하는 자바스크립트는 웹 내부 제한된 동작만을 수행하지만, Node.js는 크로스 플랫폼 실행이 가능하고 동작에 대한이 없으며, 다양한 어플리케이션 개발이 가능하다. - Node.js는 싱글 쓰레드, 비동기, 이벤트 기반이다. 쓰레드란, 명령을 실행하는 단위로서 한 개의 쓰레드는 한 번에 한 가지 동작만 실행 가능하다. 비동기란, 동작을 실행한 후 완료가 되기를 기다리지 않고 다른 동작을 바로 실행하는 것이다. 이벤트 기반이란, 비동기 동작의 완료를 처리하는 방법이다. 어떤 비동기 동작이 완료될 경우 실행할 함수를 미리 등록한다. 그리고 동작이 완료되면 그 함수를 실행한다. 2) ES6 EC..

Backend/Node.js 2022.02.18