개발/PrismaORM 9

Prisma에서 페이지네이션 구현

부캠 팀 프로젝트때부터 페이지네이션을 적용하느라 골머리를 앓는 사람들을 많이 봐왔어서 나는 지레 겁먹고 시도조차 안했었는데 이번 프로젝트때 페이지네이션 기획이 나와버렸다ㅋ 갑자기 마주친 페이징... 부캠때는 못하겠으면 배째라고 해도되는데 (안됨) 지금은 회사니까 그럴 수가 없었다.......... 슬픔 눈물을 닦으며 페이지네이션을 검색해봤는데 생각보다 진짜 엄청 허무했다 findList() { return this.prisma.post.findMany({ orderBy: { created: 'desc' }, }); } 자 이게 기본적으로 post 테이블의 데이터를 최신순으로 정렬하여 불러오는 로직이라고 쳐보자 post 테이블의 데이터가 10개 이하일때는 모두 한꺼번에 불러와도 괜찮겠지만 데이터가 100개..

개발/PrismaORM 2023.12.26

언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (4)

1. in - where에 조건을 배열로 걸기 (배열의 항목 중 하나라도 일치하는 모든 데이터 가져오기) const users = await prisma.user.findMany({ where: { id: { in: [1, 2, 3], }, }, }); where에 걸고싶은 조건이 여러개일때 배열로 묶어서 In으로 전달한다. userId: 1, userId: 2, userId: 3 이렇게 세명의 user를 찾고싶을때 findFrist를 세번 사용해 한명씩 불러오기는 매우 비효율적이다. findMany로 모든 유저를 다 불러온 다음 그 중에서 원하는 userId만 선택하기엔 데이터가 얼마 없을땐 괜찮을지 몰라도 데이터가 다량으로 쌓였을땐 속도저하의 원인이 될 수 있다. 이런 상황에서 findMany에 in..

개발/PrismaORM 2023.08.08

언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (3)

1. some - 배열 중 하나라도 일치하는 데이터를 찾을 때 (일대다 관계에서 사용) const product = prisma.product.findFirst({ where: { photos: { some: { { url: "2.jpg" }, } } }, }) some을 사용하면 배열 중 한개의 데이터라도 일치하는 항목을 불러온다. 일대일 관계에서는 데이터가 배열일 수 없으니 some을 사용하지 않고 다대다 관계에서는 따로 테이블을 생성해 관리해 some을 사용하지 않으므로 일대다 관계에서 사용된다. Product 테이블 id name 1 상품 A 2 상품 B 3 상품 C Photos 테이블 id url product_id 1 1.jpg 1 2 2.jpg 1 3 3.jpg 2 4 2.jpg 3 db가 ..

개발/PrismaORM 2023.08.02

언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (2)

이번 글에서는 제목에 맞지 않지만 자주 사용하는 옵션들도 다뤄볼 계획이다. 1. upsert - 데이터가 존재한다면 update, 존재하지 않는다면 create const result = await prisma.user.upsert({ where: { email: 'example@email.com', // 기존 데이터를 찾을 조건 }, update: { username: 'newUsername', // 기존 데이터의 필드를 업데이트할 값 }, create: { email: 'example@email.com', // 새로운 데이터를 추가할 값 username: 'newUsername', }, }); where의 조건으로 데이터를 찾고, 일치하는 데이터가 존재한다면 update를 실행, 존재하지 않는다면 c..

개발/PrismaORM 2023.08.01

언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (1)

1. distinct - 중복 제거 const uniquePostTitles = await prisma.post.findMany({ distinct: ['title'], }); distinct에 중복 제거를 적용하고싶은 컬럼명을 작성하면 된다. [ { Id: 1, title: 'abc', }, { Id: 2, title: 'efg', }, { Id: 3, title: 'abc', }, { Id: 4, title: 'efg', }, ] 위와 같은 데이터에 사용할 경우 [ { Id: 1, title: 'abc', }, { Id: 2, title: 'efg', } ] 이처럼 중복된 필드값을 가지고 있는 데이터들은 그 중 더 낮은 id값을 가지고 있는 데이터 한개만 표시된다. 2. cursor - 리스트를 특정..

개발/PrismaORM 2023.07.31

Prisma Transaction이란?, $transaction 사용 방법

트랜잭션이 대체 뭘까!!!! 그게 뭐냐면~ 데이터베이스에 대한 작업이 여러개 일 때 그 작업들을 하나로 묶어줌 (like... 파워포인트에서 그룹화 같은 역할...) 여러개의 작업이 한개의 로직을 구성하고 있을때 사용할 수 있음~! 묶여진 모든 작업들이 성공적으로 실행을 마쳐야만 데이터베이스에 저장됨 한 작업이라도 실패를 하거나 중간에 오류가 발생하면 묶여진 데이터 내에서 이전에 했던 작업들을 다시 원상복구~ 예를들면 transaction(계란후라이 만들기) { 1. 가스레인지 불 켜고, db에 불켜기 true로 체크하기 2. 프라이팬에 기름 두르고, db에 기름 두르기 true로 체크하기 3. 냉장고에서 계란 꺼내고, 남은 계란 갯수 db에 update하기 4. 프라이팬에 계란 올리고, 완성까지 걸린 ..

개발/PrismaORM 2023.06.01

Prisma 에서 @map(), @@map() 데코레이터의 역할

@map은 DB에서 사용되는 이름과 Prisma모델에서 사용되는 필드 이름을 다르게 설정할때 사용한다. DB상의 컬럼명을 변경! @@map은 DB상의 테이블명을 변경! @map 사용 시 Prisma 모델과 DB 스키마 간의 이름 규칙차이를 극복할 수 있다. ex) Prisma 모델에서는 'firstName'이고 DB스키마에서는 'first_name' 일 때 model User { id Int @id @default(autoincrement()) firstName String @map(name: "first_name") lastName String @map(name: "last_name") } -->Prisma는 'firstName'의 이름을 'first_name'으로 인식함

개발/PrismaORM 2023.04.04