This message was deleted.
# 질문
s
This message was deleted.
u
지금 상황에서 꼭 오퍼레이션 디렉티브가 필요하지는 않은 것 같긴 한데, 궁금증은 풀고싶어서 ㅎ-ㅎ.. 우선 1. 스키마 디렉티브 와 2. 커스텀 스칼라로 원하는 목표는 달성할 수 있을 것 같습니다
제 짧은 견해로는 (서버 쪽의)
graphql
execute
를 래핑해야 하지 않나인데,, 아닌것 같기도 해서 흠
h
아닙니당
Schema Directive 가 Schema Builder 에서 사용하는 고차 함수인 것 처럼 Operation Directive 는 Operation Builder 에서 사용하는 고차함수입니다.
스키마 디렉티브가 붙은 스키마를 빌더에 입력하면 디렉티브 정보가 모두 날라가고 변환된 스키마가 나오듯이
오퍼레이션 디렉티브가 붙은 오퍼레이션을 빌더에 입력하면 마찬가지로 디렉티브 정보가 다 날아가야합니다
그래서 서버에서는 관련해서 할 일이 없어요
1. 구체적으로 뭘 만들려고 하시는지 2. 어떤 GraphQL 클라이언트 쓰시는지 알려주시면 더 구체적으로 답변 드리겠습니다
u
1.
@dateTime(format: String)
@format
을 만드려고 합니다.
@format
은 도메인 특화된 포매팅인데 음 중요하진 않군요 2. 릴레이 사용중입니다!
h
말씀하신건 스키마에 필요한 내용이고 오퍼레이션에 적용할 부분은 없을거 같습니다
u
그렇군요 그렇다며는 오퍼레이션 디렉티브로 활용되는 케이스는 대체로 희박한가요? 페이스북에서
@module
같은 (확실하지는 않음) 걸 구현해서 쓰는것처럼용
h
네 대체로 적습니다
이유가 꽤 단순한데요
오퍼레이션 디렉티브를 온디맨드로 처리하려면 클라이언트가 GraphQL 구문분석 작업을 수행해야합니다. 원래는 하지 않아도 되는 무거운 작업이죠. 당연히 전반적인 성능도 저하되고 번들사이즈도 커지고요. 릴레이는 이걸 컴파일타임에 수행합니다
대표적인 사례 중 하나를 꼽자면 Apollo Client 의 확장인 apollo-link-rest 같은게 있겠네요
Apollo 는 이걸 구현하기 위해 apollo-utilities 라는 경량 파서를 만들어서 썼었는데요
u
오호
지금은 apollo-client 코어에 내장되서 export 가 안될겁니다 ㅋㅋ;
일단 말씀하신 사례는 스키마 요구사항을 변경하는 매크로라서 클라이언트에서 할게 없습니다. 더 안 파셔도 될거 같아요
u
감사합니다. 제 사용사례와 맞지도 않았지만, 애초에 오퍼레이션 디렉티브에 대한 이해가 잘못되었네요 • 원래 이해하기로는
@directive(args, args, …)
를 보내면, 이 데이터를 가지고 서버에서 일련의 처리를 거치고, 그 값을 응답일 것이다 인데 • 서버에서 스키마 + 디렉티브 = 변환된 스키마 w/o 디렉티브 인 것 처럼 클라이언트, 오퍼레이션 쪽도 마찬가지.
👍 1
1
h
넹 디렉티브라는 것 자체가 구문확장이고 지시자이지 런타임 확장처럼 동작하지 않아용
이거 제가 예전 GraphQL Korea 밋업에서 발표한 내용에 있긴 한데 ㅋㅋ
u
감사합니다 예전에도 봤는데 다시 봐야겠어요..ㅋㅋㅋ