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
  • 53.7.1 인풋 받기
  • 53.7.2 커스텀 웹 엔드포인트
  • 53.7.3 서블릿 엔드포인트
  • 53.7.4 컨트롤러 엔드포인트

Was this helpful?

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

53.7 커스텀 엔드포인트 확장 by ks

Previous53.6 CORS 지원 by ysNext53.8 Health 정보 by ks

Last updated 5 years ago

Was this helpful?

엔드포인트란 앱을 모니터링 하고 상호작용 할 수 있도록 해주는 것. 모니터링 뿐 아니라 트래픽, DB의 상태도 확인할 수 있다. 스프링 부트는 여러 빌트인된 엔드포인트들이 있다. 이 기능을 사용하려면 actuator 프로젝트를 추가해주고 속성을 true로 변경해주면 된다. 인증이 기본이긴 한데 없이 사용할 수도 있다.

@Endpoint 어노테이션으로 엔드포인트를 지정해주고(예제에서는 클래스 위에 선언하던데..!!) 지정된 url로 요청하면 노출된다. .

JMX는 앱 모니터링 표준. 자바 앱이랑 jmx 모니터링 툴이랑 연결해서 데이터를 본다고 하면 되고, 실행시킬 때 옵션을 사용해주면 된다. java -jar com.sun.management.jmxremote=true 이런식으로!

@Endpoint 어노테이트된 @Bean을 추가한다면, @ReadOperation, @WriteOperation, @DeleteOperation과 같이 어노테이트된 메소드들은 자동적으로 JMX와 웹앱에서 HTTP를 통해 노출된다. 엔드포인트들은 Jersey, 스프링 MVC나 Spring WebFlux를 사용해서 노출될 수 있다.

@WebEndpoint, @JmxEndpoint를 사용해서 특정 기술 엔드포인트를 쓸 수 있다. 이 엔드포인트들은 해당 기술로 제한된다. 예를 들어서, @WebEndpoint는 JMX가 아니라 오직 HTTP를 통해서 노출된다.

@EndpointWebExtension과 @EndpointJmxExtension을 사용해서 특정 기술 엔드포인트를 쓸 수 있다. 이 어노테이션들은 존재하는 엔드포인트를 보완하는 특정 기술 동작을 제공하게 한다.

웹 프레임 워크 특정 기능에 액세스해야하는 경우 JMX를 통해 사용할 수 없거나 다른 웹 프레임 워크를 사용할 때 Servlet 또는 Spring @Controller 및 @RestController 엔드포인트 구현할 수 있다.

53.7.1 인풋 받기

엔드 포인트에서의 조작은 매개 변수를 통해 입력을 받는다. 웹을 통해 노출되면 이러한 매개 변수의 값은 URL의 쿼리 매개 변수 및 JSON 요청 본문에서 가져온다. JMX를 통해 노출되면 매개 변수가 MBean의 작업 매개 변수에 매핑된다. 매개 변수는 기본적으로 필요하다. @org.springframework.lang.Nullable 과 어노테이트해서 옵션화할 수 있다. JSON 요청 바디에서각 루트 프로퍼티는 엔드포인트의 파라미터로 매핑될 수 있다.


{ 
    "name" : "test" , 
    "counter" : 42 
}

String name과 int counter 파라미터를 사용하는 쓰기 동작을 호출하는데 사용할 수 있다.

