나만의 작은 도서관

[TIL] 240528 캠프 44일차: prisma: --schema 옵션, $transaction 본문

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 과제 깃헙에 연동 및 업로드