API? RESTful API???!!!

조은·2022년 10월 25일
post-thumbnail

어느 하나를 확실히 알고 있다고 자신하기는 참 어렵다.

대충은 아는데?

정도로 알고 있으면 모른다고 봐도 무방하다. 특히 면접가면 싹 다 털린다. (경험담)

면접 가면 무조건 나온다고 봐도 무방한 CS인 API / RESTful API를 알아보자!


1. API?

프로그래밍 하다보면 밥 먹듯이 쓰고 듣는 단어인 API.
근데 솔직히 API가 뭘까요? 하면 똑 부러지게 설명할 자신이 없다.
이번 기회에 개념을 꽉 잡아보자.

1-1. API란

응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

라고 정의할 수 있다. 근데 나는 인터페이스가 뭔지 정확히 설명할 수 없어서 인터페이스도 찾아봤다.

1-2. 인터페이스란

서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면
(사람 - 컴퓨터, 컴퓨터 - 컴퓨터 등 어떤 한 시스템에 국한되는 개념이 아니다!)

으로 정의할 수 있다.

예를 들어, 우리는 컴퓨터를 사용할 때 마우스나 키보드를 통해 신호를 보낸다.
이 관계에서 마우스, 키보드가 인터페이스의 역할을 하는 것이다.


1-3. 그래서 API는?!

운영체제나 프로그래밍 언어가 제공하는 기능을 응용 프로그램에서 사용할 수 있도록 제어할 수 있게 만든 인터페이스를 뜻한다

즉, 내가 만드는 프로그램(응용 프로그램)에서 누군가가 만든 기능(운영체제나 프로그래밍 언어가 제공하는 기능)을 제어할 수 있게 하는 매개체가 API라고 설명할 수 있다.





2. RESTful API는?!

역시 정의되어있는 내용을 먼저 보자!


"REpresentational State Transfer”의 약자이고,

자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
즉, 자원(resource)의 표현(representation)에 의한 상태 전달

을 의미한다.

크게 두 가지 측면으로 나눌 수 있다!

2-1. 자원(resource)의 표현(representation)

  • 자원 : 해당 소프트웨어가 관리하는 모든 것예) 문서, 그림, 데이터, 해당 소프트웨어 자체 등

  • 자원의 표현 : 그 자원을 표현하기 위한 이름예) DB의 학생 정보가 자원일 때, ‘students’를 자원의 표현으로 정한다.



2-2. 상태(정보) 전달

  • 데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달한다.

  • JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.

  • REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.

  • REST는 네트워크상에서 Client와 Server 사이의 통신 방식 중 하나이다.

  • HTTP URI(Uniform Resource Identifier)을 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.

  • 즉, REST는 자원 기반의 구조(ROA, Resource Oriented Architecture) 설계의 중심에 Resource가 있고 URI와 HTTP Method만을 통해 Resource를 처리하도록 설계된 아키텍처를 의미한다.



2-3. RESTful API의 필요성

RESTful API를 개발하는 가장 큰 이유는

Client Side를 정형화된 플랫폼이 아닌 모바일, PC, 어플리케이션 등 플랫폼에 제약을 두지 않는 것을 목표로 했기 때문

이다.

2010년 이전만 해도 Server Side에서 데이터를 전달해주는 Client 프로그램의 대상은 PC 브라우저로 그 대상이 명확 했다. 그렇다 보니 그냥 JSP ASP PHP 등을 이용해 웹페이지를 구성하고 작업을 진행하면 됐다.

하지만 스마트 기기들이 등장하면서 TV, 스마트 폰, 테블릿 등 Client 프로그램이 다양화 되고 그에 맞춰 Server를 일일이 만다는 것이 꽤 비효율적인 일이 되어 버렸다.

이런 과정에서 개발자들은 Client Side를 전혀 고려하지 않고 메시지 기반, XML, JSON과 같은 Client에서 바로 객체로 치환 가능한 형태의 데이터 통신을 지향하게 되면서 Server와 Client의 역할을 분리하게 되었다.

  1. 최근의 서버 프로그램은 여러 웹 브라우저는 물론이며, 아이폰, 안드로이드 애플리케이션과의 통신에 대응할 수 있어야 한다.
  2. 따라서 플랫폼에 맞추어 새로운 서버를 만드는 수고를 들이지 않기 위해 범용적으로 사용성을 보장하는 서버 디자인이 필요했고 REST가 그것이다.
profile
끄적끄적....

0개의 댓글