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

정답

어쩜 이렇게 초라할 수가.. 처음이니까 괜찮아!!
일단 테이블 컬럼에 무엇을 넣을지 몰랐다. 그냥 생각나는 것만 했는데 생각해보니까 password도 필요하고 CRUD 정보도 필요하구나! status는 어디에 쓰는 거지? 휴면 뭐 그런 건가.. 아무튼 users 테이블 컬럼에 대해 이해가 부족했다!
그리고 articles에 user_id를 줘서 포린키 물려야 하는데 거꾸로 했다! 아무튼 articles 테이블에도 CRUD 정보가 필요하다!
그리고 comments 테이블을 아예 까묵었다. 이건 아예 생각도 못했다.. comments 테이블을 끼면 users랑 articles는 다대다 관게!
다대다는 두 개의 1:다를 연결하면 자연스레 다대다가 된다.

일단 db 구축 완료.. 뿌잉
Prisma는 오픈소스 프로젝트이다. Typescript 와 Node.js 환경에서 데이터베이스에 대한 접근을 쉽게 하도록 도와주는 소프트웨어다. 기존에 Node 환경에서 사용되던 다른 ORM(Object Relational Mapper)들을 대체한다고 한다.
1.npm inti -y 후 npm i prisma --save-dev로 설치
generator client {
provider = "prisma-client-js"
previewFeatures = ["uncheckedScalarInputs"]
}
datasource db {
provider = "mysql" # 기본설정: postgresql => mysql 변경
url = env("DATABASE_URL")
}
DATABASE_URL="mysql://사용자이름:비밀번호@localhost:3306/데이터베이스이름"
ex) 데이터베이스 구축하기 페이지에서 생성한 데이터베이스와 유저이름, 비밀번호를 채워주시면 됩니다.
DATABASE_URL="mysql://node_blogs_user:node_is_great@localhost:3306/node_blogs"
npx prisma introspect
위 작업이 성공적으로 완성되면

요래 모델이 생성된다!!
npm install @prisma/client 후 npx prisma generate를 싱행한다. 이 명령어는 npx prisma introspect 명령어를 통해서 생성된 schema.prisma 파일을 읽어서 node_modules/@prisma/client 폴더 안에 우리가 사용할 prisma client 코드를 생성 해 줍니다.

하.. 어렵다...
미쳤다. 머리 터질 거 같지만 계속 가자!
API를 구현하지 전에 먼저 어떤 것이 필요한지 생각을 해본다! 손꾸락 먼저 올리지 말자.

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

bcrypt.hash로 비밀번호 암호화!
prisma.users.create로 받은 정보를 data에 넣어서 보낸다. data는 테이블 스키마 컬럼값을 키값으로 가진다.

와... 디비에 넣었다. 미쳤다 진짜 재밌다.. 이 재밌는 걸 장규석 혼자만 했냐고 진짜 억울하네.
환경 변수 env 파일 접근을 위해서 npm i dotenv

일단 findUnique로 테이블의 유저 정보를 가져올 수 있다!
변수명 중복을 막기 위해 {password: hashedPassword } 새로운 변수명을 부여한다.
bcrypt.compare로 유저의 raw 비밀번호와 암호화 비밀번호를 서로 비교한다.
token은 sign과 테이블의 id를 이용해서 만든다.
token 발행에 필요한 솔트는 env 파일에 넣고 환경 변수에 접근해서 가져온다.

오마이갓... 토큰이다... 미쳤다...
출처 : 준님