wannaqueen
  • Initial page
  • Spring boot
    • 스프링부트의 소개
      • 8. 스프링 부트 소개 by ks
      • 9. 시스템 요구사항 by ks
      • 10. 스프링 부트 설치 by ks
      • 11. 첫 번째 Spring Boot 애플리케이션 개발하기 by ys
        • 11.1 POM 만들기
        • 11.2 클래스 패스 의존성 추가하기
        • 11.3 코드 작성하기
        • 11.4 예제 실행하기
        • 11.5 실행 가능한 jar 만들기
      • 12. 다음에 읽을 내용 by ys
      • 13. 빌드 시스템 by sh
        • 13.1 의존성 관리
        • 13.2 Maven
        • 13.3 Gradle
        • 13.4 Ant
        • 13.5 Starters
    • 스프링부트의 기능
      • 23. Spring Application by ys
        • 23.1 startup 실패
        • 23.2 배너를 내가 원하는 대로 바꾸기
        • 23.3 SpringApplication 커스터마이징하기
        • 23.4 Fluent Builder API
        • 23.5 어플리케이션 이벤트와 리스너들
        • 23.6 웹 환경
        • 23.7 Application 인자에 접근하기
        • 23.8 ApplicationRunner 또는 CommandLineRunner 사용
        • 23.9 어플리케이션 종료
        • 23.10 관리자 기능
      • 24. 외부화된 구성 by ys
        • 24.1 임의의 값 구성
        • 24.2 명령행 특성 액세스
        • 24.3 응용 프로그램 속성 파일
        • 24.4 프로파일 관련 프라퍼티들
        • 24.5 프라퍼티들에서 플레이스홀더들
        • 24.6 속성의 암호화
        • 24.7 속성대신 yaml 사용하기 - 다시
        • 24.8 Type-safe Configuration Properties
      • 25. 프로파일 by ks
        • 25.1 Active 프로파일 더하기
        • 25.2 프로그램적으로 프로파일 세팅
        • 25.3 프로파일 별 구성파일
      • 26. 로깅 by ks
        • 26.1 로그 형식
        • 26.2 콘솔 출력
        • 26.3 파일 출력
        • 26.4 로거 레벨
        • 26.5 로그 그룹
        • 26.6 사용자 정의 로그 설정
        • 26.7 로그백 확장
      • 27 국제화 by ks
      • 28. SQL 데이터베이스 작업 by sh
      • 29. NoSQL 기술 사용 by sh
      • 30. 메시징 by sh
      • 31. 이메일 전송 by sh
      • 28. JSON by sh (다시 시작!)
        • 28.1 Jackson
        • 28.2 Gson
        • 28.3 JSON-B
      • 29. 웹 응용 프로그램 개발 by sh
        • 29.1 The “Spring Web MVC Framework”
        • 29.2 The “Spring WebFlux Framework”
        • 29.3 JAX-RS and Jersey
        • 29.4 내장된 서블릿 컨테이너 지원
        • 29.5 내장된 반응형 서버 지원
        • 29.6 반응형 서버 리소스 구성
      • 30. Security by ys
        • 30.1 MVC 보안
        • 30.2 WebFlux 보안
        • 30.3 OAuth2
        • 30.4 Actuator 보안
      • 31. SQL 데이터베이스 작업 by ys
        • 31.1 Configure a DataSource
        • 31.2 JdbcTemplate 사용
        • 31.3 JPA와 스프링 데이터 JPA
        • 31.4 스프링 데이터 JDBC
        • 31.5 H2의 웹 콘솔 사용
        • 31.6 jOOQ 사용하기
      • 32. NoSQL 기술로 작업하기 by ks
      • 33 Caching by ks
      • 34. 메시징
        • 34.1 JMS by sh
        • 34.2 AMQP by sh
        • 34.3 Apache Kafka Support by ys
      • 35.REST 서비스 호출 RestTemplate
        • 35.1 RestTemplate 사용자 정의
      • 36. REST 서비스 호출 WebClient by ys
      • 37. 유효성 확인 by ys
      • 38. 이메일 보내기 by ys
      • 39. JTA를 이용한 분산 트랜잭션 by ys
      • 40.하젤캐스트(Hazelcast) by ys
      • 41. Quartz Scheduler by ys
      • 42. 작업 실행 및 스케줄링 by ys
      • 43. 스프링 통합 by ys
      • 44. Spring 세션 by ys
      • 45. JMX를 통한 모니터링 및 관리 by ys
      • 46. Testing by sh
        • 46.3 Testing Spring Boot Applications
          • 46.1~46.3.10
          • 46.3.11 자동 구성된 Spring WebFlux 테스트
          • 46.3.12 자동 구성된 Data JPA 테스트들
          • 46.3.13 자동 구성된 JDBC 테스트들
          • 46.3.14 자동 구성된 Data JDBC 테스트들
          • 46.3.15 자동 구성된 JOOQ 테스트들
          • 46.3.16 자동 구성된 Data MongoDB 테스트들
          • 46.3.17 자동 구성된 Data Neo4j 테스트
          • 46.3.18 자동 구성된 Data Redis 테스트들
          • 46.3.19 자동 구성된 Data LDAP 테스트들
          • 46.3.20 자동 구성된 REST 클라이언트
          • 46.3.21자동 구성된 Spring REST Docs 테스트
          • 46.3.22 추가적인 자동 구성 및 슬라이스
          • 46.3.23 사용자 구성 및 분할
          • 46.3.24 Spock을 사용하여 스프링 부팅 응용 프로그램 테스트
      • 47. 웹 소켓 by sh
      • 48. 웹 서비스 by sh
        • 48.1WebServiceTemplate로 웹 서비스 호출하기
      • 49. 자신만의 자동 구성 생성
        • 49.1 자동 구성된 빈 이해하기 by sh
        • 49.2 자동 구성 후보 찾기 by sh
        • 49.3 Condition 어노테이션들 by sh
        • 49.4 자동구성 테스팅 by ks
        • 49.5 자신만의 스타터 생성하기 by ks
      • 50. Kotlin support by ys
      • 51. What to Read Next by ys
      • 52. Production-ready 기능 활성화 by ys
      • 53. Endpoints
        • 53.1 엔드 포인트 활성화 by ys
        • 53.2 엔드 포인트 노출 by ys
        • 53.3 HTTP endpoints 보안 by ys
        • 53.4 Endpoints 구성
        • 53.5 액츄에이터 웹 엔드 포인트 용 하이퍼 미디어 by ys
        • 53.6 CORS 지원 by ys
        • 53.7 커스텀 엔드포인트 확장 by ks
        • 53.8 Health 정보 by ks
        • 53.9 어플리케이션 정보 by sh
      • 54. HTTP를 통한 모니터링 및 관리 by sh
        • 54.1 관리 엔드 포인트 경로 사용자 정의
        • 54.2 관리 서버 포트 사용자 정의
        • 54.3 관리 관련 SSL 구성
        • 54.4 관리 서버 주소 사용자 정의
        • 54.5 HTTP 끝점 사용안하기
  • spring 5.0
    • 1. IoC 컨테이너
      • 1.1 스프링 IoC 컨테이너와 빈의 도입 by sh
      • 1.2 컨테이너 by ys
      • 1.3 빈 개요 by ks
      • 1.4 의존성 by ks, ys, sh
        • 1.4.1 의존성 주입 by ks
        • 1.4.2 의존성과 configuration by ks
        • 1.4.3 depends-on 사용 by ys
        • 1.4.4 게으른-초기화된 bean by ys
        • 1.4.5 Autowiring Collaborators by ys
        • 1.4.6 메소드 주입 by sh
      • 1.5. 빈의 범위 by sh
      • 1.6 빈의 특성 커스터마이징하기 by ys
        • 1.6.1 라이프 사이클 콜백
        • 1.6.2 ApplicationContextAware과BeanNameAware
        • 1.6.3 기타 Aware인터페이스
      • 1.7 빈 정의 상속by ys
        • 1.7.1 빈 정의 상속
      • 1.8 컨테이너 확장 포인트 by ks
      • 1.9 어노테이션 기반의 컨테이너 구성 by sh
      • 1.10 클래스패스 스캔 및 관리 by ys
        • 1.10.1 @Component 및 추가 스테레오 타입 어노테이션
        • 1.10.2 meta-annotation 및 composed annotation 사용
        • 1.10.3 자동으로 클래스 검색 및 Bean 정의 등록
        • 1.10.4 스캐닝을 커스터마이징 하기위해 필터를 사용
        • 1.10.5 component 내에 Bean 메타 데이터 정의
        • 1.10.6 이름으로 자동탐지되는 컴포넌트
        • 1.10.7 범위로 자동 감지되는 컴포넌트
        • 1.10.8 annotation과 함께 한정된 메타데이터 제공
        • 1.10.9 후보 component의 index 생성
      • 1.11 JSR 330 표준 어노테이션 사용하기 by sh
      • 1.12 자바 기반의 컨테이너 구성 by sh, ks
        • 1.12.1 기본 개념: @Bean 및 @Configuration by sh
        • 1.12.2 AnnotationConfigApplicationContext를 사용한 스프링 컨테이너 인스턴스화 by sh
        • 1.12.3 @Bean 사용 by ks
        • 1.12.4 @Configuration 어노테이션 by ks
        • 1.12.5 자바 기반 Configuration구성 by ks
      • 1.13 환경 추상화 by ys
        • 1.13.1 빈 정의 프로파일
        • 1.13.2 PropertySource추출
        • 1.13.3 @PropertySource 사용
        • 1.13.4 Placeholder Resolution in Statements
      • 1.14 LoadTimeWeaver 등록 by ks
      • 1.15 ApplicationContext의 부가 수용가능성들 by ks, sh
        • 1.15.1 MesageSource를 사용한 국제화 by ks
        • 1.15.2 표준과 커스텀 이벤트 by ks
        • 1.15.3 로우 레벨 리소스에 대한 편리한 접근 by sh
        • 1.15.4 웹 어플리케이션에 대한 간편한 Application 인스턴스화 by sh
        • 1.15.5 스프링 ApplicationContext를 Java EE RAR 파일로 배포하가ㅣ by sh
        • 1.15.3 Low-level 리소스로 편리한 접근
        • 1.15.4 웹 어플리케이션을 위한 편리한 ApplicationContext 인스턴스화
      • 1.16 BeanFactory by sh
    • 2. Resource by ks
      • 2.1 소개
      • 2.2 Resource interface
      • 2.3 내장 리소스 확장
      • 2.4 ResourceReader
      • 2.5 ResourceLoaderAware 인터페이스
      • 2.6 Resources 의존성
      • 2.7 어플리케이션 컨텍스트와 리소스 경로
    • 3. 유효성 검사, 데이터 바인딩 및 유형 변환 by ys, sh
      • 3.1. Spring의 Validator 인터페이스를 사용하여 유효성 검사 by ys
      • 3.2. 오류 메시지로 코드 해결 by ys
      • 3.3. bean 조작과 BeanWrapper by ys
        • 3.3.1. 기본 및 중첩 된 프로퍼티를 설정 및 가져 오기
        • 3.3.2. 내장 된 PropertyEditor구현
      • 3.4 스프링 타입 변환 by sh
        • 3.4.1 Converter SPI
        • 3.4.2 ConverterFactory 사용하기
        • 3.4.3 GenericConverter 사용하기
        • 3.4.4 ConversionService API
        • 3.4.5 ConversionService 구성
        • 3.4.6 프로그래밍 방식으로 ConversionService 사용하기
      • 3.5 스프링 필드 포맷팅 by sh
        • 3.5.1 Formatter SPI
        • 3.5.2 Annotation 기반의 포맷팅
        • 3.5.3 FormatterRegistry SPI
        • 3.5.4 FormatterRegistrar SPI
        • 3.5.5 스프링 MVC에서 포맷팅 구성하기
      • 3.6 전역 Date and Time 포맷 구성 by sh
      • 3.7 스프링 유효성 검사 by sh
        • 3.7.1 by sh
        • 3.7.2 by sh
        • 3.7.3 by sh
    • 4 스프링 표현식 언어 (SpEL)
      • 4.1 평가 by sh
      • 4.2 빈 정의에 있는 표현식 by sh
      • 4.3 Language Reference
        • 4.3.1 리터럴 표현식 by ys
        • 4.3.2 프로퍼티,배열,목록,지도 및 인덱서 by ys
        • 4.3.3 인라인 목록 by ys
        • 4.3.4 인라인 Maps by ys
        • 4.3.5 배열 구성 by ys
        • 4.3.6 행동 양식 by ys
        • 4.3.7 연산자 by ys
        • 4.3.8 유형 by ys
        • 4.3.9 생성자 by ys
        • 4.3.10 변수 by ks
        • 4.3.11 함수 by ks
        • 4.3.12 빈 참조 by ks
        • 4.3.13 삼항 연산자 (If-Then-Else) by ks
        • 4.3.14 엘비스 연산자 by ks
        • 4.3.15 안전한 네비게이션 연산자 by ks
        • 4.3.16 컬렉션 셀렉션 by ks
        • 4.3.17 컬렉션 프로젝션 by ks
        • 4.3.18 표현 템플릿 by ks
    • 5 spring을 이용한 aspect 지향 프로그래밍
      • 5.1 AOP 개념 by ys
      • 5.2 Spring AOP 기능 및 목표 by ys
      • 5.3 AOP 프록시 by ys
      • 5.4 @AspectJ 지원 by ys,ks
        • 5.4.1 @AspectJ 지원 활성화 by ys
        • 5.4.2 Aspect 선언하기 by ys
        • 5.4.3 Pointcut 선언하기 by ys
        • 5.4.4 Advice 선언 by ks
        • 5.4.5 소개 by ks
        • 5.4.6 Aspect 초기화 모델 by ks
        • 5.4.7 AOP 예제 by ks
      • 5.5 스키마 기반 AOP 지원 by sh
        • 5.5.1 Aspect 선언 by sh
        • 5.5.2 Pointcut 선언 by sh
        • 5.5.3 Advice 선언 by sh
        • 5.5.4 인트로덕션 by sh
        • 5.5.5 Aspect 인스턴스화 모델 by sh
        • 5.5.6 Advisors by sh
        • 5.5.7 AOP 스키마 예제 by sh
    • 6 Spring AOP API
      • 6.1 Spring의 Pointcut API
        • 6.1.1 개념들 by ys
        • 6.1.2 Pointcuts에 대한 작업 by ys
        • 6.1.3 AspectJ Expression Pointcuts by ys
        • 6.1.4 편리한 Pointcut 구현 by ys
        • 6.1.5 포인트 컷 수퍼 클래스 by ys
        • 6.1.6. 사용자 정의 Pointcut by ys
      • 6.2 Spring의 Advice API
        • 6.2.1. 조언 라이프 사이클 by ys
        • 6.2.2 Spring의 advice 유형 by ys
      • 6.3 Spring의 Advisor API by ks
      • 6.4 ProxyFactoryBean을 사용해서 AOP 프록시 생성 by ks
        • 6.4.1 기본
        • 6.4.2 자바빈 프로퍼티
        • 6.4.3 JDK 및 CGLIB 기반 프록시
        • 6.4.4 프록시 인터페이스
        • 6.4 5 프록시 클래스
        • 6.4.6 "Global" advisor 사용
      • 6.5 간결한 프록시 정의 by sh
      • 6.6 ProxyFactory를 사용하여 프로그래밍 방식으로 AOP 프록시 만들기 by sh
      • 6.7 Advised 객체들 조작하기 by sh
      • 6.8 "자동 프록시" 기능 사용 by sh
      • 6.9 TargetSource구현체 사용하기 by sh
      • 6.10 새로운 Advice 타입 정의하기 by sh
    • 7. 데이터 버퍼와 코덱 by ks
