본문 바로가기
개발

Golang으로 GraphQL 서버 구축하기 GQLGEN 활용기

by hes3518 2024. 11. 12.
728x90
반응형

Golang GraphQL 서버 만들기: GQLGEN을 이용한 데이터 연결

안녕하세요! 오늘은 Golang을 사용하여 GraphQL 서버를 구축하고, GQLGEN 라이브러리를 활용해 데이터를 쉽게 관리하는 방법에 대해 알아보겠습니다. 이 포스트에서는 기본적인 패키지 구조를 설명하고, Resolver를 작성하여 실제 데이터를 질의하는 과정을 보여드리겠습니다. Golang을 처음 접하시는 분들도 이해할 수 있도록 기본적인 개념을 상세히 설명할 예정입니다.

들어가며

GraphQL은 API를 위한 질의 언어로, 클라이언트가 원하는 데이터를 정확하게 요청할 수 있게 해주는 강력한 도구입니다. REST와는 다른 접근 방식을 제공하여 효율적으로 데이터를 관리할 수 있게 해줍니다. Golang은 성능과 생산성을 가진 프로그래밍 언어로, GraphQL API 구축에 적합한 도구입니다.

그럼, Golang을 사용한 GraphQL 서버 구축을 시작해 보겠습니다!

1. 패키지 구조 설정하기

서버를 설정하기 전에, 우리가 사용할 기본적인 패키지 구조를 살펴보겠습니다.

.
|   go.mod
|   go.sum
|   gqlgen.yml
|   main.go
|   tools.go
|
+---generated
|       generated.go
|
+---graphql
|       user.graphql
|
ㄴ---resolver
    |   resolver.go
    |   user.resolvers.go
    |
    ㄴ---types
            types.go

위와 같이 패키지 구조를 설정한 뒤, go mod init 명령어로 모듈을 초기화합니다. 이렇게 하면 프로젝트의 의존성과 패키지를 관리할 수 있습니다.

2. Resolver와 Types 정의하기

2.1 RESOLVER란?

Resolver는 GraphQL의 핵심으로, 클라이언트가 요청한 데이터를 어떻게 가져올지를 결정하는 함수입니다. Resolver를 통해 API의 비즈니스 로직을 구현할 수 있습니다.

아래 코드는 user.resolvers.go 파일에 작성할 수 있는 기본적인 Resolver입니다.

package resolver

import (
    "context"
    "fmt"
    "graphql-sample/generated"
    "graphql-sample/resolver/types"
)

type queryResolver struct{ *Resolver }

// UserList는 user_list 필드의 Resolver입니다.
func (r *queryResolver) UserList(ctx context.Context) (*types.UserList, error) {
    var list []*types.User
    list = append(list, &types.User{ID: "1", Name: "Tom"})
    list = append(list, &types.User{ID: "2", Name: "John"})
    return &types.UserList{List: list}, nil
}

// Query는 QueryResolver를 생성하는 함수입니다.
func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} }

2.2 Types 정의하기

다음으로 types.go 파일에서 사용할 타입들을 정의합니다.

package types

type CreateUserInput struct {
    Name string `json:"name"`
}

type User struct {
    ID   string `json:"id"`
    Name string `json:"name"`
}

type UserList struct {
    List []*User `json:"list"`
}

이렇게 정의한 타입들은 GraphQL 쿼리의 요청 및 응답 형식과 일치해야 합니다.

3. 서버 실행 및 데이터 질의하기

이제 Golang 서버를 실행하고 Playground에 접근하여 데이터를 질의할 차례입니다. 아래의 GraphQL 쿼리를 사용하여 user_list를 요청할 수 있습니다.

query {
  user_list {
    list {
      id
      name
    }
  }
}

이 쿼리를 실행하면, 다음과 같은 결과를 받을 수 있습니다.

{
  "data": {
    "user_list": {
      "list": [
        {
          "id": "1",
          "name": "Tom"
        },
        {
          "id": "2",
          "name": "John"
        }
      ]
    }
  }
}

마무리하며

오늘은 Golang을 사용하여 GraphQL 서버를 구축하는 방법을 알아보았습니다. GQLGEN을 통해 프로젝트의 기본 구조를 설정하고, Resolver와 Types를 정의하면서 실제 데이터를 질의하는 과정도 보여드렸습니다. 이러한 구조를 기반으로 더욱 다양한 기능을 구현해 보시길 바랍니다.

프로그래밍에 대한 질문이나 더 알고 싶은 내용이 있다면 댓글로 남겨주세요. 여러분의 코딩 여정에 도움이 되었기를 바랍니다! 다음 포스트에서 또 만나요!

728x90
반응형