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 파일에 넣고 환경 변수에 접근해서 가져온다.
오마이갓... 토큰이다... 미쳤다...
출처 : 준님