Powered by GitBook
On this page
  • 30. Messaging
  • 30.1 JMS

Was this helpful?

  1. Spring boot
  2. 스프링부트의 기능

30. 메시징 by sh

Previous29. NoSQL 기술 사용 by shNext31. 이메일 전송 by sh

Last updated 5 years ago

Was this helpful?

30. Messaging

Spring 프레임 워크는 JmsTemplate을 사용하는 JMS API의 단순화 된 사용에서 메시지를 비동기 적으로 수신하는 완전한 인프라 스트럭처에 이르기까지 메시징 시스템과의 통합을위한 광범위한 지원을 제공합니다. Spring AMQP는 'Advanced Message Queuing Protocol'과 비슷한 기능을 제공하며 Boot는 RabbitTemplate및 RabbitMQ에 대한 자동 구성 옵션도 제공합니다. 또한 Spring Websocket에서 기본적으로 STOMP 메시징을 지원하며, Spring Boot는 시작과 초기 설정을 통해 자동 구성을 지원합니다.

30.1 JMS

javax.jms.ConnectionFactory 인터페이스는 JMS 브로커와 상호 작용하기위한 javax.jms.Connection을 만드는 표준 방법을 제공합니다. Spring은 ConnectionFactory를 JMS와 함께 사용하기 위해 필요하지만 일반적으로 직접 사용하지 않아도되며 더 높은 수준의 메시징 추상화에 의존 할 수있습니다 (자세한 내용은 Spring Framework 참조 문서의 참조). 또한 Spring Boot는 메시지를 보내고 받기 위해 필요한 인프라를 자동으로 구성합니다.

