본문 바로가기
IT/Web

[GraphQL] Architecture Pattern

by 물통꿀꿀이 2019. 3. 16.

GraphQL을 접목해서 사용하는 방식은 시나리오에 따라 다양하다. 그렇지만 이번 포스팅에서는 일반적으로 널리 사용되는 3가지 아키텍쳐 패턴에 대해 알아보려고 한다.


그림 1. GraphQL server with a connected database


그림 1은 첫 번째 GraphQL 사용 패턴을 보여준다. 웹 서버에 GraphQL을 올려서 클라이언트의 요청을 받는 방식이다. 즉, 서버에서는 클라이언트의 Query 요청을 받아 Query의 페이로드를 읽고 관련 정보를 데이터베이스로부터 가져온다.


그림 2. GraphQL layer that integrates existing systems


그림 2는 GraphQL을 기존의 레거시 시스템과 연동하는 방식이다. 즉, GraphQL이 클라이언트로 부터 Query 요청을 받아 해석한 뒤 기존의 레거시 시스템에 있는 데이터베이스에 데이터를 요청하는 것이다.

일반적으로 새로운 제품을 만들 때 레거시 시스템은 큰 부담으로 다가오는데 (비용 및 유지보수 등등의 측면에서) GraphQL을 레거시 시스템의 Proxy로 연결하면서 클라이언트의 요청에 유동적으로 대응 할 수 있도록 하였다. 어떻게 보면 그림 1의 단일 환경을 멀티 환경으로 바꾼 것에 불과 할 수 있지만 GraphQL이 서버와 같은 인스턴스가 아니라 독립적으로 따로 존재한다는 것이 큰 차이이다.


그림 3. Hybrid approach with connected database and integration of existing system


그림 3은 그림 1과 2의 하이브리드 형태이다. GraphQL의 위치가 Proxy 역할을 하면서 동시에 서버 인스턴스에 함께 포함되어 있다. 동작 방식은 그림 2와 비슷하다. 클라이언트로부터 요청을 받으면 관련 데이터를 찾기 위해 연결된 데이터베이스에 요청한다.


여기서는 3가지 패턴을 소개했지만 더 많은 패턴이 존재 할 수 있다. 그렇지만 중요한 것은 전체 흐름은 "사용자 - GraphQL - 데이터베이스" 이다. 단순하게 사용자의 요청을 받아 Query를 해석하고 데이터베이스로부터 데이터를 찾아 전달하는 것 뿐이다. 때문에 아키텍처가 복잡해도 개념은 간단하다.


참조

https://www.howtographql.com/basics/3-big-picture/

'IT > Web' 카테고리의 다른 글

[GraphQL] SDL (Schema Definition Language)  (0) 2019.03.16
[GraphQL] Overview  (0) 2019.03.15
Golang Web Framework 비교  (0) 2018.08.06

댓글