백엔드 실습(1)

wltjd1688·2025년 3월 4일

풀사이클

목록 보기
27/74

프로젝트 진행 전에 준비해야하는 내용들에 대해 정리해보자.

백엔드 구현 준비

기술 스택

  • 프론트: React
  • 백엔드: Express, crypto, jsonwebtoken, dotenv, sequelize

사용되는 라이브러리에 대해서

  • crypto
    Node.js에 내장되어 있는 모듈 중 하나로, 문자열을 암호화, 복호화, 해싱할 수 있도록 도와주는 모듈이다.

  • sequelize
    Oracle, Postgres, MySQL, MariaDB, SQLite 및 SQL Server등을 위한 Node.js의 ORM이다.

    • ORM이란?
      Object Relation Mapping의 약어로 데이터베이스의 테이블 구조를 객체로 표현하여 SQL쿼리문을 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있게 해주는 것이다.
    • 그럼 SQL쿼리 사용 안하게 해주는거 뿐인가요?
      SQL쿼리를 작성할때, 테이블에 들어가는 제약조건과 데이터 타입, 컬럼등을 객체로 정의하여 보다 쉽고 직관적으로 작성할 수 있게해준다.
    • 모델 클래스랑 무슨 연관인가요?
      모델 클래스는 말 그대로 데이터베이스 테이블(모델)과 연관된 클래스로, 데이터의 구조오 ㅏ관련된 로직을 정의하는데, 이때 Sequlize를 사용하면 모델 클래스 정의가 쉬워진다.
  • jsonwebtoken
    JWT를 사용하기 쉽게 만들어주는 라이브러리이다.

    • Access Token
      사용자가 인증되었다는 증거로, 보통 헤더에 들어가는 친구다. 특징으로는 유효기간이 짧아서 만료되면 재발급 받아야 한다.
    • Refresh Token
      Access Token이 만료되었을 때, 사용자가 다시 로그인하지 않고 새로운 Access Token을 발급받을 수 있도록 해당 토큰을 보내 Access Token을 요청한다. 그래서 상대적으로 유효 기간이 길어 보안상의 이유로 서버에 저장된다.

프로젝트 주제

도서관 웹사이트 제작

변수 명명법

  • JS

    • 변수 및 함수: camelCase
    • 클래스 및 생성자 함수: PascalCase
    • .env파일 및 상수: UPPER_SNAKE_CASE
  • MariaDB(SQL)

    • 테이블명 및 컬럼: snake_case
  • API 엔드포인트
    REST API URL규칙에 따라 작성하기

    • 대문자 사용 금지
    • 언더바(_) 대신 하이픈(-) 사용
    • 마지막에 슬래시(/)사용 금지
    • HTTP 메서드로 이미 Body에 들어가 있기에 행위를 포함하지 않음
    • 파일 확장자 포함 금지
    • 복수형을 쓴다

와이어프레임의 주요기능을 참고하여 API 작성

와이어프레임이 있기에 간단정리만

메인

  • 메인 => GET "/products" 로그인 여부 상관없음
    • req: X
    • res: 아이템 목록(id, 대표이미지, 제목, 작가, 요약정보, 가격, 좋아요수, 출간일)
      => GET "/products?categoryId=(categoryId)&new=(boolean)" 로그인 여부 상관없음
    • req: X
    • res: 아이템 목록(id, 대표이미지, 제목, 작가, 요약정보, 가격, 좋아요수, 출간일)

상세

  • 상세 불러오기 => GET "/products/:id" 로그인 여부 상관없음
    • req: X
    • res
      • 성공(200)
        • 아이템 정보(id, 제목, 카테고리, 포맷, 작가명, ISBN, 요약설명, 상세설명, 목차, 가격, 출간일)
        • 아이템 리뷰(작성자, 날짜, 내용)
        • 좋아요 클릭 => PUT "/likes/:id" 로그인 여부 필요함
          • req:JWT토큰
          • res
            • 유저의 좋아요 리스트에 없을때: 추가
            • 유저의 좋아요 리스트에 있을떄: 삭제
        • 카테고리 베스트 셀러
  • 상세 -> 장바구니 => POST "/carts" 로그인 필요함
    • req: 헤더에 JWT토큰, 아이템 id 및 수량
    • res
      • 로그인X: 로그인페이지로 이동시키기
      • 로그인O: "${id}가 추가되었습니다."