JMS (Java Message Service)

  • 비동기식 메시징을 위한 표준 API.

비동기식 메시징: 어떤 애플리케이션에서 다른 에플리케이션으로 간접적으로 메시지를 보내고 응답은 기다리지 않는 통신 방식.

JMS의 핵심 개념

  • 메시지 중개자 (Message Broker)

    • 애플리케이션에서 메시지를 전송할 때 메시지를 건네받는 역할을 하는 것. 지정된 목적지로 확실하게 메시지를 전달하는 책임을 맡아 주므로 전송자가 바로 자신의 일로 돌아갈 수 있게 해준다.

  • 목적지 (Destination)

30.1.1 HornetQ 지원

Spring Boot는 클래스 패스에서 HornetQ를 사용할 수 있음을 감지하면 ConnectionFactory를 자동으로 구성 할 수 있습니다. 브로커가 있으면 내장 된 브로커가 시작되고 자동으로 구성됩니다 (mode 등록 정보가 명시 적으로 설정되지 않은 경우). 지원되는 모드는 다음과 같습니다. "embedded" (임베디드 브로커가 필요하며 명시적으로 클래스 경로에서 브로커를 사용할 수없는 경우 오류가 발생하도록 지정하기 위해)와 netty전송 프로토콜을 사용하여 브로커에 연결하는 "native" 입니다. 후자가 구성되면 스프링 부트는 기본 설정으로 로컬 시스템에서 실행중인 브로커에 연결하는 ConnectionFactory를 구성합니다.

