본문 바로가기

공부/타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js)

프로젝트: Node.js 기반의 REST API 구현(4)-정리하기

회원 API

1. 회원가입

Method POST
URI /users/join
HTTP status code 성공 201
Request Body {
    "email" : "사용자가 입력한 이메일",
    "password" : "사용자가 입력한 비밀번호",
    "passwordCheck" : "사용자가 더블 확인 한 비밀번호"
}
Response Body  

 

2. 로그인

Method POST
URI /users/login
HTTP status code 성공 200
Request Body {
    "email" : "사용자가 입력한 이메일",
    "password" : "사용자가 입력한 비밀번호"
}
Response Body JWT Token

 

3. 비밀번호 초기화 요청

Method POST
URI /users/reset
HTTP status code 성공 200
Request Body {
    "email" : "사용자가 입력한 이메일"
}
Response Body  

 

4. 비밀번호 초기화(=수정)

Method PUT
URI /users/reset
HTTP status code 성공 201
Request Body {
    "password" : "사용자가 입력한 비밀번호",
    "passwordCheck" : "사용자가 더블 확인 한 비밀번호"
}
Response Body  

도서API

1. 전체 도서 조회

    // 이미지 경로, 조회시 아이템 8개씩 보여주기

    // 카테고리 id 어떻게 알고 보내줄까?

Method GET
URI /books
HTTP status code 성공 200
Request Body  
Response Body [
    {
        "book_id" : "도서 id",
        "title" : "도서명",
        "category" : "도서 카테고리",
        "summary" : "요약 설명",
        "author" : "작가명",
        "price" : 가격,
        "likes" : 좋아요 수,
        "pubDate" : "출간일"
    },
    {
        "book_id" : "도서 id",
        "title" : "도서명",
        "category" : "도서 카테고리",
        "summary" : "요약 설명",
        "author" : "작가명",
        "price" : 가격,
        "likes" : 좋아요 수,
        "pubDate" : "출간일"
    },
    ...
]

2. 개별 도서 조회

    // 이미지 경로

Method GET
URI /books/:{bookId}
HTTP status code 성공 200
Request Body  
Response Body {
    "book_id" : "도서 id",
    "title" : "도서명",
    "category" : "도서 카테고리",
    "format" : "포맷",
    "isbn" : "isbn",
    "summary" : "요약 설명",
    "description" : "상세 설명",
    "author" : "작가명",
    "pages" : 쪽 수,
    "index" : "목차",
    "price" : 가격,
    "likes" : 좋아요 수,
    "liked" : boolean,
    "pubDate" : "출간일"
}

3. 카테고리별 도서 목록 조회

    -new: true=> 신간조회(기준: 출간일 30일 이내)
=>출간일을 설정하면 sql에서 30이내인 것을 계산해 줄 수 있다.

    // 이미지 경로, 조회시 아이템 8개씩 보여주기

    // 카테고리 id 어떻게 알고 보내줄까?

=>id는 숫자로 사용하고 카테고리 테이블을 생성해서 각 숫자별로 장르를 설정해놓는다.

Method GET
URI /books?category={categoryId}&new={boolean}
HTTP status code 성공 200
Request Body  
Response Body [
    {
        "book_id" : "도서 id",
        "title" : "도서명",
        "category" : "도서 카테고리",
        "summary" : "요약 설명",
        "author" : "작가명",
        "price" : 가격,
        "likes" : 좋아요 수 ,
        "pubDate" : "출간일"
    },
    {
        "book_id" : "도서 id",
        "title" : "도서명",
        "category" : "도서 카테고리",
        "summary" : "요약 설명",
        "author" : "작가명",
        "price" : 가격,
        "likes" : 좋아요 수 ,
        "pubDate" : "출간일"
    },
    ...
]

좋아요 API를 위한 ERD

좋아요 API

1. 좋아요 추가

Method POST
URI /likes/:{bookId}
HTTP status code 성공 200
Request Body  
Response Body  

2. 좋아요 취소

Method DELETE
URI /likes/:{bookId}
HTTP status code 성공 200
Request Body  
Response Body  

장바구니 API를 위한 ERD

장바구니 API

1. 장바구니 담기

Method POST
URI /cart
HTTP status code 성공 201
Request Body {
    "book_id" : "도서 id",
    "count" : 수량
}
Response Body  

2. 장바구니 조회

