본문 바로가기
golang

[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(2)

by devjh 2022. 12. 7.
반응형

이번 게시글에서는 gqlgen 사용법에 대해서 정리합니다.

 

소스코드는 아래의 github 레포(example-1 branch)에서 확인하실 수 있습니다.

 

GitHub - jaeho310/golang-graphql-sample

Contribute to jaeho310/golang-graphql-sample development by creating an account on GitHub.

github.com

 

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

 

2.  tools.go

package tools

import (
	_ "github.com/99designs/gqlgen"
	_ "github.com/99designs/gqlgen/graphql/introspection"
)

tools.go파일을 만든 후 의존성을 위해 mod파일을 만들어주고

go get을 입력해 의존성을 다운받습니다.

$ go mod init graphql-sample
$ go get

 

 

3. graphql/user.graphql

type User {
  id: ID!
  name: String!
}

type UserList {
  list: [User!]!
}

input CreateUserInput {
  name: String!
}

type Query {
  user_list: UserList!
}

type Mutation {
  create_user(input: CreateUserInput!): User!
}

graphql 디렉토리 아래에 user.graphql파일을 생성한 후 내용을 입력해줍니다.

Query와 Mutation 타입에 정의된 내용을 바탕으로 클라이언트가 데이터를 요청하게 됩니다.

해당 type을 기반으로 request가 들어오고 response를 내려주게 됩니다.

 

 

GraphQL: API를 위한 쿼리 언어

GraphQL은 API에 있는 데이터에 대한 완벽하고 이해하기 쉬운 설명을 제공하고 클라이언트에게 필요한 것을 정확하게 요청할 수 있는 기능을 제공하며 시간이 지남에 따라 API를 쉽게 진화시키고

graphql-kr.github.io

 

 

4. gqlgen.yml

schema:
  - graphql/*.graphql

exec:
  filename: generated/generated.go
  package: generated

model:
  filename: resolver/types/types.go
  package: types

resolver:
  layout: follow-schema
  dir: resolver
  package: resolver

autobind:

models:
  ID:
    model:
      - github.com/99designs/gqlgen/graphql.ID
      - github.com/99designs/gqlgen/graphql.Int
      - github.com/99designs/gqlgen/graphql.Int64
      - github.com/99designs/gqlgen/graphql.Int32
  Int:
    model:
      - github.com/99designs/gqlgen/graphql.Int
      - github.com/99designs/gqlgen/graphql.Int64
      - github.com/99designs/gqlgen/graphql.Int32

gqlgen.yml 파일을 생성합니다.

해당 파일에는 gqlgen이 읽어갈 graphql 파일의 위치와, model, resolver가 생성될 위치를 지정하게 됩니다.

gqlgen.yml 파일을 작성한 후 아래의 명령어를 입력합니다.

$ go run github.com/99designs/gqlgen generate

1번의 패키지구조와 동일한 구조로 파일이 생성된것을 확인할 수 있습니다.

 

5. main.go

package main

import (
	"graphql-sample/generated"
	"graphql-sample/resolver"
	"log"
	"net/http"

	"github.com/99designs/gqlgen/graphql/handler"
	"github.com/99designs/gqlgen/graphql/playground"
)

func main() {
	port := "8080"
	srv := handler.NewDefaultServer(generated.NewExecutableSchema(
		generated.Config{Resolvers: &resolver.Resolver{}}))
	http.Handle("/", playground.Handler("Graphql playground", "/api/graphql"))
	http.Handle("/api/graphql", srv)
	log.Printf("http://localhost:%s for Graphql platground \n", port)
	log.Fatal(http.ListenAndServe(":"+port, nil))
}

main.go 파일을 작성합니다.

 

6. 실행 및 playground 확인

(1) 서버 실행

$ go run main.go
2022/12/07 23:27:17 http://localhost:8080 for Graphql platground

(2) playgound 확인

localhost:8080에 접속합니다. 아래의 화면이 출력되면 성공입니다.

graphql 프레임워크들은 서버의 데이터를 질의할수 있는 playground를 제공하며 postman과 비슷한 역할이라고 생각하시면 됩니다. gqlgen의 playground의 화면은 사진과 같습니다.

 

다음 게시글에서는 실제로 데이터를 질의할 수 있도록 resolver 작성 방법에 대해 정리하겠습니다.

 

[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(3)

이번 게시글에서는 resolver 작성방법과 데이터를 질의하는 방법에 대해 정리합니다. 소스코드는 아래의 github 레포에서 확인할 수 있습니다(example-2 브랜치) GitHub - jaeho310/golang-graphql-sample Contribute

frozenpond.tistory.com

 

반응형

댓글