본문 바로가기

좋아하는 것_매직IT/10.microservice

12.마이크로서비스, Atom & REST 비동기 통신은 무엇일까?

반응형

Atom 이란?

  • Atom is the name of an XML-d Web content and data syndication format, and an application-level protocol for publishing and editing Web resources belonging to periodically updated websites.    
  • 블로그에서 구독자가 접근할 수 있도록 개발된 데이터 포맷
  • Atom 포맷은 매우 유연하기 때문에 다른 타입의 데이터에도 적합함.
  • Atom 데이터 포맷을 기반으로 하는 마이크로서비스의 통합(Atom & REST)

Atom 포맷

  • Atom 문서에는 구독자가 시간 순서대로 읽을 수 있는 블로그 게시물을 포함함.
  • 블로그외에도 Atom 은 팟캐스트(Podcast)에서도 사용가능함.
  • 마이크로서비스는 새로운 주문에 대한 정보를 다른 마이크로서비스에 Atom 피드로 제공가능함.
  • 애플리케이션을 통합하기 위해 HTTP와 같은 웹 프로토콜을 사용하는 REST 접근 방법을 사용할 수 있음.

Atom 의 MIME 타입

  • HTTP기반 통신은 MIME(Multipurpose Internet Mail Extensions)타입을 사용한 콘텐츠 타입을 나타냄.
  • Atom의 MIME 타입 : application/atom+xml 

Atom 피드

  • Atom 포맷의 문서를 Atom 피드(feed)라고 함.
  • Atom 피드는 여러 컴포넌트를 포함함
  • 첫번째 Atom 피드는 메타데이터를 정의함.
  • Atom 표준에서 정의한 메타데이터
    • id 는 전역적으로 모호하지 않고 영구적인 URI임. 피드를 식별해야 하고, 목록에서 태그 URI를 통해 수행.
    • title 은 사람이 읽을 수 있는 형태의 피드 제목
    • updated는 피드가 마지막으로 변경된 시점을 포함함. 즉 새로운 데이터가 있는지 여부 확인.
    • author 도 필요함.
    • 여러 엘리먼트를 사용하는 것이 좋다고 함.
      • rel 속성 : 피드와 링크 간의 관계를 나타냄.
      • href 속성 : 실제 링크를 포함.
    • 추가 메타데이터  
      • category는 피드의 주제 영역을 특정 영역으로 좁힘.
      • contributor는 author 와 유사하게 기여한 사람들에 대한 정보를 포함.
      • generator는 피드를 생성한 소프트웨어를 나타냄.
      • icon은 작은 아이콘
      • logo는 큰 아이콘
      • rights는 저작권을 정의함.
      • subtitle은 구독자가 읽을 수 있는 피드에 대한 설명임.       

Atom 엔트리

  • 피드에 포함된 엔트리는 Atom 표준에 따라 아래 데이터로 구성되어야 함.
    • id 는 URI로서 전역적으로 모호하지 않은 식별자
    • ​​​​​​title은 사람이 읽을 수 있는 제목.
    • updated는 마지막으로 변경된 시점을 의미. 클라이언트는 특정 엔트리의 마지막 상태를 이미 알고 있는지 여부를 결정할 수 있어야 함.
    • 아래 엘리먼트가 권장됨.
      • author는 엔트리의 작성자를 의미
      • 에는 링크가 포함 가능함
      • summary는 콘텐츠의 요약.
      • content는 엔트리의 전체 콘텐츠 or 실제 콘텐츠에 대한 링크임.
      • category/contributor는 선택사항. 피드의 각 앨리먼트와 유사함.
      • published는 출간된 처음 날짜의미.
      • rights는 권한을 명시
      • source는 원본 소스의 이름 지정, 엔트리가 다른 피드의 사본인경우.

Atom 관련 툴

  • Atom 피드관련 유효성 검사 툴
  • Atom Hopper 툴
    • 참고페이지 : http://atomhopper.org/
    • 해당 툴을 사용하면 애플리케이션은 Atom 데이터를 생성할 필요가 없으며, 서버에 새로운 데이터를 게시할 수 있음.
    • 그리고 서버는 정보를 Atom으로 변환함. 클라이언트는 서버에서 Atom 데이터를 가져올 수 있음.

      

 Atom 피드 폴링

  • Atom과의 비동기 통신은 클라이언트가 서버에서 데이터를 정기적으로 요청하고 새로운 데이터를 처리하는 것으로 이뤄짐.  
  • 클라이언트는 주기적으로 피드를 읽고 피드의 updated 필드를 확인해 데이터가 변경됐는지 확인 가능. 이 경우 클라이언트는 엔트리의 updated 앨리먼트를 찾아 새로운 엔트리를 찾아서 처리할 수 있음.
  • 폴링은 피드를 생성하고 전송해야하기 때문에 시간이 오래 걸림.

 HTTP 캐싱

  • 폴링을 효과적으로 처리하는 방법은 HTTP 캐싱
  • HTTP는 HTTP 응답에서 Last-Modified 라는 이름의 헤더를 제공.
  • Last-Modified헤더는 데이터가 마지막으로 변경된 시기를 의미함.
  • 변경이 되지 않으면 서버는 HTTP 304(변경되지않음)을 상태코드로 응답함.
  • 변경되었다면, 200(OK)로 정상 응답하며, 클라이언트가 HTTP 캐싱을 다시 사용할 수 있도록 Last-Modified 헤더에 새로운 값이 전송됨.

Atom 의 데이터 전달 보장 

  • HTTP를 사용하는 Atom은 데이터 전달을 보장할 수 없음. Atom 서버는 데이터만 제공하며, 데이터 전달여부는 책임지지 않음. 

 

결론

  • Atom은 비동기 통신에서의 매우 간단한 대안.   
  • REST와 Atom 포맷을 사용하면 비동기 통신을 쉽게 구현할 수 있음.
  • HTTP는 통신 프로토콜로 사용됨.
  • HTTP는 HTTP 캐싱이 지원되기 때문에 Atom 자원의 폴링을 매우 효율적으로 구현할 수 있음.
  • 장점
    • Atom은 HTTP만 필요하지 추가 인프라를 필요로 하지 않음.
    • 필요한 경우 오래된 이벤트에 쉽게 접근할 수 있으며, 이벤트 소싱에 유리함.
    • 순서를 보장함.
    • Atom 피드는 일관성을 갖음.
  • 단점
    • Atom은 메시지 배달을 보장할 수 없다고함. 
    • 따라서 메시지가 처리되는 마이크로서비스는 멱등성을 갖도록 구현하고 메시지가 여러 번 읽혀 처리되도록 해야함.
    • Atom은 특정 마이크로서비스에 메시지를 전달할 수 있는 방법이 없음. 
      • 따라서 마이크로서비스의 인스턴스는 메시지를 처리하는 인스턴스를 선택해야함. 그렇지 않으면 멱등성에 의존해야함.
728x90
300x250