- FACTS: 이번 일주일 동안 있었던 일, 내가 한 일
(1) Node.js 숙련 주차
// schema.prisma
model Products {
productId Int @id @default(autoincrement()) @map("productId")
productName String @unique @map("productName")
price Int @default(1000) @map("price")
info String? @map("info") @db.Text
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime @updatedAt @map("updatedAt")
@@map("Products")
}
- @id : PRIMARY KEY
- @map : 실제 데이터 베이스에서 어떤 이름으로 사용할래?(왼쪽에 쓰는 이름은 node.js에서 사용하는 이름 alias와 비슷)
- String? : NULL을 허용
- @db.Text : DB에서는 텍스트 자료형을 사용한다.
- @updatedAt : Prisma에서 업데이트 날짜를 자동으로 지원해줌
- @@map("Products") : 대문자를 소문자로 바꾸지 않으려면 이걸 써야한다.
Prisma CLI reference | Prisma Documentation
- FEELINGS(느낌, 주관) : 나의 감정적인 반응, 느낌
숙련 주차를 들어서 데이터베이스를 통해 API를 구현하는 방법을 배웠다. 백엔드를 본격적으로 공부하게 되었더니, 확실히 생소한 개념들이 많아서 압박감이 느껴졌다. 29일까지 예정된 과제를 과연 할 수 있을까? 그래도 다행스러운 건 사전 캠프 기간 동안 MySQL을 열심히 공부해두었기 때문에 DB를 작성하는 일이 그리 어렵진 않았다는 점이다. 덕분에 숙련 주차 강의는 주말 내에 모두 완강할 수 있을 것 같다.
- FINDINGS(배운 것) : 그 상황으로부터 내가 배운 것, 얻은 것
프리즈마 초기 설정하기
// .env
DATABASE_URL="<aws에서 대여한 RDS의 엔드포인트 복붙하기>/my_board"
// schema.prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
// 모델(테이블) 생성하기
model Posts{
postId Int @id @default(autoincrement()) @map("postId")
title String @map("title")
content String @map("content") @db.Text
password String @map("password")
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime @updatedAt @map("updatedAt")
@@map("Posts")
}
// schema.prisma
model Users {
userId Int @id @default(autoincrement()) @map("userId")
email String @unique @map("email")
password String @map("password")
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime @updatedAt @map("updatedAt")
userInfos UserInfos? // 사용자(Users) 테이블과 사용자 정보(UserInfos) 테이블이 1:1 관계를 맺습니다.
@@map("Users")
}
model UserInfos {
userInfoId Int @id @default(autoincrement()) @map("userInfoId")
userId Int @unique @map("userId") // 사용자(Users) 테이블을 참조하는 외래키
name String @map("name")
age Int? @map("age")
gender String @map("gender")
profileImage String? @map("profileImage")
createdAt DateTime @default(now()) @map("createdAt")
updatedAt DateTime @updatedAt @map("updatedAt")
// Users 테이블과 관계를 설정합니다.
user Users @relation(fields: [userId], references: [userId], onDelete: Cascade)
@@map("UserInfos")
}
userInfos UserInfos?
해석 : userInfos라는 필드를 새로 생성된다. UserInfos 모델을 참조하는데 그 값이 있을 수도 있고 없을 수도 있다.
user Users @relation(fields: [userId], references: [userId], onDelete: Cascade)
해석 : user라는 필드를 새로 생성한다. Users라는 모델을 참조한다. @relation
은 관계에 필요한 필드와 참조 필드를 정의한다. fields에서는 현재 모델(사용자 정보(UserInfos)) 모델에서 사용할 외래키(Forien Key) 컬럼을 지정한다. references의 키([])에선 외부 모델(Users)의 컬럼을 지정하고, 참조하던 컬럼이 삭제될 경우(onDelete) 이 모델의 컬럼도 함께 삭제되도록(Cascade) 설정되어 있다.
db 연결 명령어
npx prisma db push
- FUTURE(미래) : 배운 것을 미래에는 어떻게 적용할 지
Prisma와 SQL의 문법이 크게 다르진 않아서 이중 SELECT문과 여러 Method에만 익숙해진다면 과제도 어렵지 않게 해낼 수 있을 것 같다.
댓글