[개발일지] 230614 Amplify GraphQL

2023. 6. 14. 21:38·성장이야기/TIL

 

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

 

https://docs.amplify.aws/cli/graphql/data-modeling/#setup-database-tables

 

docs.amplify.aws

 

'성장이야기 > 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
'성장이야기/TIL' 카테고리의 다른 글
  • [개발일지] 230620 GraphQL과 AppSync를 이용해 실시간 데이터 전송 (With Redis)
  • [개발일지] 230616 Quarkus Redis WRONGTYPE Operation against a key holding the wrong kind of value
  • [개발일지] 230613 GraphQL Mutation
  • [개발일지] 230609 GraphQL을 알아보자 (GraphQL과 REST API)
seungjjun
seungjjun
  • seungjjun
    개발이야기
    seungjjun
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 성장이야기
        • TIL
        • 주간회고
      • Java
        • Spring
        • Spring Security
      • 트러블슈팅
      • Kafka
      • OS
      • Network
      • 메가테라
      • Database
      • Algorithm
      • Git
      • HTML
      • CSS
      • 독서
      • 컴퓨터 이해하기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Til
    이커머스 프로젝트
    메가테라 주간회고
    graphQL
    redis
    주간회고
    항해99
    메가테라
    개발일지
    항해플러스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seungjjun
[개발일지] 230614 Amplify GraphQL
상단으로

티스토리툴바