엔드 포인트는 기술에 독립적이므로 메소드 시그니처에 단순 유형 만 지정할 수 있다. 특히 name 및 counter속성을 정의하는 사용자 정의 유형이 있는 단일 매개 변수 선언하는 것은 지원되지 않는다. ! 메소드 시그니처란? (Method Signature. 메소드 생성 규칙들 중에서 메소드의 이름, 파라미터를 메소드의 시그니처라고한다. 따라서 위에서 하는 말은 name이랑 counter를 갖는 오브젝트를 하나 만들어서 그걸 인자로 받는 커스텀한 경우는 지원되지 않는다는 말!! 입력을 조작 메소드의 매개 변수에 맵핑하려면 엔드 포인트를 구현하는 Java 코드를 -parameters로 컴파일해야하며 엔드 포인트를 구현하는 Kotlin 코드는 -java-parameters로 컴파일해야한다. 이것은 Spring Boot의 Gradle 플러그인을 사용하거나 Maven과 spring-boot-starter-parent를 사용하는 경우 자동으로 발생한다.

입력 유형 변환

엔드포인트 동작 메소드에 전달된 매개 변수는 필요한 경우 자동으로 필수 유형으로 변환된다. 동작 메소드를 호출하기 전에, JMX 또는 HTTP 요청을 통해 수신된 입력은 ApplicationConversionService 인스턴스를 사용해서 요구되는 타입으로 변환된다.

!ApplicationConversionService : Environment, BeanFactory와 함께 등록되어 우리가 쓰는 @Value()에서 이 컨버터를 써서 바인딩해준다.

53.7.2 커스텀 웹 엔드포인트

@Endpoint, @WebEndpoint, @EndpointWebExtension 동작은 자동적으로 Jersey, 스프링 MVC, 스프링 Webflux를 사용해서 HTTP 로 노출된다.

!Jersey란? Resful 웹서비스용 자바 API. JSR 311에서 구현됨.

웹 엔드포인트 요청 Predicates(동작들)

요청 Predicates는 자동적으로 웹에 노출되는 엔드포인트에 각 동작을 일반화한다.

? predicates는.. 술어? 함수?

Path

prediacate의 path는 웹에 노출된 엔드포인트의 기본 path와 엔드포인트의 ID에 의해 결정된다. 기본 path는 /actuator이다. 예를 들어서 sessions라는 ID를 가진 엔드포인트는 /actuator/sessions을 사용할 것이다. @Selector를 사용하여 하나 이상의 조작 메소드 매개 변수에 주석을 달아 경로를 추가로 사용자 정의 할 수 있다. 이러한 매개 변수는 경로 변수로 경로 조건 자에 추가된다. 변수의 값은 엔드 포인트 조작이 호출 될 때 조작 메소드에 전달된다.

HTTP 메소드

predicate 의 HTTP메소드는 동작 타입에 의해 결정된다. 아래 테이블을 보자.

Operation

HTTP method

@ReadOperation

GET

@WriteOperation

POST

@DeleteOperation

DELETE

Consumes

@WriteOperation(HTTP POST) 를 request body 에 사용하면 predicate의 consumes 구문은 application/vnd.spring-boot.actuator.v2+json, application/json이다. consume구문의 다른 모든 동작은 비어있다.

Produces

predicate의 produces 구문은 @DeleteOperation, @ReadOperation, @WriteOperation 어노테이션의 produces 속성에 의해 결정될 수 있다. 그 옵션은 선택적이다. 사용하지 않는다면, produces 구문은 자동적으로 결정된다.

오퍼레이션 메소드가 void 또는 Void를 리턴하면 produce 절이 비어 있다. 조작 메소드가 org.springframework.core.io.Resource를 리턴하면 produce 절은 application / octet-stream이다. 다른 모든 작업의 ​​경우 produce 절은 application / vnd.spring-boot.actuator.v2 + json, application / json이다.

웹 엔드포인트 응답 스테이터스

엔드포인트 동작을 위한 기본 응답 스테이터스는 타입(read, write, delete)과 리턴 값에 의존한다. @ReadOperation 은 값을 리턴하면 응답코드를 200 OK로 응답한다. 값은 반환하지 않으면 404(Not found)를 응답할 것이다. @WriteOpearion이나 @DeleteOperation이 값을 반환하면 200 OK를 반환할 것이다. 값을 반환하지 않으면 204 (No Content)를 반환할 것이다. 동작이 요구된 파라미터 없이 호출하거나 요구되는 타입으로 컨버팅될 수 없다면 메소드는 불리지 않을 것이고 응답 스테이터스도 400(bad request) 일 것이다.

웹 엔드포인트 범위 요청 (scope request)

HTTP 범위 요청은 HTTP 리소스의 요청 부분에 사용될 수 있다. 스프링 MVC나 스프링 웹 플럭스를 사용할 때 org.springframework.core.io.Resource 를 리턴하는 동작은 자동적으로 범위 요청을 지원한다.

범위 요청은 Jersey를 사용할 때는 지원하지 않는다.

웹 엔드포인트 시큐리티

웹 엔드 포인트 또는 웹 특정 엔드 포인트 확장에 대한 동작은 현재 java.security.Principal 또는 org.springframework.boot.actuate.endpoint.SecurityContext를 메소드 매개 변수로 수신 할 수 있다. 전자는 일반적으로 @Nullable과 함께 사용되어 인증 된 사용자와 인증되지 않은 사용자에 대해 다른 동작을 제공한다. 후자는 일반적으로 isUserInRole (String) 메소드를 사용하여 권한 부여 검사를 수행하는 데 사용다.

53.7.3 서블릿 엔드포인트

공급자 도 구현하는 @ServletEndpoint로 주석이 달린 클래스를 구현하여 서블릿을 엔드 포인트로 노출 할 수 있다. 서블릿 엔드 포인트는 서블릿 컨테이너와의 긴밀한 통합을 제공하지만 이식성을 희생한다. 기존 서블릿을 엔드 포인트로 노출하는 데 사용한다. 새로운 엔드포인트의 경우 가능한 @Endpoint 및 @WebEndpoint 어노테이션을 선호해야 한다.

53.7.4 컨트롤러 엔드포인트

@ControllerEndpoint와 @RestControllerEndpoint는 Spring MVC 또는 Spring WebFlux에서만 노출되는 엔드 포인트를 구현하는 데 사용할 수 있다. 메소드는 @RequestMapping 및 @GetMapping과 같은 Spring MVC 및 Spring WebFlux의 표준 어노테이션을 사용하여 맵핑되며 엔드 포인트의 ID는 경로의 접두부로 사용된다. 컨트롤러 엔드 포인트는 Spring의 웹 프레임 워크와 보다 긴밀한 통합을 제공하지만 이식성을 희생한다. @Endpoint 및 @WebEndpoint 어노테이션은 가능할 때마다 선호되어야 한다.

엔드포인트 사용 예제
jmx_architecture