티스토리 뷰
SOAP와 REST는 온라인 데이터 전송 방식이다. 둘다 웹 애플리케이션 간의 데이터 통신을 허용하는 애플리케이션 프로그래밍 인터페이스(API)를 구축하는 방법에 대해서 정의한다. REST는 아키텍처 원칙 세트고, SOAP는 공식 프로토콜이다. 가장 큰 차이점은 SOAP는 프로토콜이지만 REST는 프로토콜이 아니라는 점이다.
SOAP(Simple Object Access Protocol)
SOAP는 서로 다른 언어의 플랫폼에서 빌드된 애플리케이션이 서로 통신할 수 있도록 설계된 최초의 표준 프로토콜이다. 표준 프로토콜이기 때문에 복잡성과 오버헤드를 증가시키는 빌트인 룰을 적용하기 때문에 페이지 로드시간이 길어질 수 있다.
그러나 이러한 표준은 컴플라이언스를 제공하기 때문에 기업에서는 선호하는 방식이다. 컴플라이언스에는 보안과 안정적인 데이터베이스 트랜잭션의 기본 속성인 원자성, 일관성, 격리성, 내구성 등이 포함된다.
SOAP는 XML을 사용하여 분산처리 환경에서 정보교환을 쉽게할 수 있도록 도와주는 프로토콜이다. XML의 장점은 바로 플랫폼 종속적이지 않기 때문에 이기종간의 통신이 용이하다. 즉, SOAP는 Client가 물리적으로 연결되어있지 않은 서버에게 객체
(Object)나 함수를 호출하여 그 값을 반환받는 RPC중 하나라고 할 수 있이다.
한 문장으로 "XML과 HTTP, HTTPS, SMTP 등을 기반으로 다른 컴퓨터에 있는 데이터나 서비스를 호출하기 위한 통신 규약" 으로 정의할 수 있을 것 같다. 이러한 SOAP는 SOA(Service Oriented Architecture)의 개념을 실현하기 위한 기술이다.
SOAP은 몇 단계의 전달과정을 가지고 있는데, 먼저 Client에서 특정 작업을 요청하게 되면 중계자라는 것이 이 요청을 받고 자신이 처리할 수 있는 내용이 있는지 확인한 후 다음 중계자에게 전달한다. 이렇게 중계자를 통해 메시지의 일부를 변경해 다음 중계자에게 포워딩하거나 Actor를 만나게 되면 해당 작업을 처리하게 된다.
SOAP의 장점은 다음과 같다.
- 기존의 원격 기술대비 프록시 & 방화벽의 구애를 받지 않는다.
- 플랫폼이나 프로그램이 언어에 있어서 독립적이다.
- 에러 처리가 기본적으로 내장되어 있다.
- 분산처리 환경에서 사용하기 적합하다.
- 웹 서비스 표준이 잘 정립되어 있다.
SOAP의 단점은 다음과 같다.
- 복잡한 구조이기 때문에 어렵다.
- REST에 비해 상대적으로 무거우며 속도도 느리다.
이러한 SOAP 에서 사용하는 메시지의 구조는 다음과 같다.
그리고 이러한 SOAP 메시지는 다음과 같은 HTTP 패킷으로 구성되어 전송된다.
SOAP는 다음과 같은 구조로 동작한다. 우선, 웹 서비스 내의 모든 데이터는 XML로 표현되고, 그 데이터들과 이를 다룰 수 있는 오퍼레이션들이 WSDL로 정의되면 UDDI라는 전역적 서비스 저장소에 등록되어 누구라도 서비스를 찾을 수 있도록 공개된다.
즉, 서비스를 제공하는 사람이 UDDI라는 전역적 서비스 저장소에 API 서비스를 등록하는 것이다. 그러면 사용자들은 UDDI에 SOAP 메시지를 사용해 요청하면 누구라도 해당 서비스의 호출 결과를 돌려받게 된다.
여기서 WSDL 용어는 XML 이라고 생각하면되고, UDDI는 일종의 검색엔진이라고 보면된다. (단지 웹 표준이기에 깊게 생각하지 않아도 된다고 한다)
REST(REpresentational State Transfer)
REST는 웹 서비스와 모바일 애플리케이션 경량화의 필요에 맞춘 아키텍쳐 원칙 세트이다. 가이드라인이기 때문에 이러한 권장 사항의 구현 여부는 개발자에게 달려있다.
데이터 요청이 REST API로 전송될 때는 일반적으로 HTTP를 통해 하고, 이러한 요청을 수신한 RESTful API가 HTML, XML, 텍스트, JSON과 같은 다양한 형식의 메시지를 반환한다. JSON은 어떠한 프로그래밍 언어로든 읽을 수 있고, 인간과 기계가 모두 이해할 수 있고, 경량화되어있기 때문에 가장 선호되는 메시지 형식이다.
이러한 REST는 ROA(Resource Oriented Architecture)의 개념을 실현하기 위한 기술이다.
SOAP vs REST
데이터 포맷
SOAP는 일반적으로 JSON, XML을 사용하여 데이터를 교환하고, javascript를 통한 웹 서비스로 통신을 진행한다. 하지만 REST는 사용자가 필요한 포맷으로 주고받고 할 수 있다. 하지만 위에서 말했듯이 REST에서는 주로 JSON을 사용한다.
상태비저장(Stateless)
상태란 Application State로 Client에서 이전에 어떤 요청을 보냈는지 기억하는 것을 말한다.
SOAP 는 기본적으로 Stateless이다. 하지만 SOAP는 Session등을 이용해 stateful을 쉽게 지원한다. 하지만 REST는 stateless를 강조한다. 상태의 관리는 전적으로 Client에게 위임한다.
HTTP Method 사용
SOAP는 기본적으로 GET, POST만을 이용해 CRUD를 처리하지만, REST는 GET, POST, PUT, DELETE, PATCH 등을 적극적으로 사용한다.
캐싱
SOAP는 POST를 사용할 때 기본적으로 Request body를 해석해야 한다. 따라서 body를 분석하여 캐시의 유무를 선택적으로 적용해야하기 때문에 캐시 구현이 상대적으로 어렵다. REST는 리소스를 얻어올 때 GET을 주로 이용하며, URI, query의 정보로 데이터를 가져온다. URI만으로 전체 해석이 가능하기 떄문에 캐시 사용을 쉽게 HTTP 단계에서 정의할 수 있다.
Security
SOAP는 표준화된 컴플아이언스를 제공하고 있다. 구현하기 쉽고 많은 경우를 포함하고 있다. REST는 일반적으로 Client 쪽에 정보를 맡기기 때문에 상대적으로 취약하다. 대표적으로 사용하는 방식은 JWT(JSON Web Token) 방식을 사용한다.
이 뿐만 아니라, REST는 UDDI와 같은 중간 매체 없이 고유 URL을 통해 직접 정송하기 때문에 단순하고 속도가 빠르다. 그리고 SOAP처럼 API 호출을 위해 개발환경을 별도로 구성할 필요가 없다는 장점이 있다.
아직 정확하게 이해가 되지 않아서 설명에 많은 오류와 부족한점이 있습니다. 추후에 다시 한번 깨닫게 된다면 수정하도록 하겠습니다.
'개발 > Concept' 카테고리의 다른 글
[Git] Git 좀 세울줄 아는 남자-2 (0) | 2021.07.05 |
---|---|
[Git] Git 좀 세울줄 아는 남자-1 (1) | 2021.07.04 |
[Concept] JWT(Json Web Token)? (0) | 2021.06.06 |
[Concept] MSA (Micro Service Architecture) (0) | 2021.06.05 |
[Web] 그런 REST API로 괜찮은가? (0) | 2021.03.25 |