1. GraphQL이란?
- 페이스북에서 만든 어플리케이션 레이어 쿼리 언어이다.
- 기존에 우리가 흔히 사용하는 RESTful API의 단점을 보안(?)하는 API를 위한 쿼리 언어이다.
- 타입(Type) 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임이다.
목적 : 웹 클라이언트가 필요한 데이터를 서버로 부터 효율적으로 가져오는 것을 목표를 가진다.
Flow
클라이언트 → GraphQL-kotlin-server(/graphql or /playground) → spring boot → database
서버사이드 gql 어플리케이션은 gql로 작성된 쿼리를 입력으로 받아 쿼리를 처리한 결과를 다시 클라이언트로 돌려준다.
gql도 REST API처럼 특정 DB나 플랫폼에 종속적이지 않은 것처럼 동일하게 종속적이지 않다. 심지어 네트워크 방식도 종속적이지 않다.
2. REST와 RESTful이란?
1. REST란?
- REST는 REpresentational State Transfer의 약자로 자원(Resource)을 **이름(URI)**으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다.
즉, 자원(Resource)의 표현(representation)에 의한 상태(Data) 전달을 의미한다.
자원(Resource)의 표현(representation)
- 자원: 해당 소프트웨어가 관리하는 모든 것
- → Ex) 문서, 그림,데이터, 해당 소프트웨어 자테 등
- 자원의 표현: 그 자원을 표현하기 위한 이름
- → Ex) DB의 학생 정보가 자원일 때, 'students'를 자원의 이름(표현)으로 정한다. 이렇게 명세된 정보를 이용하여 Client는
/students
또는 /students/:id
형태로 요청을 하게 되면 해당 Resource의 상태(정보) 값을 전달 받는다.
상태(정보) 전달
- 데이터가 요청되는 시점에서 자원의 상태(정보)를 전달한다.
- JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.
모든 Resource들을 각각의 Endpoint에 연결해놓고, 각 Endpoint는 연결된 Resource와 관련된 내용만 관리하게 하자는 방법론을 말한다.