| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- ppt 다이어그램
- 위드굿즈 굿즈샵
- 원씽
- 카카오뷰 수익
- 카카오뷰 초보
- 웹기초
- 카카오뷰 탭이동
- 카카오뷰 온라인 수익화
- git 협업하기
- HTML
- ppt 도형 색
- 위드굿즈
- 실시간 통신
- 카카오뷰N잡
- 엑셀 기초 함수
- 30일 글쓰기
- 카카오뷰 부업
- Git 팀 작업
- 도서 원씽
- 이석증
- 카뷰 수익 인증
- 엑셀 프린트하기
- 성공비법
- 카카오뷰 성장
- 자기관리
- 성공에 대한 거짓말
- 책 원씽
- Axios 라이브러리
- CSS
- express.js 환경 셋팅
- Today
- Total
김데이의 개발공부
[ WIL ] Day 65~74 - 중급 프로젝트 : Prisma ORM 정리 본문
[ WIL ] Day 65~74 - 중급 프로젝트 : Prisma ORM 정리
theday365 2026. 1. 10. 16:36🚀 2주 작업 핵심 📚
1. Prisma ORM 조합으로 다양한 작업 진행
기존 : 간단한 CRUD 작업으로 현재 모델에서 대부분의 작업이 해결되는 경우가 많음
중급프로젝트 : 여러 테이블을 이동하며 작업을 진행해야 하므로, 다양한 조합의 Prisma ORM을 사용
=> 아래 여러 조합의 ORM 설명
2. Git 협업
- main , dev , feature/... 3종류의 브랜치를 사용하는 GithubFlow 방식 적용
- 작은 규모의 프로젝트에서 작업을 효율적으로 관리하기 용이
- main : 최종 배포가 진행되는 브랜치
dev : 작업들이 모두 합쳐지는 개발용 브랜치
feature/... : 실제 각 파트별로 진행되는 작업용 브랜치
- Git rebase 방법
- 기존 작업 저장 : git add . & git commit -m "message"
- 원격 레포에 저장 된 코드를 내 로컬로 가져오기 : git fetch upstream
- 내 로컬 작업에 신규 코드 붙여 넣기 : git rebase upstream/dev
(작업 중인 경우, 임시 브랜치 명이 나옴, git branch로 리베이스 중임을 확인 가능) - 리베이스 중 충돌 된 작업이 있는 경우, 파일에서 정리
- 리베이스 한 파일 최종 저장 : git add . & git rebase --continue
(작업 저장을 위해 CLI text edit가 나오면 "Ctrl O / enter / Ctrl X"로 저장 작업 마무리) - 모두 마친 다음 git branch로 현재 브랜치 확인하여 리베이스 종료 확인
- 추가 작업 후 add & commit & push (기존 작업 루틴대로 진행)
3. Oauth vs Passport Oauth
- Oauth : 전체 모든 과정에 대해 직접 작성하여 인증/인가 구조를 구현,
세부적인 부분까지 직접 셋팅을 진행하기에 전체 워크플로우를 이해하고, 커스텀 하기 좋음
- Passport Oauth : 이미 만들어진 구조에 자사 서비스의 정보만 입력하면 대부분의 작업을 처리 해 주므로 쉽게 구현 가능
수많은 소셜/서비스에 대해 제공 해서 확장성이 편리
🤔 어려웠던 개념, 다시 공부하기 📑
Prisma ORM 명령어 & 옵션
1) Create(생성) : data가 필수 옵션, 등록 할 데이터를 표기
| 단일 생성 (기본형) | 여러 개 생성 | 관계 포함 생성 |
| const nickname = req.body.nickname; prisma.user.create({ data: { email: 'test@test.com', name: 'JS', nickname , // 등록 시 입력해야 하는 데이터 값 표기 }, }); |
prisma.user.createMany({ data: [ { email: 'a@test.com', name:"lee" }, { email: 'b@test.com', name:"kim"}, // 추가로 생성 할 정보를 객체로 만들어 // 배열로 생성하여 data로 전달 ], }); |
prisma.post.create({ data: { title: 'hello', user: { connect: { id: 1 }, // user정보를 함께 생성하고, // 해당 로우의 id를 연결 }, }, }); |
2) Read(조회) : where 옵션이 거의 기본으로 사용되고, select / include / orderBy 등 여러 조합을 사용하면 무긍무진한 조회 방식을 만들 수 있음
- 일반 조회
| 단일 조회 | 여러 개 조회 | 관계형 조회 |
| prisma.user.findUnique({ where: { id: 1 }, // 이때 where에 들어갈 값은 // pk 혹은 unique 값만 가능 }); |
prisma.user.findMany({ where: { role: 'ADMIN', // enum으로 입력한 경우 특정 값 설정 // 또는 수치 값은 이상,이하 등 적용 }, }); |
prisma.user.findUnique({ where: { id: 1 }, include: { posts: true, }, // include를 통해 함께 불러 올 테이블선언 }); |
- 조건 조회
| 필드 제한한 조회 | 검색 데이터 필터링에 대한 조건 | 정렬 조건을 추가한 조회 |
| prisma.user.findUnique({ where: { id: 1 }, select: { id: true, email: true, // id, email 필드만 결과로 전송 }, }); |
prisma.user.findUnique({ where: { id: 1, email: { contains: '@gmail.com' }, // id, email 같은 유니크 값으로 필터링 age: { gte: 20, lt: 30 }, // 수치에 대한 값 필터링 적용 // lt - 미만 , lte - 이하 // gt - 초과, gte - 이상 OR: [ { role: 'ADMIN' }, { role: 'MANAGER' }, ], // 여러 조건을 조합한 결과 필터링 // AND, OR, NOT 3가지 사용 가능 } }); |
prisma.post.findMany({ orderBy: { createdAt: 'desc' // 정렬 오름차순, 내림차순 지정 // 정렬 할 필드와 차순을 적음 }, skip: 0, take: 10, // 생략할 데이터 수 & 가져 올 데이터 수 // 주로 페이징 리스트 표기법에 사용 }); |
3) Update(수정) : 특정 값을 찾아 신규 값을 입력해야 하므로 기본으로 where 옵션, data 옵션이 사용
| 단일 수정 | 여러개 수정 | 관계 수정 | 유무 확인 후 수정 / 생성 |
| prisma.user.update({ where: { id: 1 }, data: { name: 'new name', }, }); |
prisma.user.updateMany({ where: { role: 'USER' }, data: { active: false }, }); |
prisma.post.update({ where: { id: 1 }, data: { tags: { connect: { id: 3 }, }, }, }); |
prisma.tag.upsert({ where: { email: 'react@test.com' // 해당 값을 찾음 }, update: { name: 'feReact' // 값이 있으면 업데이트 실행 }, create: { email: 'react@test.com', name: 'feReact', // 값이 없으면 신규 값 생성 }, }); |
4) Delete(삭제) : 어떤 데이터를 삭제하는 지에 대해 기준을 where 옵션에 적용,
해당 데이터가 삭제되며 관계된 데이터를 삭제 하고 싶은 경우 스키마 모델링 시 " onDelete: Cascade" 설정
| 단일 삭제 | 여러개 삭제 |
| prisma.user.delete({ where: { id: 1 }, }); |
prisma.user.deleteMany({ where: { active: false }, }); |
5) 옵션에서 사용 가능한 여러 조건
- in / notIn : 해당 값을 포함 할지, 안할지 설정
- mode: 'insensitive' : 대소문자를 무시하고 텍스트 필터링 할 때 사용하는 조건
- startsWith / endsWith / contains : "시작하는 문자, 마지막 문자, 해당 문자 포함" 에 대한 설정
- some / none / every : "값이 있다 / 없다 / 전부다" 에 대한 설정으로 보통 존재 여부(true/false)값이 필요할 때 사용
- _count / _avg / _sum / _min / _max : "갯수 / 평균 / 합계 / 최소값 / 최대값"을 계산할 때 사용
where: {
// 포함, 미포함 설정
status: { in: ['TODO', 'IN_PROGRESS'] },
// 문자열 필터링 설정
title: {
contains: 'react', // 문자 포함
mode: 'insensitive', // 대소문자 구분 없이
},
// 관계형 테이블에 대한 조건 추가
include: {
comments: {
where: { isDeleted: false },
orderBy: { createdAt: 'desc' },
take: 5,
},
},
_count: {id: true}, // 데이터의 최종 총 갯수 계산
_avg: { age: true }, // 데이터의 특정 필드 평균값 계산
}
where: {
comments: {
some: {}, // 댓글이 1개라도 있는지 확인
},
}

'코드잇 Node.js(BE) 부트 캠프 > WIL (Weekly I Learn) 📚' 카테고리의 다른 글
| [ WIL ] Day 62~64 - 중급 프로젝트 : ERD / Prisma Schema / OAuth (0) | 2025.12.28 |
|---|---|
| [ WIL ] (도저히 이해가 안가서 GPT와 만든) 비동기 처리 특집!🤖 (0) | 2025.09.28 |
| [ week 1 ] 웹 기초 지식 한번에 훑어보기 (1) | 2025.09.23 |