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 비즈니스 로직
- email, password, name, age, gender, profileImage를 body로 전달받습니다.
- 동일한 email을 가진 사용자가 있는지 확인합니다.
- Users 테이블에 email, password를 이용해 사용자를 생성합니다.
- 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 비즈니스 로직
- email, password를 body로 전달받습니다.
- 전달 받은 email에 해당하는 사용자가 있는지 확인합니다.
- 전달 받은 password와 데이터베이스의 저장된 password를 bcrypt를 이용해 검증합니다.
- 로그인에 성공한다면, 사용자에게 JWT를 발급합니다.
사용자 인증 미들웨어 구현
사용자 인증 미들웨어 비즈니스 로직
- 클라이언트로 부터 쿠키(Cookie)를 전달받습니다.
- 쿠키(Cookie)가 Bearer 토큰 형식인지 확인합니다.
- 서버에서 발급한 JWT가 맞는지 검증합니다.
- JWT의 userId를 이용해 사용자를 조회합니다.
- req.user 에 조회된 사용자 정보를 할당합니다.
- 다음 미들웨어를 실행합니다.
사용자 정보 조회 API 구현
사용자 정보 조회 API 비즈니스 로직
- 클라이언트가 로그인된 사용자인지 검증합니다.
- 사용자를 조회할 때, 1:1 관계를 맺고 있는 Users와 UserInfos 테이블을 조회합니다.
- 조회한 사용자의 상세한 정보를 클라이언트에게 반환합니다.