1. 데이터 통신
1-1. HTTP 통신
- HTTP란 웹에서 데이터를 전송하는 데 사용되는 프로토콜로, 클라이언트(주로 웹 브라우저)와 서버 간의 통신을 정의

- 서로 요청(request)과 응답(response)을 주고 받으면서 통신한다.
1-2. Request & Response
HTTP 요청(Request)
- 클라이언트가 서버에 정보를 요청할 때 전송되는 메시지를 요청이라 한다.
구성품
- 메서드
1. GET: 정보를 가져오고 싶을 때 사용한다.
2. POST: 새로운 정보를 서버에 보내고 싶을 때 사용한다.
3. PUT: 서버에 있는 데이터를 수정할 때 사용한다.
4. DELETE: 서버에 있는 데이터를 삭제할 때 사용한다.
- URL: 요청하고 싶은 정보의 주소(https://example.com/users는 "사용자" 정보를 요청하는 주소)이다.
- 헤더: 추가 정보를 담고 있는 곳이다. 예를 들어, 요청하는 사람의 정보를 담은 "사용자 에이전트" 같은 것이 있을 수 있습니다.
HTTP 응답(Response)
- 서버가 클라이언트의 요청에 대해 보내는 메시지를 응답이라 한다.
구성품
- 200 ~ (Suxxessful): 요청이 성공했다는 의미
- 300 ~ (Redirection): 요청한 리소스가 다른 위치로 이동되었음을 나타냄
- 400 ~ (Client Error): 클라이언트의 잘못된 요청을 의미
- 500 ~ (Server Error): 서버 측의 문제를 나타냄
-
헤더: 응답에 대한 추가 정보(데이터의 형식(HTML, JSON 등))를 포함한다.
-
본문: 요청한 데이터가 실제로 포함된 부분이다. (사용자 정보가 담긴 JSON 데이터일 수 있습니다)
1-3. API
- API는 소프트웨어 간의 대화 방법이라고 생각하면 된다. 우리가 원하는 정보를 얻거나 특정 작업을 수행하기 위해 다른 프로그램(주로 서버)에게 요청을 보내는 방식입니다.
API와 함수의 관계
-
API는 Back-end 개발자가 만든 함수와 같다.
-
입력(인자)과 출력(return 데이터)이 있다.
-
요청할 때 보내는 데이터는 API 함수의 입력이다. ex) 프로필 데이터의 이름, 나이, 이메일 등
-응답으로 받는 데이터는 API 함수의 출력이다. ex)"프로필이 성공적으로 저장되었습니다!" 메시지 리턴
2. RestAPI vs GraphQL
2-1. RestAPI
- REST(Representational State Transfer)는 웹 기반의 아키텍처 스타일로 HTTP 프로토콜을 이용하여 클라이언트와 서버 간의 상호작용을 정의한다.
- RESTful API는 이러한 아키텍처 스타일을 따르는 API
특징
- 자원 기반: 모든 자원(데이터)은 URI로 식별되며, 자원에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행한다.
- HTTP 메서드: 요청의 목적에 따라 GET(읽기), POST(생성), PUT(수정), DELETE(삭제) 메서드를 사용한다.
- 상태 없음(Stateless): 각 요청은 독립적이며, 서버는 클라이언트의 상태를 저장하지 않고 모든 필요한 정보는 요청에 포함되어야 합니다.
- 표준화된 응답: 일반적으로 JSON 형식으로 데이터를 반환하며, 응답에는 상태 코드와 헤더 정보가 포함된다.
2-2. GraphQL
- GraphQL은 Facebook에서 개발한 쿼리 언어로, API의 데이터 요청을 보다 유연하게 처리할 수 있도록 설계되었다.
- 클라이언트는 필요한 데이터를 명시적으로 요청할 수 있다.
특징
- 단일 엔드포인트: 모든 요청이 하나의 엔드포인트(예: /graphql)로 전송되며, 클라이언트는 원하는 데이터의 구조를 쿼리로 정의한다.
- 유연한 데이터 요청: 클라이언트는 필요한 데이터 필드만 선택할 수 있어, 데이터 전송량을 최소화할 수 있다.
- 강력한 타입 시스템: 스키마를 사용하여 API의 데이터 타입을 명확히 정의하고, 이를 통해 클라이언트와 서버 간의 계약을 설정한다.
2-3. 서로의 장단점
RestAPI: 단순하고 직관적인 구조
장점
- 간단하고 직관적: REST API는 HTTP 메서드(GET, POST, PUT, DELETE)를 사용하여 자원에 대한 CRUD 작업을 수행하므로 이해하기 쉽고 직관적이다.
- 캐싱 용이: REST API는 HTTP 프로토콜을 기반으로 하기 때문에 웹 캐싱 기능을 활용할 수 있다. 이를 통해 서버의 부하를 줄이고 응답 시간을 단축할 수 있다.
단점
- 비효율적인 데이터 전송: 클라이언트가 필요로 하지 않는 데이터도 함께 전송되는 경우가 많아, 데이터 전송량이 불필요하게 증가할 수 있다.
- 엔드포인트 증가: 여러 자원을 다루기 위해 많은 엔드포인트가 필요해지기 때문에 관리가 복잡해질 수 있다.
GraphQL: 클라이언트의 유연한 데이터 요청
장점
- 유연한 데이터 요청: 클라이언트는 필요한 데이터의 구조를 명시적으로 요청할 수 있어 불필요한 데이터 전송을 줄이고 네트워크 효율성을 높일 수 있다.
- 단일 엔드포인트: 모든 요청이 단일 엔드포인트를 통해 이루어지기 때문에 관리가 용이하고, API의 구조가 간단해진다.
단점
- 복잡성 증가: 클라이언트가 요청할 수 있는 데이터의 구조가 다양해지므로, 쿼리 복잡성이 증가할 수 있고, 이로 인해 클라이언트와 서버 간의 조율이 필요할 수 있다.
- 캐싱 어려움: REST API는 HTTP 캐싱을 쉽게 적용할 수 있지만, GraphQL은 클라이언트가 다양한 쿼리를 보낼 수 있기 때문에 캐싱이 더 복잡해질 수 있다.