Prisma를 활용하여 GraphQL에 MySQL DB 연동하기
사용 API : GraphQL사용 Database : MySQL사용 ORM : PrismaORM이 뭔지도 몰랐는데, 내가 사용하려는 GraphQL과 MySQL을 연결하려면 ORM이라는 것이 필요하다는 걸 알게되었다..무작정 시도한다고 되는게 아니었
velog.io
https://chatgpt.com/share/40ea640e-701b-4bbc-a92a-6adeb4fbebbc
ChatGPT
A conversational AI system that listens, learns, and challenges
chat.openai.com
graphql을 쓰기 위해 개발자는 스키마 정의, 리졸브 정의, 쿼리 정의 코드를 작성해야한다.
네, 맞습니다. GraphQL을 사용하기 위해 개발자는 주로 세 가지 주요 부분을 정의하고 구현해야 합니다: 스키마 정의, 리졸버 정의, 그리고 클라이언트 측 쿼리입니다. 각 부분은 GraphQL API의 구조와 기능을 정의하고, 클라이언트와 서버 간의 데이터 교환 방식을 설계하는 데 중요한 역할을 합니다. 다음은 이 세 부분에 대한 간략한 설명입니다:
### 1. 스키마 정의 (Schema Definition)
스키마는 GraphQL 서버에서 사용 가능한 데이터 타입과 그 관계를 정의합니다. 스키마는 `type`들로 구성되며, 이는 데이터의 구조와 API를 통해 수행할 수 있는 작업(쿼리와 뮤테이션)을 설명합니다. 스키마는 데이터를 요청하고 변형하는 방법을 명확하게 정의하여 API의 계약(contract) 역할을 합니다.
### 예시: 사용자 정보를 다루는 스키마
```graphql
type User {
id: ID!
name: String!
email: String!
}
type Query {
getUser(id: ID!): User
}
type Mutation {
createUser(name: String!, email: String!): User
}
```
### 2. 리졸버 정의 (Resolver Definition)
리졸버는 스키마에 정의된 각 필드에 대한 구현 로직을 포함합니다. 쿼리 또는 뮤테이션을 수행할 때 마다 해당 필드의 리졸버 함수가 호출되어 필요한 데이터를 데이터베이스나 다른 데이터 소스에서 가져오거나, 데이터를 변형합니다. 리졸버는 실제 데이터베이스 쿼리, 외부 API 호출, 또는 다른 로직을 포함할 수 있습니다.
### 예시: `getUser` 및 `createUser` 리졸버
```javascript
const resolvers = {
Query: {
getUser: (parent, { id }, context) => {
return context.db.findById(id);
}
},
Mutation: {
createUser: (parent, { name, email }, context) => {
return context.db.createUser({ name, email });
}
}
};
```
### 3. 쿼리 정의 (Query Definition)
클라이언트 측에서는 필요한 데이터를 요청하는 쿼리를 작성합니다. 이 쿼리는 서버의 스키마에 따라 작성되며, 스펙에 맞게 서버로 전송됩니다. 클라이언트는 쿼리를 통해 필요한 데이터를 정확히 요청할 수 있으며, 서버는 해당 쿼리를 해석하여 요청된 데이터를 반환합니다.
### 예시: `getUser` 쿼리
```graphql
query {
getUser(id: "123") {
name
email
}
}
```
이 세 부분은 GraphQL을 통한 강력하고 유연한 API 설계의 기반을 형성하며, 클라이언트와 서버 간의 효율적인 데이터 교환을 가능하게 합니다. 개발자는 이를 통해 데이터와 애플리케이션의 요구 사항에 맞추어 맞춤형 API를 설계할 수 있습니다.
'개인공부' 카테고리의 다른 글
| [Vue.js] 동적 클래스 바인딩 (1) | 2024.05.20 |
|---|---|
| [css] position 값 (0) | 2024.05.20 |
| [css,vuetify] align (2) | 2024.05.13 |
| [css] i 태그 사용(font awesome), margin (2) | 2024.05.12 |
| [vuetify]sizing (1) | 2024.05.07 |