2020 TIL no. 1 - RESTful API의 이해

박경연 (돌진어흥이)·2020년 1월 3일
0

위코드 수료후 2주...

프로젝트를 안하니 정체가 된 느낌이다.
블로그 업데이트도 정확히 3주 안했다.
이래서는 안된다.
배웠던 개념들은 흐릿해져가고, 알고리즘에 손을 안댄지 시간이 좀 흐른것 같아
자신을 채찍질하려한다.
고로 오늘은 RESTful API의 이해라는 주제로 글을 포스팅한다

RESTful API

사실 위코드 와서 어느정도 코딩을 할줄 알게되고, 백엔드로의 진로를 정했을때쯤 배웠던 개념이고, 프로젝트를 하면서 초기에 올바로 사용하지 못했고, 나중에 가서야 그 의미를 깨닫게된 개념이다.

우선 API부터

API란 무엇인가. 나는 아직도 이 개념이 헷갈려서 찾아보곤한다. API는 Application Programming Interface의 약자로 말그대로 해석하면 어플리케이션을 프로그래밍하는데 필요한(혹은 사용되는) 인터페이스이다. 인터페이스는 네이버사전에서 찾아보면 "접속기"라는 뜻이 나오므로, 어플리케이션을 프로그래밍할때 필요한 접속기가 적절한 해석이 될 것 같다.
API의 개념에 대해서 공부하고자 할 때 가장 와닿는 개념은 다음과 같았다.
프로그래밍 언어나 운영체제가 제공하는 기능을 제어할 수 있는 도구나 환경등을 뜻하였으나, 웹에서 그 개념이 확장되어 어떤 웹페이지 혹은 프로젝트에서 제공하는 데이터를 주고 받기 위한 규격을 뜻하기도 한다.
나의 경험에 빗대어 보면, 내가 회원가입 / 로그인을 위해 django 위에서 모델을 생성하고, urls.py에서 엔드포인트를 부여하고, Views.py에서 구현했던 로직의 일련을 API라고 할 수 있는것이다.

그렇다면 REST란 무엇인가?

REST란 다음의 약자이다. REpresentational State Transfer 구상적인(표현적인?) 상태의 전달이라고 한다.... (ㅎㅎㅎㅎ)
이 약어의 해석으론 전혀 감도 오지않아 좀 더 검색해본 결과 다음과 같은 정의를 찾을 수 있었다.
HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
결국 내가 위코드에서 배운 백엔드 개발중 하나는 REST API를 프로그래밍 하는 일이었다.

나는 이미 REST API를 만들고 있었다.

나는 에어비엔비 클론코딩 프로젝트에서 데이터 베이스에 등록된 모든 방을 보여주는 API에 /rooms라는 endpoint주소를 부여하였다. 이로써 나는 URI 주소로 리소스를 구분한할 수 있어야한다는 REST API의 조건을 만족했다.
또한 해당 API는 GET메소드를 사용한다. 수행하는 작업이 데이터베이스의 INSERT나 UPDATE의 기능이 없었기 때문에, 즉 CRUD 중 Read의 기능이기 때문에 GET 메소드를 사용하였다.

정리해놓아야 할 REST API의 특성

  1. Uniform Interface
    Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 기능으로 수행하는 아키텍처 스타일을 말한다.
  2. 캐시 처리기능
    REST API는 http 통신을 기반으로 하기 때문에, http통신에서 사용되는 기능은 모두 사용될 수 있다.
  3. Statelessness(무상태성)
    각 요청 간에 클라이언트와 서버는 지속적으로 연결되어있는것이아니다. 그렇기 때문에 세션정보나 쿠키정보와 같은 상태정보를 클라에서 저장하고 있지 않다. 이로써 서버에 불필요한 정보를 저장하는 것을 줄이고, API는 요청된 정보만을 처리하면 되기 때문에 서비스의 자유도가 높아진다. 하지만 이 때문에 로그인 기능과 같은 인증 / 인가의 측면에서 문제가 발생할 수 있는데, 이를 보완하기 위해 JWT등을 사용하는 것으로 보인다
  4. Self-descriptiveness(자기 표현성)
    REST API는 URI에 사용되는 리소스를 적게 되어있다. 이를테면 이전 에서 언급한 /rooms 처럼 말이다. 이 리소스 명과 http메소드를 통해 해당 API의 기능과 용도에 대하여 설명할 수 있어야한다. 이는 Rest API의 URI가 명사여야 하는 이유이기도 하다.
  5. 계층형구조
    REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있다.
  6. 클라이언트 / 서버 구조
    REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 됩니다.
profile
Back-end Developer, pursuing to be a steadily improving person.

0개의 댓글