GraphQL input type 특이점.

Kyle_Kim·2023년 6월 13일
0
  • TalkCommentResolver.java
@MutationMapping
    public TalkCommentVo insertTalkComment(@Argument TalkCommentVo talkCommentParam){
        return talkCommentService.insertTalk(talkCommentParam);
    }
  • TalkComment.graphql
type TalkComment {
    id: Int
    talkId: Int!
    writerId: Int!
    precedingId: Int!
    contents: String!
}

input TalkCommentParam{
    talkId: Int
    writerId: Int
    precedingId: Int
    contents: String
}

extend type Mutation {
	insertTalkComment(talkCommentParam: TalkCommentParam!): TalkComment
}

만약 위같은 Resolver와 mutation query가 있다고 생각하자.

- 한가지 알아 차린점은 resolver의input 파라메터에 들어가는 talkCommentParam을 graphql파일에 새로 정의해 줬지만, 따로 자바 클래스를 생성하지 않고 Entity클래스를 재활용 할 수 있었다는 점이다.

- 그러므로, graphql에 input을 정의해도 따로 java클래스를 만들어 줄 필요 없다.

다른말로는 리졸버에 있는 input parameter의 변수명과 graphql파일에 정의한 input type명만 일치시고, 객체에 포함되어(종속되어)있는 필드들을 충족시켜주면 된다는 의미이다.

@MutationMapping
    public TalkCommentVo insertTalkComment(@Argument TalkCommentVo talkCommentParam){
        return talkCommentService.insertTalk(talkCommentParam);
    }

결론적으로....

Input타입을 위해 DTO를 따로 만들어줄 필요가 없다.

Input타입과 리졸버의 input parameter의 이름은 꼭 맞쳐줘야 한다

리졸버의 input parameter의 타입이 input타입의 필드들을 충족 시킨다면 문제없다!!!

profile
Make Things Right

0개의 댓글