티스토리 뷰

카테고리 없음

ExecutionGraphQlService 소개

행복[HappY] 2025. 3. 15. 00:00

ExecutionGraphQlService에 대한 설명

ExecutionGraphQlService는 Spring for GraphQL에서 GraphQL 요청을 실행하는 핵심 서비스입니다.
GraphQL 쿼리(Query)나 변형(Mutation), 구독(Subscription)을 실행하고, GraphQL 데이터 처리 로직을 연결하는 역할을 합니다.

 

 

 

1. ExecutionGraphQlService의 역할

Spring 애플리케이션에서 GraphQL 요청을 처리하려면 GraphQL 스키마를 로드하고, 실행 엔진을 구성하며, 클라이언트 요청을 처리할 수 있어야 합니다.
ExecutionGraphQlService는 이러한 과정에서 GraphQL 요청을 실행하고 응답을 반환하는 역할을 합니다.

 

주요 기능

  1. GraphQL 요청 실행
    • ExecutionGraphQlService는 GraphQL 요청을 실행하고, 결과를 반환하는 역할을 합니다.
  2. GraphQL 엔진(GraphQL Java)과 통합
    • Spring for GraphQL은 GraphQL Java 라이브러리를 기반으로 동작하며, ExecutionGraphQlService는 이를 통해 요청을 실행합니다.
  3. 데이터 페치(Data Fetching)와 연결
    • 데이터 로더(DataLoader) 및 서비스 계층을 연결하여 데이터를 가져오고 응답을 구성합니다.
  4. 비동기(reactive) 및 동기 방식 지원
    • WebFlux 및 MVC 환경에서 동작할 수 있도록 설계되어 있으며, Mono와 CompletableFuture를 활용한 비동기 실행을 지원합니다.

 

 

 

2. ExecutionGraphQlService 사용 방법

예제 1: ExecutionGraphQlService 빈 설정

Spring에서 ExecutionGraphQlService를 설정하는 방법을 살펴보겠습니다.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.graphql.execution.ExecutionGraphQlService;
import org.springframework.graphql.execution.GraphQlSource;

@Configuration
public class GraphQlServiceConfig {

    @Bean
    public ExecutionGraphQlService executionGraphQlService(GraphQlSource graphQlSource) {
        return ExecutionGraphQlService.builder(graphQlSource).build();
    }
}

설명

  • GraphQlSource는 GraphQL 스키마 및 실행 엔진을 포함하는 객체입니다.
  • ExecutionGraphQlService.builder(graphQlSource).build()를 사용하여 GraphQL 요청을 실행할 서비스 객체를 생성합니다.

 

예제 2: GraphQL 요청 실행

ExecutionGraphQlService를 사용하여 GraphQL 쿼리를 실행하는 방법을 살펴보겠습니다.

import org.springframework.graphql.ExecutionGraphQlService;
import org.springframework.graphql.ExecutionInput;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono;

@Service
public class GraphQlExecutor {

    private final ExecutionGraphQlService executionGraphQlService;

    public GraphQlExecutor(ExecutionGraphQlService executionGraphQlService) {
        this.executionGraphQlService = executionGraphQlService;
    }

    public Mono<String> executeGraphQlQuery(String query) {
        ExecutionInput executionInput = ExecutionInput.newExecutionInput()
                .query(query)
                .build();

        return executionGraphQlService.execute(executionInput)
                .map(response -> response.getData().toString());
    }
}

설명

  • ExecutionInput.newExecutionInput()을 사용하여 GraphQL 요청을 생성합니다.
  • executionGraphQlService.execute(executionInput)을 실행하면 GraphQL 쿼리가 처리되고 결과가 반환됩니다.
  • Mono<String>을 반환하여 비동기 방식으로 처리할 수 있도록 구성되었습니다.

 

예제 3: 컨트롤러에서 ExecutionGraphQlService 사용

Spring MVC 또는 WebFlux 기반 컨트롤러에서 GraphQL 요청을 실행할 수 있습니다.

import org.springframework.graphql.ExecutionGraphQlService;
import org.springframework.graphql.ExecutionInput;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono;

@RestController
@RequestMapping("/graphql")
public class GraphQlController {

    private final ExecutionGraphQlService executionGraphQlService;

    public GraphQlController(ExecutionGraphQlService executionGraphQlService) {
        this.executionGraphQlService = executionGraphQlService;
    }

    @PostMapping
    public Mono<Object> executeGraphQl(@RequestBody GraphQlRequest request) {
        ExecutionInput executionInput = ExecutionInput.newExecutionInput()
                .query(request.getQuery())
                .variables(request.getVariables())
                .build();

        return executionGraphQlService.execute(executionInput)
                .map(response -> response.getData());
    }
}

설명

  • @PostMapping("/graphql")을 사용하여 GraphQL 요청을 JSON 형식으로 받을 수 있도록 설정합니다.
  • executionGraphQlService.execute(executionInput)을 실행하여 GraphQL 요청을 처리하고 응답을 반환합니다.

 

 

 

3. ExecutionGraphQlService의 주요 메서드

메서드 설명

execute(ExecutionInput executionInput) GraphQL 요청을 실행하고 결과를 반환
executeAsync(ExecutionInput executionInput) 비동기 방식으로 GraphQL 요청을 실행
builder(GraphQlSource graphQlSource) GraphQL 실행 엔진을 설정하는 빌더

 

 

 

4. ExecutionGraphQlService 사용 시 주의할 점

  1. GraphQL 스키마 정의가 필요함
    • ExecutionGraphQlService를 사용하려면 GraphQL 스키마(schema.graphqls)를 먼저 정의해야 합니다.
  2. 데이터 로딩 최적화 필요
    • 데이터 페칭을 최적화하기 위해 DataLoader를 활용하여 N+1 문제를 해결하는 것이 중요합니다.
  3. 비동기 실행 환경 고려
    • WebFlux 기반 애플리케이션에서는 Mono 및 Flux를 활용하는 것이 성능 최적화에 유리합니다.

 

 

 

5. 요약

  • ExecutionGraphQlService는 Spring for GraphQL에서 GraphQL 요청을 실행하는 핵심 서비스입니다.
  • GraphQlSource를 기반으로 GraphQL 요청을 실행하고 결과를 반환하는 역할을 합니다.
  • execute(ExecutionInput executionInput)을 통해 GraphQL 쿼리 및 변형(Mutation)을 실행할 수 있습니다.
  • 비동기 방식(WebFlux) 및 동기 방식(MVC) 모두 지원하며, 컨트롤러와 서비스 계층에서 사용할 수 있습니다.
  • GraphQL API를 효과적으로 운영하기 위해 스키마 정의 및 데이터 로딩 최적화가 필요합니다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함