GraphQL 의문점

기업협업 자료로 일부만 공개하여 사용하는 점이 있다.

GraphQL에서 SelectAll이 안 된다.

1. 오늘 시도한 것

GraphQL에서 id, decription 등 컬럼의 내용을 하나 하나, 혹은 여러 단위로 불러 올 수 있는 CRUD 중 READ를 해봤는데, 그러면 한 번에 모든 데이터를 불러올 수 있는 방법은 없을지 고민하며 '삽질'을 시작하였다.

2. 고민한 것 & 완성해본 코드

1. dto

dto의 경우는 크게 다를 것이 없으나 배열로 받지 않을까? 하는 고민에서 다음과 같이 짰고, PickType이 하나씩 골라서 찝어가는 것이라 반대인 PartialType을 이용했다.

@InputType()
export class GetOrdersInput extends PartialType(Order){

}

@ObjectType()
export class GetOrdersOutput extends CoreOutput{
    @Field(type => [Order], {nullable:true})
    order?: Order[]
}

2. service

서비스의 경우에도 크게 다를 것이 없다고 생각했으나 findOne보다는 find를 사용하는 것이 적절하다 생각하여 작성했다. 위에만 보면 다음과 같다.

try{
            const order = await this.orders.find();

            if(!order){
                return {
                    ok:false,
                    error: "Orders don't exist"
                }
            }

3. resolver

get과 같이 query를 조작하였다. 마찬가지로 배열을 받아야한다고 생각했으나 크게 달라진 것이 없었다. 변수 명이 좀 바뀌었다 정도..?

3. 내린 결론

참고 사이트

마지막에 같이 찾다가 결국 찾아버린 사이트. 결론은 안 된다 였다.

이 사람의 주장도 일리가 있지만 결국 내가 생각했을 때 GraphQL의 목적과 생산성을 고려했을 때 굳이 모든 것을 select해 올 필요가 없지 않을까 싶다. 한 api주소로 원하는 정보를 쿼리로 마음껏 가져다가 쓰고 할 수 있는데 굳이 모든 정보를 다 긁어올 필요가 있을까?(물론 필요하다면 해야겠다만) 그런 이유로 아마 특별한 어트리뷰트나 함수가 없었지 않았나 싶다. 8시간 넘게 고민했고 충분히 이해가 될 정도로 공부를 했다. 혹시라도 이 가정이 (사실 이건 가정이지 결론이 아니다.) 깨질 수 있다면 깨고 싶다. 답이 있다면 참고하고 싶다.

좋은 웹페이지 즐겨찾기