Node.js - 데이터베이스 적용 & API 생성

김동하·2021년 2월 28일
0

node

목록 보기
2/5
post-thumbnail

모델링

users와 content 테이블 데이터베이스 모델링!

  • 내 풀이

  • 정답

어쩜 이렇게 초라할 수가.. 처음이니까 괜찮아!!

  • 놓친 점

일단 테이블 컬럼에 무엇을 넣을지 몰랐다. 그냥 생각나는 것만 했는데 생각해보니까 password도 필요하고 CRUD 정보도 필요하구나! status는 어디에 쓰는 거지? 휴면 뭐 그런 건가.. 아무튼 users 테이블 컬럼에 대해 이해가 부족했다!

그리고 articles에 user_id를 줘서 포린키 물려야 하는데 거꾸로 했다! 아무튼 articles 테이블에도 CRUD 정보가 필요하다!

그리고 comments 테이블을 아예 까묵었다. 이건 아예 생각도 못했다.. comments 테이블을 끼면 users랑 articles는 다대다 관게!

다대다는 두 개의 1:다를 연결하면 자연스레 다대다가 된다.

일단 db 구축 완료.. 뿌잉

API 구축을 위한 프리즈마

Prisma는 오픈소스 프로젝트이다. Typescript 와 Node.js 환경에서 데이터베이스에 대한 접근을 쉽게 하도록 도와주는 소프트웨어다. 기존에 Node 환경에서 사용되던 다른 ORM(Object Relational Mapper)들을 대체한다고 한다.

1.npm inti -ynpm i prisma --save-dev로 설치

  1. schema.prisma 파일 수정
generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["uncheckedScalarInputs"]
}

datasource db {
  provider = "mysql" # 기본설정: postgresql => mysql 변경
  url      = env("DATABASE_URL")
}
  1. env 파일 수정
DATABASE_URL="mysql://사용자이름:비밀번호@localhost:3306/데이터베이스이름"

ex) 데이터베이스 구축하기 페이지에서 생성한 데이터베이스와 유저이름, 비밀번호를 채워주시면 됩니다.
DATABASE_URL="mysql://node_blogs_user:node_is_great@localhost:3306/node_blogs"
  1. DB에 구축된 테이블 Prisma 스키마로 옮기기
npx prisma introspect

위 작업이 성공적으로 완성되면

요래 모델이 생성된다!!

  1. npm install @prisma/clientnpx prisma generate를 싱행한다.

이 명령어는 npx prisma introspect 명령어를 통해서 생성된 schema.prisma 파일을 읽어서 node_modules/@prisma/client 폴더 안에 우리가 사용할 prisma client 코드를 생성 해 줍니다.

하.. 어렵다...

드디어 API

미쳤다. 머리 터질 거 같지만 계속 가자!

API를 구현하지 전에 먼저 어떤 것이 필요한지 생각을 해본다! 손꾸락 먼저 올리지 말자.

  1. 회원가입
  • 서버를 만들기

준비 완료! 서버가 시작될 때 에러 핸들링 해주면 좋다. 비동기는 무조건 try/catch!

  • bcrypt.hash로 비밀번호 암호화!

  • prisma.users.create로 받은 정보를 data에 넣어서 보낸다. data는 테이블 스키마 컬럼값을 키값으로 가진다.

와... 디비에 넣었다. 미쳤다 진짜 재밌다.. 이 재밌는 걸 장규석 혼자만 했냐고 진짜 억울하네.

  1. 로그인

환경 변수 env 파일 접근을 위해서 npm i dotenv

  • 일단 findUnique로 테이블의 유저 정보를 가져올 수 있다!

  • 변수명 중복을 막기 위해 {password: hashedPassword } 새로운 변수명을 부여한다.

  • bcrypt.compare로 유저의 raw 비밀번호와 암호화 비밀번호를 서로 비교한다.

  • token은 sign과 테이블의 id를 이용해서 만든다.

  • token 발행에 필요한 솔트는 env 파일에 넣고 환경 변수에 접근해서 가져온다.

오마이갓... 토큰이다... 미쳤다...

출처 : 준님

profile
프론트엔드 개발

0개의 댓글