주문 DB ERD delivery 테이블 생성 orders 테이블 생성 orderedBook 테이블 생성 주문하기 API 구현 orders 테이블의 delivery_id 컬럼이 delivery 테이블을 참고하고 있고, orderedBook 테이블의 order_id 컬럼이 orders 테이블을 참조하고 있으므로 데이터 삽입 순서는 아래와 같다. delivery 테이블 orders 테이블 orderedBook 테이블 설계 수정 Method POST URI /orders HTTP Status Code 성공(201) Request Body { items: [ { cartId: 장바구니 도서 id, bookId: 도서 id, quantity: 수량 }, … ], delivery: { address: “주소”, r..
DB 외래키 제약 조건 books 테이블의 category_id는 category 테이블의 기본키인 id를 참조한다. DB에 외래키 제약 조건을 추가해 보자. 제약 조건의 이름은 category_id로 설정했다. SQL 카테고리 조인 도서 목록을 응답으로 보내줄 때 카테고리 아이디가 아니라 카테고리 이름이 들어가야 한다. 따라서 books 테이블과 category 테이블을 카테고리 아이디를 기준으로 조인해줘야 한다. SELECT * FROM books LEFT JOIN category ON books.category_id = category.id; 신간 목록 조회 DATE_SUB(기준 날짜, INTERVAL) 함수를 이용하여 특정 시간에서 지정된 값만큼 뺄 수 있다. 참고로 더하는 함수는 DATE_ADD..
crypto 누군가의 공격으로 데이터베이스가 유출될 경우 사용자가 큰 피해를 입을 수 있기 때문에 비밀번호는 암호화해서 저장해야 한다. node.js에는 암호화를 할 수 있는 내장 모듈인 'crypto'가 있다. const crypto = require('crypto'); const password = "1111"; const salt = crypto.randomBytes(64).toString('base64'); const hashPassword = crypto.pbkdf2Sync(password, salt, 10000, 64, 'sha512').toString('base64'); console.log(hashPassword); pbkdf2Sync(원문, 솔트, 해시 함수반복 횟수, 출력 바이트 수, ..
http-status-codes 모듈 상태 코드를 코드에 숫자로 적어두면 상태 코드를 모르는 사람들은 그 숫자가 무슨 의미인지 파악하기 힘들다. 상태 코드를 모르는 사람들도 알아볼 수 있도록 모듈을 사용해 보자. npm i http-status-codes const { StatusCodes } = require('http-status-codes'); const join = (req, res) => { // ... res.status(StatusCodes.CREATED).json(results); }; 상태 코드 http-status-codes 200 OK 201 CREATED 401 UNAUTHORIZED 403 FORBIDDEN 404 NOT_FOUND 컨트롤러 컨트롤러는 HTTP 요청을 처리하는 파일..
ERD 수정 books 테이블에 category 컬럼을 category_id로 수정하고 category 테이블을 추가했다. 카테고리별 도서 조회에서 카테고리를 쿼리로 받게 된다. 카테고리의 종류는 너무 많기 때문에 모두 문자열로 받게 되면 구현이 어려워질 수 있고 정규화 측면에서도 좋지 않다. 따라서 카테고리 테이블을 별도로 생성한다. 프로젝트 구조 파일/폴더 설명 bin/www 포트 번화 등과 같은 웹 서버를 구축하는데에 필요한 설정 데이터가 정의되어 있는 파일이다. 설정 값을 가지고 에러 처리, 기타 추가 설정을 해준다. node_module Node.js, Express에 필요한 모듈들이 설치되는 폴더이다. public 정적 파일(images, ljavascripts, stylesheets)을 모아..
전체 ERD 회원 ERD 및 API ERD API 회원가입 Method POST URI /join HTTP Status Code 성공(201) Request Body { email: “사용자가 입력한 이메일” password: “사용자가 입력한 비밀번호” } Response Body 로그인 Method POST URI /login HTTP Status Code 성공(200) Request Body { email: “사용자가 입력한 이메일” password: “사용자가 입력한 비밀번호” } Response Body JWT token 비밀번호 초기화 요청 Method POST URI /reset HTTP Status Code 성공(200) Request Body { email: “사용자가 입력한 이메일” }..
회원 API 회원 가입 이메일과 비밀번호를 입력받아 회원가입한다. Method POST URI /join HTTP Status Code 성공 (201) Request Body { email: “사용자가 입력한 이메일” password: “사용자가 입력한 비밀번호” } Response Body 로그인 이메일과 비밀번호로 로그인하고, 로그인에 성공하면 토큰을 발행해 준다. Method POST URI /login HTTP Status Code 성공(200) Request Body { email: “사용자가 입력한 이메일” password: “사용자가 입력한 비밀번호” } Response Body JWT token 비밀번호 초기화 요청 비밀번호를 초기화하는 버튼을 클릭했을 때 발생하는 요청이다. Method ..