2024-11-26 TIL
TIL 쓰는 스타일을 바꿔보자.
기존의 작성 방법 말고 내가 배웠던 것 가운데 눈에 띄는 것, 어려웠던 것을 해설하는 방법으로 정리를 해보도록 하자.
일기 같은 걸 작성하는 게 아니라 기술 분석서라고 생각해 보자.
ORM (Object Relational Mapping)
사전적 설명 :
객체(object)와 데이터베이스의 관계(relation)을 연결(mapping) 해주는 도구.
원래 데이터베이스와 프로그래밍 상의 데이터는 1 대 1로 호환이 되는 구조가 아닌데, 이걸 호환되게 도와주는 도구라고 보인다.
프로그래밍 환경(ex : vsCode, visual studio, pycharm 등등)에서 데이터베이스에 접근하기 위해서 데이터를 연결하고, 쿼리문에 해당하는 값을 적어야 하는데, 그걸 해주는 도구이다.
TYPEorm, prisma, Sequelize, djangoORM(python용) 등의 것들이 존재하나 우리는 현재 prisma를 이용하고 있다.
오랜만에 OMR카드 생각 났다
장점 | 단점 |
---|---|
객체지향적인 코드 | ORM이 모든 걸 해결해 줄 수 없다(복잡한 쿼리문까진 지원되지 않을 수 있다. {ex : with recursive 문}) |
재사용성, 유지보수, 리팩토링(코드를 수정하는 것) 용이성 | |
DBMS의 종속성 하락(raw query를 사용하지 않는 이유) |
prisma
현재 내가 사용하고 있는 ORM 프레임워크. 자바스크립트 또는 타입스크립트에서 많이 사용된다고 한다.
설치 방법
$ npm install prisma
npm install --save-dev nodemon
npx prisma init
서버에서 작업을 할 것이기 때문에 서버가 중간에 꺼지지 않도록 도구를 가져옴과 함께 사용할 환경 설정을 해준다.
prisma client
데이터에 맞게 자동 생성되는 안전한 쿼리 빌더.
prisma를 통해 DB 에 조회하거나 수정하거나 하는 등의 작업을 할 수 있게 하는 도구.
설치 방법
$ npm install @prisma/client
npx prisma generate
사용 방법
import { PrismaClient } from '@prisma/client';
export const prisma = new PrismaClient({
// Prisma를 이용해 데이터베이스를 접근할 때, SQL을 출력해줍니다.
log: ['query', 'info', 'warn', 'error'],
// 에러 메시지를 평문이 아닌, 개발자가 읽기 쉬운 형태로 출력해줍니다.
errorFormat: 'pretty',
}); // PrismaClient 인스턴스를 생성합니다.
//트랜잭션(작업을 하나의 묶음으로 만드는 개념)을 처리할 때는 아래의 방법을 사용한다.
const [posts, comments] = await prisma.$transaction([
prisma.posts.findMany(),
prisma.comments.findMany()
])
//쿼리문을 직접 작성하는 것도 가능하다.
const [Users, userInfos] = await prisma.$transaction([
prisma.$queryRaw`select * from Users`,
prisma.$queryRaw`select * from UserInfos`
])
사용하는 함수들
함수 이름 | 함수 기능 |
---|---|
await prisma.$transaction | 트랜잭션으로 처리할 묶음을 만들고 그 안에서 commit(작업이 완료되어 저장됨)과 rollback(중간에 작업이 실패하여 처음 상황으로 돌아감)을 처리한다 |
await prisma.userInfos.create | 값을 생성하는 함수 |
await prisma.users.findFirst | 값들 가운데 지정된 값 하나를 가져오는 함수, where문을 안에 넣어 원하는 값을 정할 수 있다. |
await prisma.users.findMany | 해당하는 row 전부를 가져오는 함수 |