본문 바로가기

백엔드/Prisma + GraphQL

(19)
Prisma1과 Prisma2 데이터 모델링 비교 [인스타그램 클론코딩] Prisma2 데이터 모델링 포스트의 Prisma2 데이터 모델과 다음의 Prisma1 데이터 모델을 비교하면, Prisma1이 사용된 백앤드에 Prisma2를 적용하기 쉬울겁니다. Prisma1 Prisma2 데이터 모델과 동일한 구조입니다. type User { id: ID! @id userName: String! @unique avatar: String @default(value: "https://3.bp.blogspot.com/-qtEejOg1NHA/Xobmg2y_QeI/AAAAAAAAIVE/UFKPvpeHjKUqCEFOX8lT4MsKz-PwpEGJgCLcBGAsYHQ/s1600/default_user.png") email: String! @unique firstName: ..
Prisma2 클라이언트 생성 Prisma2 CLI를 사용하여 데이터베이스 테이블 생성 포스트에서 데이터베이스에 테이블을 생성했지만, 코드상에서는 Prisma 클라이언트를 사용해서 데이터베이스에 접속하기 때문에, Prisma 모델 구조를 알고 있는 Prisma 클라이언트도 생성해 주어야 합니다. 참조 Prisma2 데이터 모델링1 - 1:1 Relation Prisma2 데이터 모델링1 - 1:N Relation Prisma2 데이터 모델링1 - Self Relation Prisma 클라이언트 생성 콘솔창에 다음 명령어를 입력하면, Prisma CLI가 Prisma 모델(schema.prisma)로 부터 Prisma 클라이언트를 생성합니다. npx prisma generate 참조: Prisma2 설치 (CLI, 클라이언트) 하지만 ..
Prisma2 CLI를 사용하여 데이터베이스 테이블 생성 인스타그램 클론코딩에 사용된 schema.prisma 파일로 부터 데이터베이스 테이블을 생성해 보겠습니다. 참조: GraphQL with Prisma2 설계 구조 schema.prisma [인스타그램 클론코딩] Prisma2 데이터 모델링 포스트에서는 모델링만 했지만, 사실 schema.prisma 파일에 데이터베이스와 Prisma 클라이언트에 대한 설정도 해 주어야 합니다. // 데이터베이스 설정 datasource db { provider = "mysql" url = env("DATABASE_URL") } // Prisma 클라이언트 설정 generator client { provider = "prisma-client-js" binaryTargets = ["rhel-openssl-1.0.x"] //b..
[인스타그램 클론코딩] Prisma2 데이터 모델링 UserFollows Relation은 Self Relation이고, 나머지는 1:N Relation입니다. 참조: 1:1 Relation schema.prisma Nullable은 사용하지 않았습니다. 대신 default 값으로 빈 문자열(@default(value: ""))지정해 주었습니다. 그리고 배열은 아무것도 없는 경우 []를 반환하므로 ?를 사용할 필요도 없고 사용하지도 못합니다. 저는 Relation을 통해서 저장소들이 연결되는 통로를 만들었다고 생각합니다. 1:N Relation User(1) → Post(N) → User(1) User(1) → Like(N) → User(1) User(1) → Comment(N) → User(1) Post(1) → Like(N) → Post(1) Post..
Prisma2 데이터 모델링3 - Self Relation 테이블 내 두 개의 레코드를 1:1로 매칭시킵니다. 사용예(Usecase) Following 시스템 schema.prisma model User { id Int @default(autoincrement()) @id followers User[] @relation("UserFollows", references: [id]) following User[] @relation("UserFollows", references: [id]) } 역시 Relation이기 때문에 컬럼이 생성되지 않습니다. 참조: Prisma2 데이터 모델링1 - 1:1 Relation 대신 Self Relation은 Relation에 사용된 심볼("UserFollows")에 언더바(_)가 추가된 Relation 테이블이 데이터베이스에 생성..
Prisma2 데이터 모델링2 - 1:N Relation 한 개의 레코드와 다른 테이블의 다수 레코드를 1:N으로 매칭시킵니다. 사용예(Usecase) User.post ↔ Post Post.comments ↔ Commnet 1:1 Relation과 거의 동일합니다. 다음은 User 테이블의 Posts 레코드에 다수의 Post 테이블 레코드를 연결시킨 예제입니다. 단지 다수의 레코드가 연결된 한 개의 레코드가 배열 타입으로 변경됐을 뿐입니다. schema.prisma model User { id Int @default(autoincrement()) @id posts Post[] } model Post { id Int @default(autoincrement()) @id user User @relation(fields: [userId], references: [..
Prisma2 데이터 모델링1 - 1:1 Relation 서로 다른 테이블의 레코드를 1:1로 매칭시킵니다. 사용예 (Usecase) User.profile ↔ Profile.userId 다음은 User 테이블의 profile(Profile 타입) 컬럼을 Profile 테이블의 레코드에 1:1로 연결시킨 예입니다. schema.prisma model User { id Int @default(autoincrement()) @id profile Profile? // Nullable } model Profile { id Int @id @default(autoincrement()) user User @relation(fields: [userId], references: [id]) userId Int bio String? // Nullable } Prisma2부터 Re..
GraphQL with Prisma2 설계 구조 개발자가 GraphQL 모델(model.graphql)과 대응하는 Prisma 모델(schema.prisma)을 작성해 줍니다. Prisma1에선 GraphQL 모델과 Prisma 모델이 거의 비슷했지만, Prisma2는 약간 달라졌습니다. Prisma CLI를 사용하여 Prisma 모델 구조를 따르는 데이터베이스 테이블을 생성합니다. 참조: Prisma CLI를 사용하여 데이터베이스 테이블 생성 Prisma CLI를 사용하여 Prisma 클라이언트를 생성합니다. 참조: Prisma2 클라이언트 생성 GraphQL 모델(model.graphql)이 뭔가요? 타입, 쿼리, Mutation을 정의해 놓은 graphql 파일입니다. 예를 들어 User라는 타입을 정의할 때는 User가 갖는 속성들 id, na..