장바구니

  • 장바구니에서 불러오기 => GET "/carts" 로그인 필요
    • req: JWT 토큰
    • res: 유저 카트에 담긴 아이템 목록들(대표이미지, 제목, 금액, 수량)
  • 장바구니에서 제거 => DELETE "/carts/:id" 로그인 필요
    • req: JWT 토큰
    • res: "성공적으로 제거하였습니다."
  • 장바구니에 담긴거 주문하기 => POST "/orders/:carts_id" 로그인 필요
    • req: JWT 토큰, 장바구니 아이디를 넘겨줌
    • res
      • 성공: "/orders"페이지로 이동
      • 실패: "${item_name}를 주문할 수 없습니다" or "주문에 실패하였습니다."

주문서 작성

  • 주문서 작성창 불러오기 => GET "/orders" 로그인 필요
    • req: JWT토큰
    • res:
      • 장바구니에서 넘어온 아이템 목록(제목, 요약정보, 가격)
      • 주문자 정보(주소, 수령인, 전화번호)
      • 결제정보
  • 주문서 확정 => PUT "/orders" 로그인 필요
    • req: JWT토큰
    • res: "주문을 수정했습니다" or "주문을 확정했습니다."

주문목록

  • 주문목록: GET "/orders" 로그인 필요
    • req: JWT토큰
    • res
      • 주문 일자
      • 주문 아이템 리스트(제목, 요약정보, 가격)
      • 배송정보(주소, 수령인, 전화번호)
      • 결제정보
      • 배송추적

회원

  • 로그인 => POST "/auth/login" 로그인 했다면 메인
    • req: email, pw
    • res
      • 성공(200): JWT토큰 발급 => 메인페이지로 보내주기
  • 회원가입 => POST "/auth/join" 로그인 했다면 메인
    • req: email, pw
    • res
      • 성공(201): 로그인 페이지로 보내줌
  • 비밀번호 초기화 이메일 링크 => POST "/auth/reset" 로그인 했다면 메인
    • req: email
    • res:
      • 성공(200): 링크를 보내주거나 비밀번호 초기화칸 띄우기
  • 비밀번호 초기화 => PUT "/auth/reset" 로그인 했다면 메인
    • req: pw
    • res
      • 성공(200): "비밀번호를 재설정 하였습니다" => 로그인 페이지

목록

  • 전체 책 조회 => GET "/product" 로그인 불필요
    • req: X
    • res
      • 성공(200): 아이템 목록(id, 대표이미지, 제목, 작가, 요약정보, 가격, 좋아요수, 출간일)

패키지 구조 정돈

router: API로 작성한 엔드포인트의 라우트를 관리하는 파일들이 들어감
controller: 클라이언트 요청에 대한 각각의 Service를 호출하는 파일들이 들어감
Service: 비즈니스 로직을 담고 있는 파일들이 들어감
model: 데이터베이스에 대한게 들어감

🗂️/source	
 ⎪  📂 /router
 ⎪  ├── 📄 auth.js
 ⎪  ├── 📄 carts.js
 ⎪  ├── 📄 orders.js
 ⎪  ├── 📄 products.js
 ⎪  └── 📄 main.js
 ⎪  📂 /controller
 ⎪  ├── 📄 authContorller.js
 ⎪  ├── 📄 cartsContorller.js
 ⎪  ├── 📄 ordersContorller.js
 ⎪  ├── 📄 productsContorller.js
 ⎪  └── 📄 mainContorller.js
 ⎪  📂 /service
 ⎪  ├── 📄 authService.js
 ⎪  ├── 📄 cartsService.js
 ⎪  ├── 📄 ordersService.js
 ⎪  ├── 📄 productsService.js
 ⎪  └── 📄 mainService.js
 ⎪  📂 /model
 ⎪  ├── 📄 index.js
 ⎪  └── 📄 mariadb.js
 ├──📄 app.js
 └──⚙️ .env
profile
일단 해!!!!

0개의 댓글