프로그래밍/Node.js
[Node.js] 구글 로그인 구현하기
[Node.js] 구글 로그인 구현하기
2021.12.15🎯 구글 로그인 구현하기 📝 구글 로그인 구현 순서 구글 클라우드 플랫폼 프로젝트 생성 API 및 서비스 → OAuth 동의 화면 설정 사용자 인증정보 → OAuth 클라이언트 ID 만들기 passport-google-oauth20 연동 📝 passport-google-oauth20 passport-strategy 인터페이스의 구글 로그인 구현체 OAuth 인증을 구현하기 위해서는 인증 요청, 데이터 수신 등의 복잡한 작업 필요하다. passport-google-oauth20는 손쉽게 구글 OAuth 2.0을 구현해 주는 패키지이다. 📕 passport-google-oauth20 작성 🛠 google strategy const GoogleStrategy = require('passport-google-o..
[Node.js] OAuth란
[Node.js] OAuth란
2021.12.15🎯 OAuth Open Authorization 서비스 제공자가 다른 서비스에게 데이터를 제공하기 위해 서비스 사용자에게 제공하는 사용자 인증방식의 표준 📝 OAuth 동작 방식 서비스 제공자에게 인증 요청 인증 완료 후 사용자 정보를 요청한 서비스로 전달 인증 정보를 이용해 서비스 제공자의 데이터 사용 📝 OAuth와 로그인 OAuth는 사용자의 인증을 제공하는 표준 이를 활용하여, 로그인 기능을 간편하게 구성할 수 있다. 웹 서비스 제공자는 아이디, 비밀번호 로그인을 구현할 필요 없다. 웹 서비스 사용자는 로그인 시 아이디, 비밀번호를 입력할 필요 없다.
[Node.js] 회원 비밀번호 찾기 구현, 메일 발송 기능
[Node.js] 회원 비밀번호 찾기 구현, 메일 발송 기능
2021.12.15🎯 회원 비밀번호 찾기 구현 📝 로직 임의의 문자열로 비밀번호 초기화 초기화된 문자열을 메일로 전달 → 메일 발송 기능 개발 필요 초기화 후 첫 로그인 시 비밀번호 변경 요청 📝 메일 발송 기능 구현 방법 📕 SMTP 서버 이용 Simple Mail Transfer Protocol 메일 전송을 위한 표준 규약 SMTP 서버란 표준 규약을 통해 메일을 전송하는 기능을 구현한 서버 네이버 구글 등의 메일서버를 이용하여 무료로 발송 가능 메일 발송 및 관리 기능 직접 개발 필요 📕 메일 발송 서비스 이용 (Mailgun, Sendgrid ... ) 메일 발송 api 제공 및 관리용 웹페이지 제공 사용량에 따라 유료 과금 📝 Node.js 에서 메일 발송하기 SMTP 서버를 직접 만들고 운영하는 것은 비효율적이..
[Node.js] JWT + Cookie 사용하기
[Node.js] JWT + Cookie 사용하기
2021.12.15🎯 JWT + Cookie 사용하기 📝 Cookie 란? 웹 서비스에서 사용하는 정보를 클라이언트에 저장하고 HTTP 요청 시 이를 함께 전송하여 클라이언트 정보를 서버에 전달하는 기술이다. 📝 Session vs Cookie Session : 클라이언트 정보를 서버 측 저장소에 저장하고 사용 Cookie : 클라이언트 정보를 클라이언트 (브라우저)에 저장하고 사용 📝 JWT + Cookie Session을 사용한 유저 로그인의 경우 : Cookie에 Session ID 저장 → Session Store에서 유저 정보 가져오기 JWT를 쿠키에 저장하는 경우 : JWT로 요청 → 서명 확인 후 유저 정보 사용 데이터베이스 접근이 줄어서 효율적인 인증 구현 가능 📝 JWT 로그인 구현하기 기존 프로젝트에서 ..
[Node.js] JWT란?
[Node.js] JWT란?
2021.12.15🎯 JWT JSON Web Token 인증을 위한 정보를 특별한 저장소를 이용하지 않고 전자 서명을 이용하여 확인하는 방법 📝 JWT의 구성 header : 토큰의 타입 (jwt), 데이터 서명방식 payload : 전달되는 데이터 signature : 헤더와 페이로드의 전자서명 JWT는 Web Token, 데이터를 웹에서 사용하기 위한 스펙이므로 웹에서 문제없이 사용할 수 있는 문자열로만 구성된 base64 인코딩을 사용한다. 📝 JWT와 보안 JWT의 payload는 단순히 정보를 base64 encode → decode시 정보 노출됨 → 민감한 정보는 제외하고 토큰 생성 필수 서버는 JWT를 생성할 때, 비공개키를 이용하여 서명을 한다. payload를 조작할 경우 서명이 일치하지 않기 때문에 인증..
[Node.js] CSR로 댓글 기능 구현하기
[Node.js] CSR로 댓글 기능 구현하기
2021.12.13🎯 CSR로 댓글 기능 구현하기 📝 CSR을 구현하는 방법 페이지 로드 시 필요한 리소스를 클라이언트에 선언 클라이언트에서 필요한 데이터를 비동기 호출 클라이언트가 전달받은 데이터를 가공, 리소스를 사용하여 화면에 표시 📝 클라이언트에 리소스 선언 - HTML Template 클라이언트에 리소스를 선언하기 위한 다양한 방법이 존재. (React.js, Vue.js 등) 본 강의에서는 간단하게 HTML Template 기능을 사용 HTML Template 은 브라우저에 표시되지 않는 HTML Element를 작성 해 두고, JavaScript로 이를 화면에 반복적으로 그릴 수 있게 하는 기술 📝 댓글 화면 작성하기 🛠 posts/view.pug ... table thead tr td(colspan="2")..
[Node.js] 회원과 게시글의 연동
[Node.js] 회원과 게시글의 연동
2021.12.13🎯 회원과 게시글의 연동 📝 PostSchema 수정 author: { type: Schema.Types.ObjectId, ref: 'User', required: true, }, PostSchema에 author 추가 populate를 사용하기 위해 ObjectID 사용 ref를 유저 모델의 이름인 'User'로 선언 📝 게시글 등록 요청 수정 const author = await User.find({ shortId: req.user.shortId, }); if (!author) { throw new Error("No User"); } await Post.create({ title, content, author, }); req.user에는 strategy에서 최소한의 정보로 저장한 shortId, em..
[Node.js] Session Store 사용하기
[Node.js] Session Store 사용하기
2021.12.13🎯 Session Store 📝 Session이란? 웹 서버가 클라이언트의 정보를 클라이언트 별로 구분하여 서버에 저장하고 클라이언트 요청 시 Session ID를 사용하여 클라이언트의 정보를 다시 확인하는 기술 클라이언트가 정보를 저장하고, 요청 시 정보를 보내는 Cookie와 대조된다. 📝 Session 작동 방식 서버는 세션을 생성하여 세션의 구분자인 Session ID를 클라이언트에 전달 클라이언트는 요청 시 session id를 함께 요청에 담아서 서버에 전송 서버는 전달받은 session id로 해당하는 세션을 찾아 클라이언트 정보를 확인 📝 Express.js의 session express-session 패키지를 사용하여 간단하게 session 동작을 구현할 수 있다. 특별한 설정 없이 자동..
[Node.js] Passport.js와 로그인
[Node.js] Passport.js와 로그인
2021.12.13🎯 Passport.js와 로그인 📝 Passport.js란? Express.js 애플리케이션에 간단하게 사용자 인증 기능을 구현하게 도와주는 패키지이다. 유저 세션 관리 및 다양한 로그인 방식 추가할 수 있다. 📝 passport-local passport는 다양한 로그인 방식을 구현하기 위해 strategy라는 인터페이스를 제공한다. strategy는 passport가 로그인 방식을 어떻게 처리할지에 대한 인터페이스를 미리 설계한 거다. strategy 인터페이스에 맞게 설계된 다양한 구현체들이 있다. (facebook, google,...) 자연스럽게 login flow를 구현할 수 있게 도와준다. passport-local은 username, password를 사용하는 로그인의 구현체이다. 📝 로..
[Node.js] 회원가입 구현하기
[Node.js] 회원가입 구현하기
2021.12.13🎯 회원가입 구현하기 회원가입 시 다양한 정보를 받기보다는 절차를 간단하게 만들어서 사용자들이 부담 없이 가입할 수 있도록 해야 된다. 📝 회원 정보를 데이터베이스에 저장하기 회원의 비밀번호를 그대로 저장한다면 관리자가 모든 회원의 비밀번호를 알 수 있다. → 보안 취약점 발생 📕 비밀번호 저장방법 - Hash Hash는 문자열을 되돌릴 수 없는 방식으로 암호화하는 방법이다. hash 출력 값을 이용해 사용자의 비밀번호를 알아낼 수 없다. hash 함수는 단방향 암호화 함수로, hash 값을 알더라도 원본 문자열을 알아낼 수 없다. 비밀번호의 Hash 값을 데이터베이스에 저장하고, 로그인 시 전달된 비밀번호를 Hash 하여 저장된 값과 비교해 로그인을 처리한다. 📕 SHA1 const hash = cry..
[Node.js] 게시판 페이지네이션 구현하기, Pagination
[Node.js] 게시판 페이지네이션 구현하기, Pagination
2021.12.09🎯 게시판 페이지네이션 구현하기, Pagination 데이터를 균일한 수로 나누어 페이지로 분리하는 것 Mongoose를 이용해 Pagination을 구현하기 위해서 한 페이지에 보일 자료의 개수를 limit으로 제한하고 특정 페이지로 넘어가기 위해 skip으로 자료를 건너뛴다. 📝 Express.js + Mongoose의 Pagination router.get(... => { const page = Number(req.query.page || 1); // 값이 없다면 기본값으로 1 사용 const perPage = Number(req.query.perPage || 10); ... page : 현재 페이지 perPage : 페이지 당 게시글 수 /posts?page=1&perPage=10 : 일반적으로 ..
[Node.js] Async Request Handler
[Node.js] Async Request Handler
2021.12.09🎯 Async Request Handler exprss의 공식 기술은 아니다. 패턴 중 하나이다. Async Request Handler를 사용하면 async를 쉽게 사용할 수 있고, Request Handler를 처리하는데 공통적으로 오류처리를 할 수 있거나 간단하게 구현할 수 있다. 📝 request handler의 오류처리 request handler에서 오류를 처리하기 위한 방법 promise().catch(next) async function, try ~ catch, next 📝 async request handler async의 비동기 처리는 매우 편리하지만, 매번 try - catch 구문을 작성하는 것은 귀찮고 실수하기 쉽다. request handler를 async function으로 작..