Backend 23

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

Flask Test - 테스트 코드를 사용한 기능 확인 테스트

1) Flask Test 테스트 코드는 내가 작성한 기능들이 의도대로 잘 수행하는지 기능 확인을 위한 테스트를 위해 작성한다. - 테스트의 장점 (1) 테스트 환경 세팅 자동화 특수한 상황에 맞는 파라미터도 사전에 정의할 수 있기 때문에, 매번 파라미터 값을 수동으로 바꿔가면서 테스트하지 않아도 된다. (2) 통합 테스트 시간을 줄임 통합 테스트에는 테스트코드로 검증하기 어려운 부분에만 집중할 수 있다. (클라이언트 인터페이스 등) (3) 외부와 의존성 있는 로직을 테스트하기 편리 외부와 통신하는 로직을 Mock으로 처리해두면, 외부에서 발생할 수 있는 여러 환경을 내가 가짜로 구성할 수 있다. (4) 전체 테스트 자동화 모든 세부 기능을 통합 테스트에서 다 확인하기는 어렵다. 전체 테스트가 자동화되면,..

Backend/Flask 2022.03.01

flask-restful - RESTful API서버를 만드는 라이브러리

- Flask는 return 값을 jsonify로 주어 RESTful API를 만들 수 있다. flask-restful 라이브러리를 활용하면 더 RESTful에 맞게 서버를 만들 수 있다. 코드비교 === flask === @app.route('/first', methods=['GET']) def route(): return jsonify('GET') @app.route('/first', methods=['POST']) def route(): return jsonify('POST') === restful === class First(Resource): def get(self): return 'GET', 200 def post(self): return 'POST', 200 위 flask 코드와 아래 res..

Backend/Flask 2022.03.01

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

Mongoose ODM 기초와 간단한 CRUD 구현 코드(Node.js)

1) Mongoose ODM이란? Object Data Modeling MongoDB의 Collection에 집중하여 관리하도록 도와주는 패키지다. Collection을 모델화하여, 관련 기능들을 쉽게 사용할 수 있게 도와준다. Mongoose ODM을 사용하는 이유 - 연결 관리 Node.js 사용 시, 기본 드라이버는 연결 상태를 관리하기 어렵지만, Mongoose를 사용하면 간단하게 데이터베이스와의 연결상태를 관리해준다. - 스키마 관리 스키마를 정의하지 않고 사용할 수 있는 건 NoSQL의 장점이지만, 데이터 형식을 미리 정의해야 코드 작성과 프로젝트 관리에 유용하다. Mongoose는 Code-Level에서 스키마를 정의하고 관리할 수 있게 해준다. - Populate MongoDB는 기본적으로..

Backend/MongoDB 2022.02.26

Flask 기초 - REST API (2) (Ajax를 사용한 update, delete)

1) Ajax - 동기? 비동기? 동기: 앞의 작업이 끝나지 않는다면 다음 작업을 할 수 없다. 비동기: 앞의 작업 상태와 상관없이 다음 동작을 수행할 수 있다. Ajax는 비동기식 자바스크립트와 XML의 줄임말로 REST API를 손쉽게 구현하기 위해 사용되는 프레임워크이다. (손쉽게..............?) - 간단하게 알아보는 Ajax의 형태, Flask와의 사용법 HTML파일 속 Ajax의 형태 $.ajax({ url: '/ajax test', //Ajax로 요청을 보낼 주소를 적음 type: 'GET', //어떤 방법으로 ? data: {}, //무슨 데이터를 ? // url, type, data까지가 클라이언트가 서버에 요청하는 부분 success: function(res){// 데이터 요..

Backend/Flask 2022.02.23

Flask 기초 - REST API (1) (create, read)

1) REST API REST는 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다. REST 서버는 API 제공, 클라이언트는 사용자 인증 등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로 의존성이 줄어들게 된다. 자원: URI에 표현 되어야 한다. → 무엇을 서버에 요청할 것인지 ex) /book/1 행위: HTTP 메소드 → 어떤 방법으로 요청할 것인지 표현: API만 보고 무엇을 요청할지 알 수 있도록 *정리하자면* URI에 어떤 데이터를 요청하는지 표현이 되어야하고, 그 데이터에 대해 어떤 동작을 할 것인지를 HTTP Method들로 표현을 해야하는데 Mehtod에는 GET, POST, PUT, DELE..

Backend/Flask 2022.02.23