node.js 썸네일형 리스트형 끝판왕의 프로젝트_Node.js 펫시터 프로젝트 지난번 서비스 기획에 이어 본격적인 코딩 작업에 들어갔다. 백엔드에서의 CRUD 는 많이 연습하고 경험한 것이라 크게 어렵지 않을 것이라고 생각했지만, 프로젝트 성격 상 기존과는 좀 다른 내용들이 있어 생각보다 속도가 나지 않았다. 진행하며 몇 가지 문제에 대해 정리해보도록 하겠다. #1. 배열 형태로 들어오는 데이터를 DB에 넣기 우리 서비스에서는 펫시터가 본인이 예약 가능한 스케쥴을 등록하게 했다. 따라서 입력받는 데이터가 배열의 형태로 들어오게 될텐데.. 생각해보니 배열의 형태로 들어오는 데이터를 DB 각 행에 넣어본 적이 없었다. 예를 들어 A라는 펫시터는 12월에는 12/20,21,22,25 날짜만 예약을 받을 수 있을 때 유저 경험상 예약 가능한 날짜를 하나씩 4번 입력하는 것보다 한번에 4 .. 더보기 Node.js_에러 처리 미들웨어 리팩토링하기 [해보고자 하는 것] 1. 3 Layered Architecture 의 서비스 계층에서 발생한 유효성 검사의 처리를 에러 처리 미들웨어에서 진행한다. 2. 기존 swtich문으로 모든 에러 case를 기재하였던 것을 새로운 에러 클래스를 이용하여 효율적으로 관리한다. #1. 에러 처리 미들웨어 이번 3 계층형 아키텍쳐(3 Layered Architecture)로 리팩토링을 진행하면서 Service 계층에서 모든 유효성 검사를 진행했다. 다만, 서비스 계층에서는 res를 내보내지 않기로 생각했기 때문에 별도로 에러를 처리하는 미들웨어가 필요했다. 에러처리 미들웨어를 사용하게 된다면 발생한 에러를 처리할 때(클라이언트에게 응답할 때) 응답하는 방식 혹은 구성을 다르게 할 경우 에러처리 미들웨어에서만 변경하면.. 더보기 Node.js_3 Layerd Architecture 로 리팩토링하기 ! (2) 앞선 포스팅에서 리팩토링을 위한 전초작업을 완료했다면 이제 작성한 코드들을 3 계층 구조로 리팩토링을 본격적으로 해보도록 하겠다. [해보고자 하는 것] 1. 작성한 API를 3 Layerd Architecture 형식으로 리팩토링 진행 #1. Router 파일 기존 라우터 파일의 경우 모든 기능과 메서드가 통합되어 관리되어 있었기 때문에 코드를 명확히 구분하기가 어려웠다. // 수정 전 router 파일 예 import express from 'express'; import db from '../models/index.cjs'; import authMiddleware from '../middlwares/need-signin.middlware.js'; import { Op } from 'sequelize'.. 더보기 Node.js_3 Layerd Architecture 로 리팩토링하기 ! (1) 이번 포스팅은 개인 과제이지만 프로젝트라고 하기엔 좀 애매한 수준이라 Node.js 카테고리에 남긴다. 기존 express 프레임워크를 통해 서버를 구축하고 회원가입, 로그인, 게시글 CRUD 등 간단하게 만든 API들을 이번 주차에 배운 3 Layerd Architecture 형식으로 계층을 나누어 리팩토링을 시도하였다. 기존에는 Sequelizer ORM을 사용했으나 금번에는 Prisma를 사용했기에 DB를 다시 연결하는 부분을 먼저 정리하도록 하겠다. [해보고자 하는 것] 1. 기존 코드를 3 Layerd Architecture 형식으로 리팩토링 - 기본 폴더 구조 세팅 2. ORM 변경 (Prisma) #1. 리팩토링을 위한 폴더 구조 세팅 3 계층형 아키텍쳐(3 Layerd Architectur.. 더보기 끝판왕의 프로젝트_Node.js CRUD 실습(5)_상품 등록, 조회, 수정, 삭제 미들웨어를 구축하여 로그인이 유지된 상태에서 상품 등록, 조회, 수정, 삭제 즉 CRUD 기능을 구현해야했다. 위 내용이 무슨 의미인고 하니 기존(로그인 및 미들웨어 구축 전)에는 상품 등록 시 비밀번호를 함께 입력하게끔하여 추후 수정이나 삭제 시 입력했던 비밀번호가 필요했다. 하지만 로그인 및 미들웨어를 구축함으로써 비밀번호 입력이 필요없이 본인이 작성한 글을 수정하거나 삭제할 수 있다 ! 이번 단계에서는 기존 작성한 과제 코드를 활용하지만 몽고DB가 아닌 Sequelize를 사용하기 때문에 몇 가지 수정사항이 있는점을 유의하자! #1. 상품 등록 * 상품 등록 시 필요한 사항 1) 입력이 필요한 내용 : productName, contents, (userId) 2) 유효성 검사 - 입력되는 데이터 형.. 더보기 끝판왕의 프로젝트_Node.js CRUD 실습(4)_미들웨어 구축 우리는 많은 서비스들에 회원가입을 하고 로그인하여 해당 서비스를 이용한다. 로그인이 회원이라는 것을 인증했기 때문이다. 회원이라는 것을 인증하는 미들웨어를 구축하는 단계까지 왔다 ! #구현하고자 하는 것 - 로그인 이후 발행된 JWT토큰을 가지고 사용자 인증하기 * 유효성 검사 - Authorization에 담겨 있는 형태가 표준과 일치 하지 않는 경우 에러 메시지 - JWT의 유효기간이 지난 경우 - JWT 검증에 실패한 경우 # 로그인 시 발행된 토큰 확인하기 ! JWT토큰 발행 시 payload에 userId라는 키를 만들고 값에 id값을 할당했다. Secret키는 env파일로 관리하였고, 옵션으로 토큰의 유효기간을 12시간으로 설정하였다. 요렇게 만들어진 토큰을 res.cookies(쿠키)에 담아.. 더보기 끝판왕의 프로젝트_Node.js CRUD 실습(3)_로그인 지난번 회원가입 기능 구현에 이어 로그인 기능까지 구현했다 ! 추가로 로그인 이후 jwt 토큰을 발행하여 로그인 이후 계속 인증이 유효하도록 하였다. 관련 내용을 진행하면서 특이사항을 정리해보고자 한다. # 구현하고자 하는 것 - 회원가입된 정보를 바탕으로 로그인 기능 구현하기 ! - 로그인 시 jwt토큰 발행하여 인증 유효하게 하기 ! ** 로그인 시 요구사항 1) 이메일 또는 비밀번호가 일치하지 않을 경우 에러메시지 (비밀번호는 해시된 상태이기에 맞춰서 비교해야함 !) 2) jwt 토큰 안에는 유저ID를 담아야하고 유효기간은 12시간으로 설정 3) jwt 토큰 인증에 실패할 경우 알맞은 에러코드와 메시지 반환 # 로그인 기능 로그인이 진행되는 단계 ! 1. 유저가 body에서 이메일, 비밀번호를 입력.. 더보기 끝판왕의 프로젝트_Node.js CRUD 실습(2)_회원가입 지난번 간략하게 Node.js를 활용해 CRUD API를 작성하고 배포까지 진행했다. 이후 인증에 대한 내용을 배우면서 로그인, 회원인증 등의 개념을 배우게 되고 관련 내용을 실습하는 중이다. 아직 프로젝트가 진행중이긴 하지만 내용이 많을 것 같아 기능별로 나눠서 정리하는게 좋을 것 같다. 오늘은 프로젝트 세팅부터 회원가입 기능까지 포스팅해보도록 하겠다. # 구현하고자 하는 것 - 기존 사용한 MongoDB가 아닌 mySQL과 Sequelize를 사용하기 - 회원가입 기능구현 ** 회원가입 단계의 요구사항 1) 이메일, 비밀번호, 확인 비밀번호, 유저 이름 req.body에서 받기 2) 유효성 검사 - 이메일 형식에 맞지 않을 때 에러 메시지 던지기 - 이메일 중복 검사하기 - 비밀번호와 확인 비밀번호가.. 더보기 이전 1 2 다음