HornetQ

  • 멀티 프로토콜, 임베드, 고성능 클러스터 비동기 메시징 시스템을 구축할 수 있는 오픈소스 프로젝트

    • 자바로 만들어져 있으며 JMS 보다 뛰어난 성능을 가지고 있고, POJO 기반 디자인, 고사용성, 유연한 클러스터링, 관리 측면에서 사용하기 좋다.

spring-boot-starter-hornetq을 사용하고 있다면 기존 HornetQ 인스턴스에 연결하는 데 필요한 종속성과 JMS와 통합 할 Spring 인프라가 제공됩니다. org.hornetq:hornetq-jms-server를 애플리케이션에 추가하면 임베디드 모드를 사용할 수있습니다.

HornetQ 구성은 spring.hornetq.*의 외부 구성 등록 정보에 의해 제어됩니다. 예를 들어, application.properties에 다음 섹션을 선언 할 수 있습니다.

spring.hornetq.mode=native
spring.hornetq.host=192.168.1.210
spring.hornetq.port=9876

브로커를 임베드 할 때 지속성을 사용할지 여부와 사용 가능하게 할 대상 목록을 선택할 수 있습니다. 기본 옵션을 사용하여 쉼표로 구분 된 목록으로 지정할 수 있습니다. 고급 큐 및 주제 구성 각각에 대해 org.hornetq.jms.server.config.JMSQueueConfiguration 또는 org.hornetq.jms.server.config.TopicConfiguration 유형의 Bean을 정의 할 수 있습니다.

