SOAP (Simple Object Access Protocol)

  • HTTP/HTTPS/SMTP 등의 프로토콜을 활용하여 메세지(XML 등)를 컴퓨터 네트워크 상에서 주고받는 프로토콜
  • 다른 언어로 다른 플랫폼에서 빌드된 애플리케이션이 통신할 수 있도록 설계된 최초의 표준 프로토콜
  • 프로토콜이기 때문에 복잡성과 오버헤드를 증가시키는 빌트인 룰을 적용하므로 페이지 로드 시간이 길어질 수 있다
  • 해당 표준은 빌트인 컴플라이언스를 제공한다.
    • 보안에 뛰어나며 DB 트랜잭션의 기본속성인 ACID를 지켜준다.
  • SOAP 구조
    • SOAP-ENV: Envelope
    • SOAP-ENV: Header
    • SOAP-ENV: Body

REST(REpresentational State Transfer)

  • REST
    • Resource의 Representation에 의한 상태 전달
    • HTTP Method를 통해 Resource를 처리하기 위한 아키텍처
  • RESTful
    • REST API를 제공하는 웹서비스
    • 구조
      • REST
      • HTTP
      • HTTP Method // HTTP Status Codes
  • HTTP Method
HTTP Method 전송 형태 설명
GET GET [request-uri]?query_string HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n GET 요청 방식은 URI(URL)가 가진 정보를 검색하기 위해 서버 측에 요청하는형태이다
POST POST [request-uri]?query_string HTTP/1.1\r\n HOST:[Hostname] 혹은 [IP] \r\n Content-Lenght:[Lenght in Bytes] \r\n \r\n [query-string] 혹은 [데이터] POST 요청 방식은 요청 URI(URL)에 폼 입력을 처리하기 위해 구성한 서버 측 스크립트(ASP, PHP, JSP 등) 혹은 CGI 프로그램으로 구성되고 Form Action과 함께 전송되는데, 이때 헤더 정보에 포함되지 않고 데이터 부분에 요청 정보가 들어가게 된다.
HEAD HEAD [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n HEAD 요청 방식은 GET과 유사한 방식이나 웹 서버에서 헤더 정보 이외에는 어떤 데이터도 보내지 않는다. 웹 서버의 다운 여부 점검(Health Check)이나 웹 서버 정보(버전 등)등을 얻기 위해 사용될 수 있다.
OPTIONS OPTIONS [request-ri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n 해당 메소드를 통해 시스템에서 지원되는 메소드 종류를 확인할 수 있다.
PUT PUT [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n Content-Lenght:[Length in Bytes] \r\n Content-Type:[Content Type] \r\n \r\n [데이터] POST와 유사한 전송 구조를 가지기 때문에 헤더 이외에 메시지(데이터)가 함께 전송된다. 원격지 서버에 지정한 콘텐츠를 저장하기 위해 사용되며 홈페이지 변조에 많이 악용되고 있다.
DELETE DELETE [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n \r\n 원격지 웹 서버에 파일을 삭제하기 위해 사용되며 PUT과는 반대 개념의 메소드이다.
TRACE TRACE [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n \r\n 원격지 서버에 Loopback(루프백) 메시지를 호출하기 위해 사용된다.
CONNECT CONNECT [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n \r\n 웹 서버에 프락시 기능을 요청할 때 사용된다.
  • post, put과 patch 차이
    • post 는 insert에 역할을 한다.
      • post와 put의 차이를 알기 위해서 멱등성을 알아야 한다.
      • 멱등성이랑 여러번 수행해도 같은 결과를 반환하는 것을 의미한다.
      HTTP Method CRUD Idempotence
      GET Read Yes
      POST Create No
      PUT Update Yes
      DELETE Delete YES
      • POST는 요청할 때마다 새로운 결과를 반환한다. 즉, 요청할 때마다 key는 다르고, 그 외 같은 데이터로 create 되어 반환되는 것
      • 그에 비해 PUT은 요청할 때마다 같은 결과를 반환한다. 즉, 해당 key값에 데이터가 동일하게 수정되어 반환되는 것
    • put, patch 모두 update에 사용된다.
    • PATCH, which is used to apply partial modifications to a resource
      • 객체에 수정하고자 하는 값만 넘겨주면 된다.
    • PUT method requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload
      • 해당 객체에 대한 모든 값이 포함되어야 한다. 없는 경우 null처리 된다.
      // put 예제 요청
      put /accounts/10
      { 
          age: 10
      }
      // put 결과
      {
          name: null,
          age: 10
      }
      // patch 예제 요청
      patch /accounts/1
      {
          age: 10
      }
      // patch 결과
      {
          name: 둘리,
          age: 10
      }
      

      ** 출처: https://devuna.tistory.com/77 튜나 개발일기

  • Resource
    • URI(Uniform Resource Identifier), 인터넷 자원을 나타내는 유일한 주소
    • XML, HTML, JSON 등이 사용
  • Richardson Maturity Model
    • A way grade your API according to the constraints of REST.
    • Level 0: The swarmp of POX
      • Expose soap web services in rest style
      • ex) http://domain/getAccount
    • Level 1: Resources
      • Expose resources with proper uri
      • ex) http://server/accounts/10
    • Level 2: HTTP Verbs
      • Level 1 + Http Method
    • Level 3: Hypermedia Controls
      • Level 2 + HATEOAS -> Data + Next possible actions by link
  • RESTful API 설계시 고려사항
    • HTTP Method의 장점을 살려라
      • Get: Select, Post: Insert, Put: Update, Delete: Delete
    • Response Status
      • 200: ok, 201: created , ..etc
      • 400: Bad Request, 401: Unauthorized(권한), 404: Not found , ..etc
    • URI
      • 보안에 위배되는 내용을 첨부해서는 안된다.
      • 데이터 타입은 복수형태로 명사를 사용하자 (account(X) -> accounts(O))
      • Endpoint를 일정하게 유지하며 HTTP Method에 따른 기능 설계를

SOAP와 REST 차이

  • Stateless
    • SOAP는 기본적으로 stateless하다. 하지만 SOAP는 Session등을 이용하여 stateful을 지원할 수 있다.
    • REST는 stateless를 강조한다. 상태의 관리는 전적으로 client에게 위임한다.
    • stateless와 stateful
      • stateful: Server와 Client간 세션의 State에 기반하여 Client에 response를 보낸다. 세션에 상태를 포함한 client와의 세션 정보를 서버에 저장하게 된다. (예: TCP)
      • stateless: server는 단순히 요청에 대한 처리만 하며 세션 관리는 client에게 있다. 즉, 서버가 client와의 세션 정보를 저장하지 않는다.(예: UDP, HTTP)
  • HTTP Method
    • SOAP는 주로 POST 를 사용하여 CRUD를 처리하며, GET을 사용하는 경우도 있다.
    • REST는 주로 HTTP 프로토콜의 GET, POST, DELETE, PATCH 등의 메서드를 사용한다.
  • caching
    • SOAP는 기본적으로 body의 해석이 필요하다. 따라서 body를 분석하여 cache의 유무를 선택적으로 적용하기 때문에 cache 구현이 상대적으로 어렵다.
    • REST는 URI, query의 정보로 데이터를 가져오며 그렇기 때문에 쉽게 cache의 사용을 쉽게 HTTP level에서 정의할 수 있다.
  • security
    • SOAP는 표준화 되어진 기준을 제공하고 있다.
    • REST는 일반적으로 client side에 정보를 맡기기 때문에 상대적으로 취약하다.