Common REST, REST API, RESTful [2]

황제낙엽 2021.01.11 15:16 조회 수 : 91098

sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
extra_vars6  

REST(Representational State Transfer)

REST(Representational State Transfer)란 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다.

즉, 자원(resource)의 표현(representation)에 의한 상태 전달을 말합니다.

REST는 ROA(Resource Oriented Architecture)를 따르는 웹 서비스 아키텍쳐입니다.

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

 

    REST CRUD Operation​

        ▶ Create : 생성(POST)

        ▶ Read : 조회(GET)

        ▶ Update : 수정(PUT)

        ▶ Delete : 삭제(DELETE)

    ​쉽게 말하자면 "URI와 HTTP 메소드를 이용해 객체화된 서비스에 접근하는것"이라고 말할 수 있습니다.

    직관적인 URI를 이용해서 오브젝트의 멤버를 추적하는 것처럼 리소스에 접근하여 HTTP 메소드를 이용해 그것을 조작하는 것입니다.

 

    REST의 특징

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

            자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 됩니다.

            REST Server는 API를 제공하고 비즈니스 로직 처리 및 저장을 책임지고, Client는 사용자 인증이나 context(세션, 로그인 정보) 등을 직접 관리하고 책임집니다.

            또한 REST를 사용하면 서버와 클라이언트 간 의존성이 줄어듭니다.

        ▶ Stateless(무상태)

            이전, 이후에 대한 직접적인 정보가 필요없이 직관적인 오브젝트에의 접근으로 서비스를 처리합니다.

            세션정보를 보관할 필요가 없기 때문에, 서비스의 자유도 또한 높아지고 로드밸런싱이라든지 기타 유연한 아키텍처의 적용이 가능며, 쿠키와 세션이 필요없습니다.

        ▶ Cacheable(캐시 처리 가능)

            웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있습니다.

            캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상시킬 수 있습니다.

        ▶ Layered System(계층화)

            Client는 REST API Server만 호출합니다.

            REST Server는 다중 계층으로 구성될 수 있습니다.

            PROXY, 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있습니다.

        ▶ Addressability(URI 접근)

            REST는 모든 유일한 오브젝트에 대해 유일하고 직관적인 URI을 통해 접근하도록 합니다.

            웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여합니다.

        ▶ Uniform Interface(인터페이스 일관성)

            URI로 지정한 리소스 조작을 통일되고 한정적인 인터페이스로 수행합니다. 

 

    REST의 장점

        ▶ HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없습니다.

        ▶ HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 사용할 수 있습니다.

        ▶ HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능합니다.

        ▶ Hypermedia API의 기본을 충실히 지키면서 범용성을 보장합니다.

        ▶ REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있습니다.

        ▶ 여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화합니다.

        ▶ 서버와 클라이언트의 역할을 명확하게 분리합니다.

 

    REST의 단점

        ▶ 표준이 존재하지 않습니다.

        ▶ 사용할 수 있는 메소드가 4가지 밖에 없습니다.

        ▶ HTTP Method 형태가 제한적입니다.

        ▶ 구형 브라우저가 지원해주지 못하는 부분(PUT, DELETE, pushState)이 존재합니다.

 

    REST가 필요한 시점

        ▶ 애플리케이션 분리 및 통합을 해야할 때

        ▶ 다양한 클라이언트들이 등장 했을 때

        ▶ 다양한 브라우저, 안드로이폰, 아이폰과 같은 모바일 디바이스에서도 통신 가능한 서버 프로그램이 필요할 때

        ▶ 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처가 필요할 때

 

 

REST API

REST 기반으로 서비스 API를 구현한 것을 REST API라고 말합니다.

최근 OpenAPI(누구나 사용할 수 있도록 공개된 API: 구글 맵, 공공 데이터 등), 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처) 등을 제공하는 업체 대부분은 REST API를 제공합니다.

 

​    REST API의 특징

        ▶ 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있습니다.

        ▶ REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있습니다.

        ▶ REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있습니다.

 

 

RESTful

RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어입니다.

‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있습니다. 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭됩니다.

 

    RESTful의 목적

    이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이 목적입니다.

     RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 목적입니다.

 

    RESTful하지 못한 경우

        ▶ CRUD 기능을 모두 POST로만 처리하는 API

        ▶ 라우트(route)에 resource, id 외의 정보가 들어가는 경우(/books/updateName)

 

 

레퍼런스(Reference)

    https://ko.wikipedia.org/wiki/REST

    https://www.redhat.com/ko/topics/api/what-is-a-rest-api

    https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

 

 

 

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 2023 Software Development Trend 정리 황제낙엽 2024.01.19 1
» REST, REST API, RESTful [2] 황제낙엽 2021.01.11 91098
147 Character Entity Set(s) 황제낙엽 2013.06.24 55402
146 엑셀(excel)에서 16진수 -> 10진수 변환 file 황제낙엽 2017.08.29 4294
145 설치형 블로그, 위키, 게시판 모음 황제낙엽 2006.09.20 4131
144 반올림하는 두 가지 방법 (Round-off(사사오입), Round-to-nearest-even(오사 오입)) file 황제낙엽 2019.08.27 1335
143 notepad2 에서 문서내의 일부 문자열의 byte 크기 알아내기 file 황제낙엽 2018.03.29 1203
142 부동소수점 연산에 관한 정리 황제낙엽 2018.03.26 1040
141 컴퓨터는 음수를 2의 보수법으로 표현한다 file 황제낙엽 2016.10.24 753
140 효과적인 모바일 애니메이션 응용예 file 황제낙엽 2018.03.30 671
139 2020 클라우드 정리 - cloud, aws, azure, gcp, iaas, paas, saas 황제낙엽 2020.04.05 664
138 XQL 황제낙엽 2003.07.10 576
137 아웃룩(Outlook 2010) 메일 보관 경로(.pst) 변경과 백업/복구 file 황제낙엽 2009.12.28 504
136 2019년 웹 프레임워크 인기 순위 file 황제낙엽 2020.04.06 470
135 음성인식서비스 개발을 위한 음성 API 모음(STT API) 황제낙엽 2019.04.28 465
134 자료구조 Part1. "동적배열"의 모든 것. 황제낙엽 2007.11.24 431
133 소프트웨어 개발 환경 갖추기 황제낙엽 2006.09.21 408
132 사랑비 BGM 보안 취약점 황제낙엽 2008.08.02 405
131 Web 2.0이란 무엇인가 : 다음 세대 소프트웨어를 위한 디자인 패턴 및 비즈니스 모델(2) 황제낙엽 2007.11.20 383
130 변수를 unsigned int형 선언 0xffffffff 할당 결과가 -1이 되는 이유는? 황제낙엽 2016.10.24 376
129 EULA (End User License Agreement) ; 소프트웨어 사용자 라이선스 계약 황제낙엽 2015.06.26 368