Method GET
URI /cart
HTTP status code 성공 200
Request Body  
Response Body [
    {
        "cartItem_id" : 장바구니 도서 id,
        "book_id" : 도서 id,
        "title" : "도서명",
        "category" : "도서 카테고리",
        "summary" : "요약 설명",
        "count" : 수량
        "price" : 가격,
    },
    {
        "cartItem_id" : 장바구니 도서 id,
        "book_id" : 도서 id,
        "title" : "도서명",
        "category" : "도서 카테고리",
        "summary" : "요약 설명",
        "count" : 수량
        "price" : 가격,
    },
    ...
]

3. 장바구니 도서 삭제

Method DELETE
URI /cart/:{bookId}
HTTP status code 성공 200
Request Body  
Response Body  

4. 장바구니에서 선택한 주문 '예상' 상품 목록 조회

Method GET
URI /cart/:{bookId}
HTTP status code 성공 200
Request Body ["cartItem_id", "cartItem_id", ...]
Response Body [
    {
        "cartItem_id" : 장바구니 도서 id,
        "book_id" : "도서 id",
        "title" : "도서명",
        "category" : "도서 카테고리",
        "summary" : "요약 설명",
        "count" : 수량
        "price" : 가격,
    },
    {
        "cartItem_id" : 장바구니 도서 id,
        "book_id" : "도서 id",
        "title" : "도서명",
        "category" : "도서 카테고리",
        "summary" : "요약 설명",
        "count" : 수량
        "price" : 가격,
    },
    ...
]

결제(주문) API를 위한 ERD

결제(주문) API

1. 결제하기

= 주문하기 = 주문등록 = 데이터베이스 주문 insert = 장바구니에서 주문된 상품은 delete

Method POST
URI /orders
HTTP status code 성공 200
Request Body {
    "items" : [
        {
            "cartItem_id" : 장바구니 도서 id,
            "book_id" : 도서 id,
            "bookTitle" : "대표 책 제목",
            "count" : 수량
        },
        {
            "cartItem_id" : 장바구니 도서 id,
            "book_id" : 도서 id,
            "bookTitle" : "대표 책 제목",
            "count" : 수량

        },
        ...
    ],
    "delivery" : {
        "address" : "주소",
        "receiver" : "받는 사람",
        "contact" : "010-0000-0000"
    },
    "totalPrice" : 총 금액,
    "totalCount" : "총 수량"

}
Response Body  

2. 결제목록(내역) 조회

Method GET
URI /orders
HTTP status code 성공 200
Request Body  
Response Body [
    {
        "orders_id" : 주문 id,
        "create_at" : "주문일자",
        "delivery" : {
            "address" : "주소",
            "veceiver" : "받는 사람",
            "contact" : "전화번호"
    },
    "bookTitle" : "대표 책 제목",
    "totalPrice" : "총 금액",
    "totalCount" : "총 수량"
]

3. 주문 상세 상품 조회

Method GET
URI /orders/:{orderId}
HTTP status code 성공 200
Request Body  
Response Body [
    {
        "book_id" : 도서 id,
        "bookTitle" : "대표 책 제목",
        "author" : "작가명",
        "price" : 가격,
        "count" : 수량
    },
    {
        "book_id" : 도서 id,
        "bookTitle" : "대표 책 제목",
        "author" : "작가명",
        "price" : 가격,
        "count" : 수량
    },
    ...
]


❄️Express-generator 프로젝트 구조

bin/www

🔸포트 번호 등과 같은 웹 서버를 구축하는데에 필요한 설정데이터가 정의되어 있는 파일

=> .env 파일과 같아 설정 값을 가지고 에러처리, 기타 추가 설정을 해주는 파일

node_modules

🔸Node.js, Express에 필요한 모듈들이 설치되는 폴더

public

🔸images, javascripts, stylesheets ➡️ 정적(ex. 로고, 회사 소개 페이지...)파일

cf. 동적: 사람마다 다른 데이터

routes

🔸각 경로를 담당하는 모듈들이 들어있는 폴더 (= 라우팅 로직을 구현하는 모듈들)

🔸클라이언트에서 어떤 요청을 주냐에 따라서 어떤 로직을 수행할 지 파일별로 분할해서 관리하는 정도

cf. 자바의 controller 역할

views

🔸클라이언트에게 html코드로 화면을 보내는 파일

app.js

🔸Express 서버의 시작점 => URL에 따라서 라우팅을 해준다.

package.json

🔸이 프로젝트에 설치된 모듈이름, 버전 등의 정보들이 작성되어 있는 파일