Today I Learn
[TIL] 240528 캠프 44일차: prisma: --schema 옵션, $transaction
pledge24
2024. 5. 28. 20:54
오늘 배운 내용
yarn remove
yarn add를 통해서 추가한 패키지는 yarn remove를 통해 제거할 수 있다. yarn remove 명령어는 devDependencies와 상관없이 패키지를 삭제한다.
// prettier 패키지 삭제
yarn remove prettier
npx prisma db push --schema 옵션
schema를 2개 이상 사용하는 경우, 각 schema에 따른 DB push가 이루어져야 한다. 이 때 그냥 npx prisma db push를 하게 되면 schema가 2개이기 때문에 원하는 결과가 나오지 않는다. 그렇기 때문에 --schema 옵션을 이용하여 push할 schema를 명시해야한다.
// prisma/user.prisma 스키마를 통해 db에 push
npx prisma db push --schema ./prisma/user.prisma
prisma: $transaction
prisma에서 트랜젝션을 사용하고 싶다면 $transaction을 사용하면 된다. 사용법은 아래와 같다.
// MySQL과 연결된 Prisma 클라이언트를 통해 트랜잭션을 실행합니다.
const [updatedCharacter] = await prisma.$transaction(async (tx) => {
.
.
.
// 캐릭터-인벤토리 DB에서 characterId, itemCode를 가지는 데이터를 가져옵니다.
const inventoryItem = await tx.charactersInventory.findFirst({
where: {
characterId: +characterId,
itemCode: +itemCode,
},
});
.
.
.
// 캐릭터의 소지금을 총 구매 금액만큼 감소시킵니다.
const updatedCharacter = await tx.characters.update({
where: {
characterId: +characterId,
},
data: {
characterMoney: {
decrement: totalPrice,
},
},
});
// 콜백 함수의 리턴값으로 갱신된 캐릭터 정보(updatedCharacter)를 반환합니다.
return [updatedCharacter];
});
쿼리문을 tx로 실행하면 해당 쿼리문은 트랜젝션으로 취급되어 ACID가 보장된다. 즉, 트랜젝션으로 취급된 일부 쿼리문만 실행되는 경우가 발생하지 않는다.
오늘의 Trouble Shooting
- 오늘은 해결한 Trouble이 없어요!
오늘 한 일
더보기
- OSI 계층: 네트워크 계층 글 포스팅
- Node.js 과제 선택 요구사항 전부 구현 완료
- Node.js 과제 깃헙에 연동 및 업로드