개발일지/WIL(Weekly I Learned)

11월 3주차

프린스 알리 2024. 11. 22.

- 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")
}
  1. @id : PRIMARY KEY
  2. @map : 실제 데이터 베이스에서 어떤 이름으로 사용할래?(왼쪽에 쓰는 이름은 node.js에서 사용하는 이름 alias와 비슷)
  3. String? : NULL을 허용
  4. @db.Text : DB에서는 텍스트 자료형을 사용한다.
  5. @updatedAt : Prisma에서 업데이트 날짜를 자동으로 지원해줌
  6. @@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에만 익숙해진다면 과제도 어렵지 않게 해낼 수 있을 것 같다.

'개발일지 > WIL(Weekly I Learned)' 카테고리의 다른 글

12월 1주차  (3) 2024.12.06
11월 4주차  (0) 2024.11.29
11월 2주차  (3) 2024.11.15
11월 1주차  (4) 2024.11.08
10월 5주차  (5) 2024.11.01

댓글