반응형
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로서 전역적으로 모호하지 않은 식별자
- 해당 URI는 tag URI로 전역적으로 모호하지 않은 식별자를 위한 태그 URI 임.
- 참고페이지 : https://en.wikipedia.org/wiki/Tag_URI_scheme
- title은 사람이 읽을 수 있는 제목.
- updated는 마지막으로 변경된 시점을 의미. 클라이언트는 특정 엔트리의 마지막 상태를 이미 알고 있는지 여부를 결정할 수 있어야 함.
- 아래 엘리먼트가 권장됨.
- author는 엔트리의 작성자를 의미
- 에는 링크가 포함 가능함
- summary는 콘텐츠의 요약.
- content는 엔트리의 전체 콘텐츠 or 실제 콘텐츠에 대한 링크임.
- category/contributor는 선택사항. 피드의 각 앨리먼트와 유사함.
- published는 출간된 처음 날짜의미.
- rights는 권한을 명시
- source는 원본 소스의 이름 지정, 엔트리가 다른 피드의 사본인경우.
- id 는 URI로서 전역적으로 모호하지 않은 식별자
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
'좋아하는 것_매직IT > 10.microservice' 카테고리의 다른 글
15.마이크로서비스, 컨설과 아파치 httpd서버를 이용한 동기 마이크로서비스 시스템을 알아보자. (0) | 2021.01.12 |
---|---|
14.마이크로서비스, 넷플릭스 스택에 대해서 알아보자. (0) | 2021.01.12 |
11.마이크로서비스, 카프카에 대해서 알아보자. (0) | 2021.01.12 |
10.마이크로서비스, 메시지 지향 미들웨어(MOM)란? (0) | 2021.01.12 |
9.마이크로서비스, 비동기 통신이란? (0) | 2021.01.12 |