반응형
이번 게시글에서는 gqlgen 사용법에 대해서 정리합니다.
소스코드는 아래의 github 레포(example-1 branch)에서 확인하실 수 있습니다.
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를 내려주게 됩니다.
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' 카테고리의 다른 글
[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(마무리) (0) | 2022.12.10 |
---|---|
[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(3) (0) | 2022.12.08 |
[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(1) (0) | 2022.12.07 |
[golang] 맥북 m1칩에서 golang 크로스 컴파일 이슈 해결 방법 (0) | 2022.10.13 |
[golang] H4sIAAAAA??? (0) | 2022.09.19 |
댓글