studybook
  • Introduction
  • 실무 하며 깨닫는 부분 정리
    • 옵션에 대해서
    • 코드 작성의 순서
    • 자바 프로그램에 문제가 생겼다면
    • 장애 대처법
  • Logstash, Beats 정리
  • Zookeeper 정리
  • Message Queue 정리
    • RabbitMQ 삽질
  • Java 관련 정리
    • Java Primitive Wrapper class
    • Java NIO
    • Java8 Double colon operator
    • Effective Java
      • 4장
      • 5장
      • 6장 - Enum, Annotation
      • 7장 - Method
      • 8장 - 프로그래밍 일반
      • 9장 - Exception
    • Java8 Lambda expression
    • JDBC
    • Linux에서 WatchService 이상동작
  • Spring 관련 정리
    • Spring Bean init, destroy 순서
    • Spring Async Controller
    • Spring Executable jar 웹 개발 및 배포
    • Spring Boot Font 배포 에러
    • Spring AOP
      • Spring AOP로 모든 Request 로그 남기기
    • Spring Cache
    • Spring Cloud
      • Consul로 spring 설정 관리하기
    • Spring Test
      • Spring Test DirtiesContext
      • Spring Test MockBean, SpyBean
      • Spring Test Dynamic @Scheduled
    • Spring JDBC
    • Spring Validation
    • Spring Transaction Management
      • Spring with JTA 삽질
    • Spring에서 효율적으로 Static resource 관리하기
    • Zuul을 사용해서 Spring Reverse proxy 만들기
    • Spring Security
    • 스프링 어노테이션이 안 먹힐 때 의심해볼만한 것
    • Spring Data
    • Spring Webflux
      • Tobi 강연
  • 코드 리팩토링
    • 한번에 하나씩
  • 지속적 통합 (CI)
    • Jenkins pipeline 삽질기
  • Log Aggregator 정리
    • Flume 테스트
    • Fluentd 테스트
  • Web Socket 정리
  • Akka
    • Actor 모델
    • Supervision
  • IE 8 대응 정리
  • 함수형 프로그래밍
    • 모나드
  • Netty
    • Netty 기본 예제
    • Netty 주요 특징
    • Netty 부트스트랩
    • Netty 채널 파이프라인, 코덱
    • Netty 이벤트 모델
    • Netty 바이트 버퍼
  • 스칼라 관련 정리
    • Maven으로 컴파일하기
    • Scala def 괄호 여부의 차이
    • 스칼라 function, method 차이점
    • ScalaTest와 Spring 연동하기
    • Programming in Scala
  • J2S 컨퍼런스
  • Android
    • 테스트
    • NDK
  • DDOS
  • HTTP
  • HttpClient
  • Container
    • Image 개요
    • cri-o
    • kata containers
    • Open Container Initiative Image
    • Buildkit
  • Github pages
  • Static Website
  • Webhook
  • Service Discovery Tools
    • Etcd
    • Eureka
    • Consul
      • ACL
    • 비교
  • React
    • JSX
    • React Element
    • Components, Props
    • State, Lifecycle
    • Handling Event
    • Flux
  • Vagrant
    • SSH 접속
  • Linux
    • Systemd
    • Alternatives
  • Messaging protocols
    • XMPP
    • AMQP
  • Windows
    • Windows10 내장 우분투에 ssh 클라이언트로 접속하기
    • Windows10 Hyper-V와 Virtual Box가 충돌을 일으켰을 때
    • Hyper-V 기반 docker에서 Shared Drives 설정 실패할 때
    • 윈도우 개발환경 설정
    • Docker desktop 없이 docker 환경 세팅하기
    • UWP 앱을 항상 관리자권한으로 실행하는 바로가기 만들기
  • Spring camp 2017
    • Project Reactive
    • 이벤트 소싱
    • CQRS
  • Spring webflux
  • 리액티브 프로그래밍
  • Linux Settings
    • 홈서버 백업 및 복구기
    • 홈서버 트러블슈팅
  • Kubernetes
    • k3s 설치 및 삽질
    • pod resources
    • Argo workflow
    • 트러블 슈팅
      • Kubernetes namespace의 phase가 Terminating에서 멈춰있을 때
    • 쿠버네티스 마스터
    • Knative
    • Knative Pipeline
    • Aggrerated API server
    • Accessing the API
      • Authenticating
  • Sonarqube
  • HTTP/2
  • Go
    • Go Module
    • Go dependency injection
    • Go Error handling
    • Go in Action
      • 3장 패키지
      • 4장 배열, 슬라이스, 맵
      • 5장 GO의 타입 시스템
      • 6장 동시성
      • 7장 동시성 패턴
      • 8장 표준 라이브러리
      • 9장 테스트와 벤치마킹
    • Go Channel 사용법
  • Cloud Native
Powered by GitBook
On this page
  1. Messaging protocols

AMQP

AMQ는 서버 안에서 동작하는 동적 라우팅과 queuing 모델을 의미하고, AMQP는 클라이언트 어플리케이션들이 이러한 기능을 갖춘 서버와 통신하는데 쓰는 프로토콜을 말한다.

AMQP 어플리케이션에서 exchanges은 라우팅을 수행하고, queues 들은 queuing을 수행한다. 데이터가 publisher에서 시작하여 queues를 거쳐 consumers에게 전달되는 흐름은 보통 다음과 같다. 먼저, queues를 exchanges에 bind하고 consumers들로 하여금 그 queues로부터 consume 해오도록 만든다. 이윽고 어떤 publisher가 exchanges로 publish를 수행하게 되면 queues를 통해 consumers로 데이터가 흘러가게 된다.

publisher -publish-> exchanges -bind-> queues -consume -> consumers

Centralised Messaging Servers

각 서버마다 연결을 맺게 될 경우 규모가 작을 때는 상관 없지만 규모가 커지면 커질 수록 복잡도가 기하급수적으로 증가함에 따라 여러 문제가 발생한다. 이러한 문제를 해결하기 위해 등장한 것이 바로 messaging 서버이다.

모든 서버가 서로서로 연결을 맺게 되면 n(n - 1)/2 개의 커넥션이 생성되는 반면, 한 곳으로 집중하여 연결을 맺게 되면 오직 n개의 커넥션만 필요하다.

p2p 통신을 통해 해결하려 할 수도 있겠지만 p2p 통신은 아직 검증되지 않았고, 무엇보다도 데이터의 손실을 보장할 수 있느냐는 부분의 신뢰성이 떨어져서 엔터프라이즈 환경에서는 사용하기 힘들다.

일반적으로 messaging 서버들은 여러 어플리케이션들이 동시에 쓰거나 읽을 수 있는 FIFO 자료구조의 저장소를 제공하는 편이다. AMQ에서는 이러한 데이터 저장소를 message queues라고 명명하며, 이러한 큐를 분산 네트워크 환경에서 신뢰성있고, 빠르고, 안전하며, 경제적으로 제공하는 것이 주요 목표이다.

PreviousXMPPNextWindows

Last updated 7 years ago