중첩 데이터 및 더 많은 Prisma 2 메모를 포함한 관계

저는 현재 Prisma 2라는 새로운 백엔드 기술을 탐구하고 있습니다.
Prisma 2를 시도하는 모든 사람에게 유용할 수 있기를 바라며 작동 방식을 발견하면서 여기에서 몇 가지 메모를 공유하고 싶습니다(^-^). 코딩, javascript, graphql 또는 그 모든 것에 관심이 없다면 아마도 그다지 흥미롭지 않을 것입니다. 물론, 당신은 어쨌든 메모를 읽을 수 있습니다.

약간의 배경 정보: Prisma 2은 데이터베이스에 대한 쉬운 액세스를 제공하는 데이터베이스 계층인 Prisma의 후속 제품입니다. graphql 스타일로 수행되므로 필요한 데이터를 선택하고 선택하는 멋진 '뷔페' 쿼리를 만들 수 있습니다.

새로운 Prisma는 이전 Prisma와 거의 동일한 작업을 수행하지만 내부적으로는 완전히 다르게 작동하므로 개발자로서 우리가 기술을 사용하는 방법에 대해 좀 더 명확하게 할 수 있습니다. 그것은 또한 일반적으로 이전에 우리에게서 숨겨져 있던 것들에 대해 조금 더 깊이 들어가야 한다는 것을 의미합니다.
따라서 여기에서 '특이점', 또는 오히려 일이 어떻게 작동하는지 발견하고 있습니다.

개요



Prisma 2 스키마는 데이터베이스를 모델링하는 곳입니다. 당신은 Prisma에게 당신이 무엇을 필요로 하고 어떻게 관련되어 있는지 알려주고, 당신을 위해 데이터베이스를 설정할 것입니다.

스키마를 만드는 것은 대부분 매우 직관적입니다. VSCode를 사용하는 경우 VSCode plugin을 설치하는 것이 좋습니다. 오타를 냈거나 불법적인 행위를 했을 때 즉시 알려줍니다. 당연히 불법적인 일이란 불가능한 관계를 만들거나 존재하지 않는 스칼라 값을 사용하려는 경우를 의미합니다.

특히 이전 Prisma 또는 Graphcool에서 온 경우 관계에 각별한 주의가 필요합니다. 더 이상 예전만큼 간단하지 않지만... 그게 최선입니다. 적어도 제 느낌은 그렇습니다.

프리즈마 2 관계


  • 다대다 관계는 두 유형 간의 연결 테이블을 사용하여 암시적으로 또는 명시적으로 수행할 수 있습니다. 연결에 필드를 포함하려면 연결 테이블을 사용하는 것이 좋습니다. 대부분의 경우 암시적 다대다 방식이 작동합니다.
  • 일대일 또는 일대다 관계에는 항상 외래 키가 필요합니다. 일대다 또는 다대일인 경우 '일'에 있어야 합니다. 일대일인 경우 배치할 모델을 선택할 수 있습니다.
  • 한 모델의 동일한 모델에 대해 여러 관계가 있는 경우 관계에 이름을 지정해야 합니다.

  • Apollo 서버로 Prisma 2 설정하기



    데이터베이스 스키마를 작성한 후 Prisma가 데이터베이스를 마이그레이션하도록 한 다음 백엔드에 해당하는 스키마를 생성하면 서버에 대해 걱정할 수 있습니다.

    NodeJS 서버를 사용하고 있는데, 내 프론트엔드에 graphql API를 노출하고 싶기 때문에 Apollo Server 을 사용하고 싶습니다. 많은 기능을 제공하는 견고하고 잘 알려진 기술입니다.

    Prisma 2와 함께 Apollo Server를 설정하는 방법은 글을 쓰는 시점에 어디에도 제대로 문서화되어 있지 않습니다. 하지만 Nexus와 같은 것을 사용하지 않고도 Apollo Server와 함께 Prisma 2를 확실히 사용할 수 있습니다. 그것은 실제로 아주 쉽습니다.

    내가 설정하는 방법은 평소와 같이 Apollo Server를 구성하고 컨텍스트에서 Prisma 2를 전달하는 것입니다.

    const server = new ApolloServer({
        typeDefs,
        resolvers,
        context: createContext,
    });
    

    컨텍스트 함수는 다음과 같이 보일 수 있습니다.

    const prisma = new PrismaClient();
    
    function createContext({ req }) {
        const token = req.headers.authorization;
        // possibly do some authentication stuff
        // or maybe something else :)
        return { prisma, token };
    }
    

    그 정도입니다.

    쿼리 및 변경



    마지막으로 Apollo 서버에서 쿼리하고 변경할 수 있어야 합니다. 문제가 발생하면 다음 사항에 대해 알려드릴 것입니다.
  • 중첩 유형을 쿼리할 때 중첩 유형을 '포함'하거나 '선택'해야 합니다. 돌연변이 후 데이터를 검색하는 경우에도 마찬가지입니다. 처음에는 내 데이터가 어디로 가는지 궁금했습니다. 문서에 답이 있었지만 이전 Prisma에서 나온 결과 저는 이 동작을 예상하지 못했습니다.

  • 더 많은 메모를 수집하면 이 항목을 업데이트하겠습니다. 내 글의 더 많은 부분은 내 개인 블로그에서 끝났습니다. Just Some Notes

    좋은 웹페이지 즐겨찾기