JNDI 조회가 전혀 필요하지 않으며 대상은 HornetQ 구성의 'name'속성 또는 구성을 통해 제공된 이름을 사용하여 이름에 대해 확인됩니다.

30.1.2 ActiveMQ 지원

또한 Spring Boot는 클래스 패스에서 ActiveMQ를 사용할 수 있음을 감지하면 ConnectionFactory를 구성 할 수 있습니다. 브로커가있는 경우 포함 된 브로커가 시작되고 구성됩니다 (브로커 URL이 구성을 통해 지정되지 않은 경우).

ActiveMQ

JMS를 지원하는 클라이언트를 포함하는 브로커, 자바 뿐만 아니라 다양한 언어를 이용하는 시스템 간의 통신을 가능하게 함. 또한 클러스터링 기능 및 DB 그리고 FileSystem을 통해 각 시스템 간의 일관성 및 지속성을 유지시켜 줌.

즉, 클라이언트 간 메시지를 송수신할 수 있는 오픈 소스 Broker(JMS 서버)

ActiveMQ 구성은 spring.activemq.*의 외부 구성 등록 정보에 의해 제어됩니다. 예를 들어, application.properties에 다음 섹션을 선언 할 수 있습니다.

spring.activemq.broker-url=tcp://192.168.1.210:9876
spring.activemq.user=admin
spring.activemq.password=secret

