Amplify Data modeling
Amplify는 GraphQL 스키마에서 @model 지시어로 주석이 달린 GraphQL 유형에 대한 DynamoDB 데이터베이스 테이블을 자동으로 생성한다. 그리고 @model은 ID 필드를 데이터베이스 테이블에 primaryKey로 자동으로 추가한다.
아래는 Todo에 대한 간단한 GraphQL 스키마이다.
type Todo @model {
content: String
}
위 예제의 GraphQL 스키마는 'Todo'에 대한 데이터베이스 테이블을 자동으로 생성한다.
Amplify CLI는 “amplify push"를 하면 Todo 데이터베이스 테이블을 생성하고 Todo 모델에 대한 Create, Read, Update, Delete 및 list operations을 수행할 수 있는 GraphQL API를 생성한다.
또한 @model은 createdAt 및 updatedAt 타입을 따로 스키마에 정의하지 않아도 자동으로 추가해준다.
위 스키마에 대한 결과는 아래와 같이 생성된다.
type Todo @model {
id: ID!
content: String
createdAt: AWSDateTime
updatedAt: AWSDateTime
}
primary key
@model 지시어가 있는 모든 GraphQL 유형에는 자동으로 id 필드가 pk로 설정된다. “@primaryKey” 지시어로 다른 필수 필드를 표시하여 이 동작을 재정의할 수 있다.
아래 예제에서 todoId는 데이터베이스의 pk이며 @primartKey를 사용했기 때문에 @model 지시문에 의해 id 필드가 더 이상 자동으로 생성되지 않는다.
type Todo @model {
todoId: ID! @primaryKey
content: String
}
주의할 점은 PK를 설정하고 배포된 이후에는 테이블을 삭제하고 다시 만들지 않는 이상 PK를 변경할 수 없다.
Default Values
@default지시어를 사용해서 선택적 scalar type 필드에 대한 기본값을 지정할 수 있다.
type Todo @model {
content: String @default(value: "My new Todo")
}
위와 같이 Todo를 만들고 content의 값을 전달하지 않으면 Amplify는 기본 값으로 설정해준 “My new Todo”값으로 자동으로 설정한다.
@default를 사용해 기본값을 적용하면 "!" 를 사용하는것이 무시가 된다. 좀 쉽게 이야기하면 "String!"와 "String"은 동일하다는 이야기이다. 왜냐하면 값을 제공하지 않더라도 필드가 기본값을 가져오기 때문에 null이 되지않기 때문이다.
References
https://docs.amplify.aws/cli/graphql/data-modeling/#setup-database-tables
'성장이야기 > TIL' 카테고리의 다른 글
[개발일지] 230620 GraphQL과 AppSync를 이용해 실시간 데이터 전송 (With Redis) (0) | 2023.06.20 |
---|---|
[개발일지] 230616 Quarkus Redis WRONGTYPE Operation against a key holding the wrong kind of value (0) | 2023.06.17 |
[개발일지] 230613 GraphQL Mutation (0) | 2023.06.13 |
[개발일지] 230609 GraphQL을 알아보자 (GraphQL과 REST API) (0) | 2023.06.09 |
[개발일지] 230608 실시간 급상승 검색어 알고리즘 (1) | 2023.06.08 |