본문 바로가기
Node.js 공부

과제 대비 01 - 작업 순서 생각해보기01

by 나노다 2024. 11. 26.

ERD

1. 필요한 테이블과 컬럼들

2. 컬럼별 속성

3. 테이블 간 관계 및 요구사항

 

프로젝트 초기화

1. 라이브러리들 설치 및 초기화하고

# 프로젝트를 초기화
yarn init -y
# 필요한 라이브러리들 설치
yarn add express prisma @prisma/client cookie-parser jsonwebtoken bcrypt
yarn add -D nodemon
# 설치한 Prisma를 초기화
npx prisma init

 

2. package.json에 "type":"module" 추가!!

 

Prisma 설계

1. schema.prisma 파일에 url 수정

datasource db {
  provider = "mysql" // 여기 mysql로 수정!!
  url      = env("DATABASE_URL")
}

 

2. .env 파일에서 DATABASE_URL 수정

DATABASE_URL = "사용할데이터베이스://아이디:비밀번호@엔드포인트:사용할포트/사용할db

 

3. model들 작성

  3-1. 관계 설정 않고 우선 작성

  3-2. 관계와 요구사항 적용해 수정

 

4. MySQL에 프리즈마 모델들 적용

npx prisma db push

 

API 명세서 작성

구현할 API 구상 및 세부 내용 정리해 작성

app.js 초기화

1. express 생성 및 포트 번호 지정

2. 바디 파서와 쿠키 파서

// src/app.js
import express from 'express';
import cookieParser from 'cookie-parser';

const app = express();
const PORT = 3018;

app.use(express.json());
app.use(cookieParser());

app.listen(PORT, () => {
  console.log(PORT, '포트로 서버가 열렸어요!');
});

 

prisma 초기화

코드에서 사용할 수 있도록 prisma란 변수 만들어주는 작업

// src/utils/prisma/index.js
import { PrismaClient } from '@prisma/client';

export const prisma = new PrismaClient({
  log: ['query', 'info', 'warn', 'error'],
  errorFormat: 'pretty',
});

 

회원가입 API 구현 및 bcrypt 암호화

1. 회원가입 API 비즈니스 로직

  1. email, password, name, age, gender, profileImage를 body로 전달받습니다.
  2. 동일한 email을 가진 사용자가 있는지 확인합니다.
  3. Users 테이블에 email, password를 이용해 사용자를 생성합니다.
  4. UserInfos 테이블에 name, age, gender, profileImage를 이용해 사용자 정보를 생성합니다. 

2. bycrypt 가져오기

import bcrypt from 'bcrypt';

 

3. bycrypt.hash() 메서드로 암호화하기

// 사용자 비밀번호를 암호화합니다.
const hashedPassword = await bcrypt.hash(password, 10);

 

4. users 테이블에 저장할 때, password 컬럼에 암호화한 비밀번호 넣기

const user = await prisma.users.create({
    data: {
      email,
      password: hashedPassword, // 암호화된 비밀번호를 저장합니다.
    },
  });

 

로그인 API 구현

로그인 API 비즈니스 로직

  1. email, password를 body로 전달받습니다.
  2. 전달 받은 email에 해당하는 사용자가 있는지 확인합니다.
  3. 전달 받은 password와 데이터베이스의 저장된 password를 bcrypt를 이용해 검증합니다.
  4. 로그인에 성공한다면, 사용자에게 JWT를 발급합니다. 

 

사용자 인증 미들웨어 구현

사용자 인증 미들웨어 비즈니스 로직

  1. 클라이언트로 부터 쿠키(Cookie)를 전달받습니다.
  2. 쿠키(Cookie)가 Bearer 토큰 형식인지 확인합니다.
  3. 서버에서 발급한 JWT가 맞는지 검증합니다.
  4. JWT의 userId를 이용해 사용자를 조회합니다.
  5. req.user 에 조회된 사용자 정보를 할당합니다.
  6. 다음 미들웨어를 실행합니다.

 

사용자 정보 조회 API 구현

사용자 정보 조회 API 비즈니스 로직

  1. 클라이언트가 로그인된 사용자인지 검증합니다.
  2. 사용자를 조회할 때, 1:1 관계를 맺고 있는 Users와 UserInfos 테이블을 조회합니다.
  3. 조회한 사용자의 상세한 정보를 클라이언트에게 반환합니다.