기본적으로 ActiveMQ는 대상이 아직 존재하지 않는 경우 대상을 생성하므로 대상은 제공된 이름과 비교하여 확인됩니다.

30.1.3 JNDI ConnectionFactory 사용

Application Server에서 응용 프로그램을 실행중인 경우 Spring Boot는 JNDI를 사용하여 JMS ConnectionFactory를 찾으려고 시도합니다. 기본적으로 java:/JmsXA및 java:/XAConnectionFactory 위치가 점검됩니다. 대체 위치를 지정해야하는 경우 spring.jms.jndi-name 속성을 사용할 수 있습니다.

연결 팩토리 또는 대상과 같은 메시지 제공자에 대한 구성 정보를 얻기 위해 JNDI를 사용

spring.jms.jndi-name=java:/MyConnectionFactory

30.1.4 메시지 전송

Spring의 JmsTemplate은 자동으로 구성되므로 직접 bean에 autowire 할 수 있습니다.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    private final JmsTemplate jmsTemplate;

    @Autowired
    public MyBean(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    // ...

}

30.1.5 메시지 수신

JMS 인프라가 존재할 때 모든 Bean에 @JmsListener 주석을 달아 청취자 엔드 포인트를 작성할 수 있습니다. JmsListenerContainerFactory가 정의되어 있지 않은 경우, 디폴트의 JmsListenerContainerFactory가 자동적으로 설정됩니다.

다음 구성 요소는 someQueue대상에 리스너 끝점을 만듭니다.

@Component
public class MyBean {

    @JmsListener(destination = "someQueue")
    public void processMessage(String content) {
        // ...
    }

}

지원되는 옵션에 대한 자세한 내용은 를 참조하십시오.

지원되는 옵션에 대해서는 를 참조하십시오.

(Spring 4.1의 새로운 기능)은 비슷한 방식으로 삽입 될 수 있습니다.

자세한 내용은 을 확인하십시오.

relevant section
HornetQProperties
ActiveMQProperties
the javadoc of @EnableJms
JmsMessagingTemplate
[Note]
[Note]