본문 바로가기
IT Tips

REST API, RESTful API 개념에 대해서 설명해 보세요~!

by 악마근육남 2022. 9. 26.
반응형

제목은 내가 윈도우 클라이언트 경력 면접에서 받았던 질문이다.

정확하게 질문은 REST API 였는데... 참... 면접을 너무 안일하게 생각했던게 나는 내가 사용하는 기술만 잘 설명할 준비만 했지 IT 프로그래밍 전반에 대한 지식은 대충 어렴풋이 개념을 아는 정도 그 이상 그 이하도 아니었다. 당연히 면접관에게 준비도 안된 개념을 설명은 커녕 입도 뻥긋 할 수 없었고 화상 면접이었지만 그 실망하는 눈빛이 면접이 끝나고도 두 달이 넘게 잊혀지지가 않아서 샤워할때마다 고통의 비명소리를 내질렀다.

그런데 나란놈이 안 될 놈이란게 그때 그렇게 고통스러워 해놓고 그 고통을 바탕으로 발전할 생각은 하지 않고 또 1년이 지나버렸다.

그래서 내가 주로 사용하는 기술은 아니지만 Programing 에서 확실하게 개념을 남에게 설명할 수 있을 정도로 알아두면 좋을만한 내용을 하나씩 정리 하고자 하며 그 시작이 내 고통의 근원 REST API 이다. 자 이제 고통을 극복할 시간이다!!!


REST API 란?

말그대로 API 인데 REST 라는 것이다. REST는 Representational State Transfer 의 약자이다.  엄격한 의미로는 REST는 네트워크 아키텍처 원리의 모음이다. 그렇기 때문에 REST는 원리를 지키는 선에서 다양하게 구현이 될 수 있고 이러한 원리를 지킨 서비스를 RESTFUL 하다고 한다. 

그렇기 때문에 REST API 의 구현방식을 물어본 질문은 REST의 조건에 대해서 물어본거나 마찬자기 였다. 

물론 내가 그것도 준비를 해놓지 않았기 때문에 개념을 알고 있었어도 대답했을리는 만무하다. 그래 이제 답변을 할 수 있을 정도로 REST 아키텍쳐의 특징 (조건) 에 대해서 알아보자면


REST의 조건

  1. 클라이언트, 서버구 및 리소스로 구성 그리고 요청이 HTTP를 통해 관리
  2. 무상태 (stateless) : 각 요청 간 클라이언트의 콘텍스트가 서버에 저장되어서는 안된다.
  3. 캐시 처리 가능 : 클라이언트-서버 사옿 작용을 간소화하는 캐시 가능 데이터
  4. 계층화 (Layered System) : 클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지를 알 수 없다. 중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상
  5. Code on demand (optional) : 자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있어야 한다 => 선택사항 입니다.
  6. 인터페이스 일관성 : 일관적인 인터페이스로 분리되어야 한다.
    1. 요청된 리소스가 식별 가능하며 클라이언트에 전송된 표현과 분리되어야 한다.
    2. 수신한 표현을 통해 클라이언트가 리소스를 조작할 수 있어야 한다.
    3. 클라이언트에 반환되는 자기 기술적 메시지에 클라이언트가 정보를 어떻게 처리해야 할지 설명하는 정보가 충분히 포함되어 있어야함
    4. 하이퍼미디어 : 클라이언트가 리소스에 액세스한 후 하이퍼링크를 사용해 현재 수행 가능한 기타 모든 작업을 찾을 수 있어야함

특징

REST API는 상기된 조건들로인해 기존의 프로토콜들 (XML, SOAP) 등 보다 사용하기 쉽고 속도가 더 빠릅니다. 따라서 사물인터넷 및 모바일 앱 개발에 사용하기 적합합니다.

아래 링크에 SOAP과 REST의 비교가 잘 정리되어 있습니다.

https://www.redhat.com/ko/topics/integration/whats-the-difference-between-soap-rest

모바일과 IoT가 네트워크 트래픽의 상당 부분을 차지해 나가고 있는 요즘 RESTFUL 한 서비사는 어떻게 보면 필 수 라고 볼 수있습니다.


구현

REST API를 완벽하게 따르는 토이 프로젝트를 진행해 보도록 하겠습니다. 진행되면 코드 까지 다 올리겠습니다.

반응형