본문 바로가기
서버/REST API

RESTful API가 필요한 이유

by whale in milktea 2023. 3. 4.

용어 및 관계 정리

먼저 HTTP, RESTful API, AJAX 이 3가지 서버와 관련된 통신들이 너무나 헷갈리기에 이에 관해 먼저 정리하고 각 개념을 카테고리로 묶어 정리하고자 한다.

HTTP HTTP는 인터넷에서 데이터를 전송하는데 사용되는 프로토콜이다. 

* 프로토콜(Protocal) : 2개 이상의 컴퓨터가 서로 데이터를 주고 받을 때 (통신할 때), 사용되는 규칙 혹은 규약이다.

즉 HTTP는 아주 단순하게 2개 이상의 컴퓨터가 통신할 때 규칙이나 규약이 정해져 있지 않고 제각기 통신하게 되면 이를 분석하고 핵심 내용을 파악하는데 시간이 너무 오래걸리거나 혹은 통신이 불가능해지기 때문에 "인간"이 규칙이나 약속을 정해놔서 원활하게 통신할 수 있도록 정해놓은 것이다.
RESTful API RESTful API는 HTTP 프로토콜을 기반으로 하는 웹 서비스 아키텍쳐 스타일 중 하나다.

즉, HTTP를 기반으로 한 웹 서비스 아키텍쳐 스타일은 이 외에도 다양할 것이지만(client-server architecutre/microservice architecture etc...), 가장 효과적인 모형이 RESTful API이기에 이를 채택하는 것이다.

* 웹 아키텍쳐 스타일 : HTTP 메소드(GET, PUT, POST, DELETE, OPTION 등)를 활용하여 서버와 클라이언트가 통신하는 모형
AJAX AJAX는 클라이언트에서 비동기로 서버와 통신하며 데이터를 가져오는 기술이다.

AJAX의 주요한 특징으로는, 1) 비동기로 서버와 통신한다. 2) 리렌더링 없이 서버에서 가져온 데이터를 반영할 수 있다. 는 2가지로 볼 수 있다.

즉, AJAX는 실제 코드에서 통신규약과 모형을 반영한 통신기술을 구현한 것으로 이해할 수 있다.

 

참조 글 : https://aws.amazon.com/ko/what-is/restful-api/

참조강의 : https://www.youtube.com/watch?v=4DxHX95Lq2U&ab_channel=%EB%85%B8%EB%A7%88%EB%93%9C%EC%BD%94%EB%8D%94NomadCoders 

 

1. Restful API가 없다면?

## restful api가 없다면?

## HTTP Create 기능을 수행하는 함수명들
generateList(){}
createList(){}
produceList(){}
...

## HTTP Read 기능을 수행하는 함수명들
getList(){}
loadList(){}
callList(){}
...

## HTTP Update 기능을 수행하는 함수명들
renewList(){}
refreshList(){}
upgradeList(){}
updateList(){}
...

## HTTP Delete 기능을 수행하는 함수명들
deleteList(){}
removeList(){}
eraseList(){}
clearList(){}
...

이와 같은 메서드들이 단순히 한 프로젝트 내부에서 사용되는 것이라면 별 문제가 없겠으나, 어떤 컴퓨터에서 처리되는지도 특정할 수 없는 협업개발환경에서는, 특히 클라이언트와 서버가 규약을 통해 통신하는 상황에서는 상당한 어려움을 겪게 된다. 이러한 문제를 해결하기 위해 Restful API 개념은 다음과 같은 약속을 통해 특별한 모형을 만들었다.

 

2. Restful API의 특징 3가지

1. URL을 사용한다. why? 만국공통이기 때문에!
2. HTTP 메서드를 사용한다.why? 만국공통이기 때문에!
3. 동사를 제거하고 명사를 사용한다. why? 동작이 아닌 주고받는 데이터를 명확히 특정하기 위해서!

 

3. 예시 => List의 업데이트

  function () {
    return fetch(`url/list`, {
    // url 중 list에 해당하는 경로로 작업을 요청할 것
      method: 'POST',
      // HTTP 프로토콜 중 POST에 해당하는 요청을 보낼 것
      body : JSON.stringify()
      // 데이터는 JSON 형식으로 주고받을 것 => 이후 JSON을 문자열로 변환하여 받을 것
    })
  }