최근 들어 REST라는 용어가 굉장히 많이 등장하고 있습니다.
웹기반 또는 일반 어플리케이션들도 REST API를 많이 사용하고 있기 때문에 최근 들어 이 솔루션과의 연동 또는 호환이 가능한가요 라는 질문을 많이 받고 있습니다.
특히 HCP나 AnyCloud 같은 솔루션은 전형적인 클라우드 기반의 오브젝트 스토리지로 REST API를 지원하고 있습니다. 때문에 REST와 SOAP에 대해 간략히 정리해 보았습니다.
(REST의 짝궁인 SOAP 과 같이 정리해 보았습니다.)
▶ SOAP과 REST(데이터 교환을 위한 프로토콜(?))
• SOAP이나 REST는 데이터 교환을 위해 고안된 것입니다. 특히 WEB 기반에서 데이터를 교환하기 위한 규칙으로 이 두 가지가 가장 널리 사용되고 있으며, 통상 HTTP 기반에서 정해진 데이터 형식과 내용을 교환하게 되므로 SOAP API 또는 REST API라고 불리고 있습니다. SOAP(Simple Object Access Protocol)란 (꼭 웹서비스만은 아니지만) 데이터를 주고받을 때 쓰는 국제표준규약을, REST(REpresentational State Transfer)는 클라이언트-서버 아키텍처 스타일을 말합니다. REST는 복잡한 전송프로토콜인 SOAP을 대신해 간단하고 뚜렷한 웹기반통신기술을 바탕으로 주창되었으며 실제 훨씬 더 많이 사용되고 있습니다. • 통상 SOAP은 보다 잘 설계되어 있고 체계적이지만, 체계화 및 등록, 확인이라는 번거로운 절차가 필요하고 데이터의 포맷이 바뀌게 되는 경우 재등록과 배포 등의 불편함이 있어, 시장에서는 보다 편리한 방식인 REST라고 하는 방식이 훨씬 널리 사용됩니다. REST는 덜 체계적이어서 사용이 편리한 반면 사용자가 일일이 지원하는 데이터의 내용과 변경되는 사항을 확인해야 하는 단점이 있습니다. • 다양한 시스템/어플리케이션/프로그램 들이 데이터를 주고 받기 위해서는 일종의 “약속”들이 존재합니다. 이를 프로토콜이라고 부릅니다. 우리가 사용하는 언어 체계와도 비슷한데 영어/한국어/중국어 등이 그 예이지요. 그러나 해당 시스템, 어플리케이션이 정해진 프로토콜을 사용한다고 하더라도 통신이 원활히 되지 않는 경우도 있습니다. 이는 한국어를 사용하는 아이와 어른이 대화를 할 때 아이의 단어 수준이 현저히 낮은 경우나 사투리 등으로 인해 이해할 수 없는 단어나 문장을 사용하는 경우 또는 동음이의어 등을 사용하는 경우 등으로 이해할 수 있겠습니다. 따라서 통신을 원활히 할 수 있기 위해서는 송수신을 위한 구조와 사용할 수 있는 어휘가 같이 정의되어 있어야 합니다. 따라서 특정 프로토콜을 지원한다 라고 되어 있는 경우, 이 어휘가 기술된 규칙과 목록 – 일종의 사전 - 을 별도로 기술하여 같이 배포하게 됩니다. 통상 이 두 가지를 합하여 API(Application Program Interface)라고 부릅니다. • 대부분의 클라우드 환경이나 오브젝트 스토리지, 분산파일시스템들은 SOAP 또는 REST API를 지원하고 있습니다. 또한 공공데이터 교환이나 데이터 배포, 다양한 서비스에서의 데이터 교환도 대부분 SOAP 또는 REST API를 지원합니다. 이는 데이터가 실제 어디에 위치하고 있는 가에 상관없이 동일한 경로로 데이터에 접근할 수 있도록 해 주기 때문입니다. 특히 클라우드 또는 빅데이터 환경에서는 데이터가 여러 개로 쪼개지거나, 분산되어 저장되거나, 이동되거나 혹은 여러 개의 복사본이 존재하게 되더라도, 어플리케이션 혹은 클라이언트에서는 “고유한 이름과 경로”를 이용하여 이 데이터에 접근하여 사용할 수 있도록 하겠다는 의미이므로 동일경로로 데이터를 제공한다는 것은 매우 중요한 개념입니다. • 즉 REST는 기술을 REST API는 REST에 기반한 데이터 전송 규칙을 의미한다고 생각하시면 쉬울 것 같습니다. 통상 제품 또는 솔루션에서 REST API를 지원한다고 얘기하는 게 그 때문이며, 이 경우 API의 명세(통상 문서로 제공)를 별도로 확인해야 합니다. • 표준이 중요하기는 하지만 실제 업계에서는 어렵고 복잡한 표준보다는 간편한 적용방식을 선호합니다. 아래 예시에서 보듯이 이미 대부분의 업계에서 SOAP과 REST를 모두 지원하는 경우도 있긴 하지만, 아예 SOAP을 배제하고 REST 만을 선택하는 업체가 늘어난다는 것을 보아도 어느 쪽이 우세인지 알 수 있을 것입니다. ü 아마존은 SOAP과 REST 서비스 모두 제공하는데 85% 정도가 REST 서비스를 사용하는 것으로 알려졌다. (2003년) ü Google은 SOAP 기술에 대해 그리 좋게 보지 않고 있으며 더 이상 SOAP API에 대한 지원을 하지 않는다. ü 야후는 현재까지 SOAP API를 제공할 계획이 없다. (http://developer.yahoo.com/faq/#soap) |
▶ REST를 지원하는 솔루션의 연동 또는 호환에 대한 답변
• REST를 지원한다? – Provider와 Requestor 구분 필요 ü 해당 솔루션이 resource requester에 해당한다면 일단 연동(데이터 교환)이 가능하다고 답하고 그 솔루션 쪽에서 HCP API(매뉴얼 기반)를 가져가서 적용하면 된다고 얘기하면 됨. 데이터는 교환되지만, API 명세를 보고 이를 맞추어 주는 작업은 필요하다는 의미임. 통상 연동(interaction)을 의미함 ü 솔루션이 Resource provider에 해당한다면 연동이 아니라 호환 여부를 확인해야 함, HCP는 resource provider(server)에 해당하기 때문임. 특히 솔루션이 오브젝트 스토리지(swift, s3, HCP 등)라면, 파일이 주 데이터가 되기 때문에 파일 그 자체에 대한 접근은 호환되겠지만, 메타정보나 기타 관리 정보, 체계 들에 대해서도(전체 기능) 완벽하게 호환된다고는 답변할 수 없음. 그러나 통상 호환된다고 답할 수 있음 ü 호환이라는 용어가 사용되는 경우는 대체적으로 지원과는 다르게 두 개 모두 Provider 또는 Requestor의 위치인 경우이며, 어떤 어플리케이션이나 솔루션이 이 여러 종류의 Provider에 동시에 접근(Access) 하거나 한쪽의 데이터가 다른 쪽으로 이관되더라도 사용하기에 용이하다 정도로 이해하는 것이 좋음 • S3와 HCP가 호환되는가?(혹은 Swift와 HCP가 호환되는가?) – 넓은 의미에서는 모두 호환 ü HCP 6.0 이후 버전에서는 “S3와 완전히 호환된다”라고 답변할 수 있음. S3와 HCP는 모두 REST 방식이지만 두 솔루션을 구성하는 Resource와 이를 이용하기 위한 체계에는 차이가 존재하였음. HCP6.0부터는 S3와 완전히 호환되는 체계(API)를 지원하며 이를 HS3라고 명칭. 즉 HCP에서 사용하는 용어를 S3와 mapping 되도록 맞추었으며, S3를 그대로 mapping해서 치환 사용할 수 있음. 이는 S3의 데이터(를 쉽게 HCP로 가져오거나 HCP의 데이터를 S3로 이관할 수 있거나(이관이므로 경로는 바뀜) S3를 지원하는 솔루션은 HCP도 그대로 사용할 수 있다는 것을 의미. HCP 7.0 부터는 HCP의 뒷단에 S3를 두고 tiering 하는 기능도 추가되었음. ü HCP와 Swift는 말 그대로 파일을 오브젝트로 관리하는 스토리지이므로, 파일에 대한 부분은 호환되지만, 메타정보나 네임스페이스 등에 대한 것은 아직 미검증. 그러나 “HCP와 Swift는 둘 다 REST 기반의 오브젝트 스토리지이므로 호환된다” 라고 말할 수 있음. ü 다시 말하지만 호환된다고 말하는 것은 말 그대로 용어와 기능이 매핑된다는 의미이며, 명칭까지 동일하다는 의미는 아님. 즉 약간의 작업이 추가될 수 있음. 통상 오브젝트 스토리지에서 호환이라고 하면 넓은 의미에서 파일경로(URI)를 통한 접근을 의미하므로 보장된다고 보아도 무방함. |
추가로 해당 내용들에 대해 좀 더 상세히 설명되어 있는 문서들에 대한 링크입니다.
여유가 되시면 같이 읽어보시면 좋을 것 같습니다.
웹서비스 : http://www.slideshare.net/guruguru/ss-14241987, http://ko.wikipedia.org/wiki/REST
SOAP : http://mjhwang.tistory.com/165, http://ko.wikipedia.org/wiki/SOAP
'개인활동 > 잡동사니팁들' 카테고리의 다른 글
SANDBOX(샌드박스) (0) | 2015.09.11 |
---|---|
CSMA/CD (0) | 2015.08.19 |
Linux 배포판 알아내기, CentOS, 우분트, 레드헷 (0) | 2013.11.06 |
ATL100.DLL ERROR (0) | 2013.08.20 |
OS 버전에 상관없이 사용가능한 스크립스 랭귀지(script language) (0) | 2012.08.12 |