[개념정리] Type 정의하기

2021. 1. 11. 18:31프로그래밍-Web/GraphQL

GraphQL을 쓰면서도 자꾸 장점을 까먹게 되는데

내가 피부로느끼는 GraphQL의 장점은 크게 세가지다

 

1. Type을 정의하여 한번의 call로 필요한 데이터를 다양하게 가져올 수 있다

2. 필요한 데이터가 너무 많은 경우 DataLoader를 활용해 하나의 쿼리로 치환할 수 있다

3. 클라이언트에서 1을 정의할 수 있다. 

 

3번이야 뻔한 얘기고, 2번은 나중에 포스팅 할꺼다

1번은 좀 당연한 장점이긴한데, graphQL은 기본적으로 서로 관련없는 데이터들도 gql type으로 정의하면 유연하게 가져올 수 있다는 뜻이다.

 

예를 들어 보자

 

ProjectComapny라는 컬렉션이 있고, 기본적으로 해당 컬렉션에 call을 날리는 상황이다.

하지만 ProjectCompany라는 애는 Member ID, Item ID , ConsumedResource ID  들도 리스트로 가지고있다.

나는 하나의 ProjectCompany 도큐먼트가 가진 Member ID에 해당하는 모든 Member 정보를 다시  Member 컬렉션에서 가져오고 싶은 상황이다.

 

MemberList의 경우는 상대적으로 간단하다(Item도 같다)

Member라는 컬렉션과 type이 정의되어 있으니, ProjectCompany에 memberList 타입을 정의하고 로직을 통해 Member에서 읽어오면 된다.

 

하지만 consumedResource라는 type은 존재하지 않는 컬렉션이다

얘는 다시 Item 한개를 들고 있다.

그럼 나는 ProjectCompany->consumedResource->item형태로 데이터를 파악해야한다

 

이렇게 nested한 type은 해당 타입을 아예 projectCompany 밖에 짜준다.

이렇게하면 정의한 타입 구조대로 타고가서 필요한 데이터를 가져오게 된다.