Study/cs (computer science)

REST API/RESTful API란/Representational State Transfet API/REST 디자인패턴 쓰는 이유 #1

개발하는 주디씨 2023. 1. 3. 14:11

 

[공고] Front-end 개발자 채용

저희 회사는 HTTP, RESTful API 클라이언트를
RESTful 하게 개발할 줄 아는 사람을 찾습니다.

 

 

 

최소 3명 이상의 개발팀이 있는 회사가 프런트엔드(Front-end) 개발자를 채용할 때 조건 및 자격요건에 대부분 적혀있는 말이다. 학부 때부터 'REST API로 서비스해야 한다.', '좋으니까 써야 한다.'는 말을 종종 듣곤 했다. 하지만 누군가 나에게 REST API가 뭔데? 왜 써야 하는데?라고 묻는다면 대답할 수 없을 것 같다. 아마 대부분의 개발자들 중에서도 REST API를 정확하게 설명하고 상대를 이해시킬 정도의 개념을 알고 있는 사람이 거의 없을 것이다. 왜냐하면 그냥 "클라이언트(Client)와 서버(Server) 간 데이터를 주고받는 방식을 REST 하게 쓰는 거다."라고만 들었고 사용했고, 그 이유를 궁금해하지 않았기 때문이다. 

 

나는 왜?(Why) 써야 하는지 이해하지 못하면 기술이나 패턴 자체 개념이 이해가지 않는 병을 가지고 있다^^ 그래서 남들보다 느리게 가지만 탄탄한 길을 만들 수 있다고 생각한다. 이번에는 REST API 도대체 어떤 것인데 이렇게 필수요건이 되었는지 그 개념을 파악하고 REST API가 두렵지 않은 사람이 되는 것이 목표이다.

 

REST API

 

REST API (Representational State Transfer API)

 

REST는 Representational State Transfer의 약어이다. 2000년 로이필딩(Roy Fielding)의 박사학위 논문에서 최초로 소개되었고 당시 웹(HTTP)의 장점을 최대 활용할 수 있는 아키텍처로 REST를 발표했다. 웹에 존재하는 모든 Resourece에 고유한 URL을 부여하여 활용하는 것을 의미한다. 즉, Resource을 define 하고 Resource에 대한 adress를 지정하는 방법론이다.

 

 

 

REST API 구성요소
🔔 자원(Resource) : URL
🔔 행위(Verb) : Http Method
🔔 표현(Representation)

 

모든 자원은 고유한 ID를 가지며 ID는 서버에 존재하고 클라이언트(Client)는 각 자원의 상태를 조작하기 위해 요청을 보낸다. Client는 URL을 이용해 자원(Resource)을 지정하고 조작하기 위해 Method를 사용한다. Client가 서버(Server)로 요청(Requset)을 보냈을 때 응답(Response)하는 자원의 상태(State)를 Representation이라고 한다.

 

 

REST API 왜 써야 하는가?

 

그 이유는 이해하기 쉽고 사용하기 쉬운 API를 제작하는 데 있다. 더 나아가면 API의 이해도를 높이고 확장성과 일관적인 컨벤션을 위해서 사용한다. 확장성과 재사용성이 높아지면 유지보수 및 운용이 편리해지기 때문에 아주 강력한 특징이라고 할 수 있다. 또 HTTP 표준을 기반으로 구현하기 때문에 HTTP를 지원하는 프로그램 언어로 client와 server를 구축할 수 있기 때문에 REST API를 사용한다.

 

단, REST API를 사용한다고 해서 성능이 개선되지 않는다. 보통 코드가 간결해지고 확장성이 높고 쉽게 표현된다면 성능개선의 효과가 있는 경우도 있지만, REST API의 경우는 해당되지 않으니 주의하자. 아래 예시를 통해 REST API로 표현한 URL 정보와 그렇지 않은 예시로 더 확실히 이해해 보자.

 

 

<🛠️user 정보를 삭제하는 API>

 

1) 일반적인 URL

GET /deleteUserInfo/id?=3

 

2) REST API를 적용한 URL

DELETE /user/3

 

 

REST 6가지 원칙과 특징

 

1) Uniform Interface(유니폼 인터페이스)

URL로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행

 

2) Stateless (무상태성)

REST는 session이나 cookie 정보를 별도로 저장하고 관리하지 않기 때문에 서버는 단순히 들어오는 요청만 처리. 서비스의 자유도가 높아지고 불필요한 정보를 관리하지 않기 때문에 구현이 단순

 

3) Cacheable (캐시가능)

Http 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag로 Http의 웹표준이 가진 cashing 이 가능. 

 

4) Self-descriptiveness (자체표현구조)

REST API 메시지만으로도 쉽게 이해할 수 있는 표현 구조

 

5) Client-Server Architecture (클라이언트-서버 구조)

REST sever는 API가 제공하고 client는 context(사용자 인증이나 세션, 로그인 정보 등)을 직접 관리하는 구조로 역할이 나누어져 있어 서로 간 의존성이 낮음.

 

6) Layer Architecture (계층형 구조)

보안, 로드 밸런싱, 암호화 계층을 추가하여 구조상의 유연성을 둘 수 있고 proxy, gateway 같은 네트워크 기반의 중간매체를 사용할 수 있음.

 

 

 

RESTful 하다

 

REST에 형용사형 어미를 붙여 ~한 API라는 표현으로 사용한 것이다. 한마디로 REST의 원리를 따르는 시스템을 RESTful 이란 용어로 지칭하는 것이고, REST 아키텍처를 구현하는 웹 서비스를 말한다.

 

 

 

지금까지 REST API의 특징과 형태 원칙을 파악했다. 이걸 토대로 RESTful 하게 API를 작성하려면 어떤 방법, 어떤 디자인 패턴으로 작성해야 하는지 다음 포스팅을 통해 알아보자.

 

 


⚙️Reference  : https://restfulapi.net/http-methods/

 

HTTP Methods - REST API Tutorial

REST guidelines suggest using a specific HTTP method on a particular type of call made to the server i.e. GET, POST, PUT or DELETE.

restfulapi.net