2020. 5. 31. 22:20ㆍTutorial & Training/Go
서론
Go언어를 사용하는 Gopher 여러분들은 상당히 다수 존재하는 반면에,
Graphql은 아직까지도 한국어로 된 자료가 많지 않으며, GraphQL 대다수의 자료는 JS가 부동의 1위를...
저도 언어를 3가지를 사용하지만 graphql은 JS로 처음 접근했었습니다. 왜냐고요? JS밖에 자료가 없었거든요...
그 이후 Prisma라는 걸 알게 되었고 Prisma 자체의 한계점에 부딪혀 Prisma2를 접근했고...
Prisma2의 자체의 또 한계점을 알게 되어 삽질하다가 결국 Django + Grahpql이라는 방법을 채택했었죠.
심지어 gqlgen은 2020.05.31 기준 현재까지도 대충 gqlgen을 키워드로 검색했을 때 단 1개도 존재하지 않아서 많은 안타까움을 자아냈습니다...
저도 처음에는 굉장히 많은 선택의 고민을 했었고, 중간에도 막히는 부분에 있어 교체할까도 고민을 했었습니다.
신들린 구글링(?)으로 그 문제들을 극복했지만 추후에 언급하겠지만 해당부분은 굉장히 불편함을 나타내기도 합니다.
Go Graphql 종류
Golang을 사용하여 사용할 수 있는 GraphQL 라이브러리는 Graphql 공식 홈페이지에서도 볼 수 있지만,
- graphql-go: An implementation of GraphQL for Go / Golang.
- graph-gophers/graphql-go: An active implementation of GraphQL in Golang (was https://github.com/neelance/graphql-go).
- 99designs/gqlgen - Go generate based graphql server library.
- graphql-relay-go: A Go/Golang library to help construct a graphql-go server supporting react-relay.
- machinebox/graphql: An elegant low-level HTTP client for GraphQL.
- samsarahq/thunder: A GraphQL implementation with easy schema building, live queries, and batching.
- appointy/jaal: Develop spec compliant GraphQL servers in Go.
위 와 같이 존재합니다.
사실 graphql-go는 graphql-relay-go와 같이 쓰면 정말 좋습니다.
gqlgen도 사실 relay가 문제인데 저걸 사용하는 방법이 있는 것 같은데, 아무리 찾아봐도 저것에 대해 잘 설명해주신 분이 없어서 저는 수동 구현했습니다.... 혹시 누군가 알고 계신다면 댓글/ 방명록/ 이메일 부탁드려요!
Why gqlgen?
Go GraphQL 모듈은 상당히 다수 존재하지만, 굳이 gqlgen을 사용하는 이유로는 스키마 기반으로 작성이 가능합니다.
스키마 기반으로 작성할 경우 가져올 수 있는 이점으로는, 여타 프레임워크 예를 들면 Django에서는
models.py 에 DB Table을 명시하게 되는데 이러한 과정을 스키마를 명시한다고 할 수 있죠.
이렇게 스키마를 명시하면, 타 언어 서버나 프레임워크로 이전할 때 굉장히 편하고 알아보기 편하다고 해야 할지
그냥 공통규격으로 언어 제약 없이 사용하기 좋습니다. 좀 더 쉽게 표현하자면
언어와 서버와 프레임워크가 각기 달라도 JSON으로 소통(통신)한다면, 같은 규격이니 사용하는데 문제가 없듯이?
사실 로고는
'Tutorial & Training > Go' 카테고리의 다른 글
Django Prefetch와 비교해보는 GORM Preload에 대한 고찰 (0) | 2020.07.05 |
---|---|
#02. Go - gqlgen 프로젝트 설정하기 (0) | 2020.06.01 |
Go언어 ORM GORM의 크나큰 문제점 (0) | 2020.05.15 |
Go Gorm Preload without order by (0) | 2020.05.13 |
Go.#3 / 패키지 (0) | 2019.12.15 |