GraphQL을 이용한 서비스를 계획하며 연습했던 Todo 중 중요한 부분을 정리한 것입니다.
이 글은 GraphQL서버를 Go 언어로 구현하여 Postgre와의 간단하게 연동하는것을 목표로 합니다.
데이터베이스를 쿼리를 사용하지 않고 코드와의 연동을 위하여 ORM을 사용합니다.
프로젝트에 사용된 ORM은 go-pg
입니다.
// 모델 정의
type Default struct {
ID int64 `json:"id,omitempty"`
CreatedAt time.Time `sql:"default:now()"`
DeletedAt time.Time `pg:",soft_delete"`
UpdatedAt time.Time
}
type Todo struct {
tableName struct{} `sql:"todo" json"omitempty"`
Default
Todo string `json:"todo"`
Priority int64 `json:"priority"`
}
......
// 테이블 생성
err := db.CreateTable(model, orm.CreateTableOptions{
FKConstraints: true,
})
다음줄을 실행하여 GraphQL Go 패키지를 설치합니다.
go get github.com/graphql-go/graphql
패키지에 대한 더 많은 정보는 프로젝트의 GitHub페이지에서 얻을수 있습니다.
ORM을 사용하면 모델과 데이터베이스를 맵핑하여 사용할수 있었습니다. 하지만 GraphQL 패키지는 ORM과는 다르게 사용하려면 GraphQL에서 사용할 타입(필드)을 정의해줘야 합니다.
func (*Todo) GrapqlType() *graphql.Object {
return graphql.NewObject(graphql.ObjectConfig{
Name: "Todo",
Fields: graphql.Fields{
"id": graphql.Field{
Type: graphql.String,
},
"todo": graphql.Field{
Type: graphql.String,
},
"priority": graphql.Field{
Type: graphql.String,
},
},
})
}