그래프ql (AWS AppSync) 에서 에서 저장된 데이터를 실시간으로 땡겨오기 위하여 Subscription 을 사용 할 수 있는데
띠용 분명히 DB 에는 데이터가 있는데, Subscription 하니까 특정 field 가 null 로 오는 경우가 발생..
무엇이 문제인고 하니..
AppSync only fills the subscription events with the fields that the mutation defined.
AppSync 는 (다른 그래프ql 은 몰?루) mutation 할때 defined 된 애들만 가져온다! 는 사실..
즉 DB 에서 Query 하는게 아니라, 실제 Mutation 이 쿼리가 return 하는 값만, 고대로~~ Subscrption 이 구독 한다는 말이다.
예를 들어
스키마는 다음과 같고
type Message {
messageId: String!
message: String!
messageCreatedAt: String!
}
type Mutation {
createMessage(message: String!): Message!
}
// createMessage 할때, 해석기 (resolver) 에서 id랑 createdAt 이 부여됨!
type Subscription {
addMessage: Message
@aws_subscribe(mutations: ["createMessage"])
}
schema {
mutation: Mutation
subscription: Subscription
}
Client 에서 사용할 쿼리는 다음과 같을때,
// CreateMessageAndQueryAllField 쿼리
mutation CreateMessageAndQueryAllField {
createMessage(message:"메시지~~") {
messageId
message
messageCreatedAt
}
}
// messageCreatedAt을 확인하지 않는 CreateMessageAndQuerySomeField 쿼리
mutation CreateMessageAndQuerySomeField {
createMessage(message:"메시지~~") {
messageId
message
}
}
// 구독 subscription
subscription OnMessageAdded {
addMessage {
messageId
message
messageCreatedAt
}
}
실제 `createMessage` 할때, resolver 에서 messageId 와 messageCreatedAt 을 부여하기 때문에, CreateMessageAndQueryAllField 이나 CreateMessageAndQuerySomeField 이나 상관없이, DB 에는 모든필드 (messageId, message, messageCreatedAt) 이 다 들어가있음에도 불구하고.
OnMessageAdded 구독중일때 CreateMessageAndQuerySomeField 쿼리로 데이터가 삽입된 순간에는 messageCreatedAt 은 null 로 들어온다...
728x90
'프로그래밍 기술 노트 > 기타 정보' 카테고리의 다른 글
[DB] 현재는 모든 과거의 필연적인 산물이다 - Bitemporal 을 곁들인 타임머신 (0) | 2024.06.27 |
---|---|
주둥아리 주도 개발 (JDD) (3) | 2021.08.19 |
[Memory 관리] 프로그래밍 언어별 메모리 관리 이해 (0) | 2021.06.07 |
[Visual Studio] 비주얼 스튜디오 창 분할 (code split) 시 비정상적으로 종료 되는 문제 (7) | 2021.02.22 |
[AWS/자격증] AWS Certified Cloud Practitioner 획득 (0) | 2020.11.24 |