1. 프로덕션 준비

    1. 개발자는 서비스를 운영 단계에 올리게 되면 서비스에 문제가 없는지 모니터링하고 지표들을 심어서 감시하는 활동을 해야함
    2. 프로덕션을 운영에 배포할 때 준비해야 하는 비 기능적 요소들을 말함
    3. 준비 요소
      1. 지표(metric)
      2. 추적(trace)
      3. 감사(auditing)
      4. 모니터링
    4. 구체적으로 애플리케이션 작동 여부, 로그 정보(레벨 등), 커넥션 풀 사용개수 등을 확인할 수 있어야함
  2. 액츄에이터

    1. gradle

      implementation 'org.springframework.boot:spring-boot-starter-actuator'
      
    2. 실행

      Untitled

      Untitled

    3. 엔드포인트 설정

      1. 엔드포인트란 같은 URL에서도 다른 요청을 하게끔 구별하게 해주는 항목

      2. 액추에이터에서 엔드포인트 설정 2가지 과정

        1. 엔드포인트 활성화
          1. 엔드포인트 활성화는 해당 기능 자체를 사용할지 말지 on, off 선택하는 것
        2. 엔드포인트 노출
          1. 엔드포인트 노출은 활성화된 엔드포인트를 HTTP에 노출할지 JMX에 노출할지 선택하는 것
          2. 즉, 활성화가 되어 있지 않다면, 노출하더라도 사용할 수 없음
      3. 대부분의 엔드포인트는 활성화되어 있음 노출이 되지 않았을 뿐(shutdown 기능은 예외적으로 비활성화)

      4. 모든 엔드포인트를 노출하는 설정

        모두 노출하지만 그중 env, beans 노출하지 않는 경

        모두 노출하지만 그중 env, beans 노출하지 않는 경

        기본적으로 활성화되지 않은 shutdown 활성화

        기본적으로 활성화되지 않은 shutdown 활성화

        모두 활성화하여 설정 없이 작동할 때 보지 못한 기능들 확인 가능(기본적으로 shutdown을 제외하고는 활성화는 되어있음)

        모두 활성화하여 설정 없이 작동할 때 보지 못한 기능들 확인 가능(기본적으로 shutdown을 제외하고는 활성화는 되어있음)

  3. 엔드포인트 종류

    1. 엔드포인트 참조: https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints

    2. health endpoint

      1. health의 status는 컴포넌트 중 하나라도 문제가 생기면 **‘DOWN’**상태

      2. 기본적인 활성화만 한다면 현재 서버가 응답 가능한 상태인지 나타냄

        Untitled

      3. show-details: always 하면 좀 더 상세한 정보 확인 가능

        Untitled

      4. show-components: always 옵션을 적용하면 상세한 정보없이 각 컴포넌트 상태만 조회 가능

        Untitled

    3. info endpoint

      Untitled

      1. 애플리케이션 기본 정보를 노출
      2. 다른 엔드포인트들과는 달리 management하위에서 작성(다른 엔드포인트는 management.endpoint하위에 작성)
      3. 제공하는 기능
        1. java: 자바 런타임 정보

        2. os: OS 정보

        3. env: Environment에서 info.로 시작하는 정보

        4. build

          Untitled

          1. 빌드 정보, META-INF/build-info.properties 파일이 필요
          2. gradle에 작성하면 빌드과정에서 자동으로 파일 생성
          3. build → resources → main → META-INF에서 확인 가능
        5. git

          Untitled

          1. git정보, git.properties 파일이 필요
          2. gradle플러그인에 추가하면 빌드과정에서 자동으로 파일 생성
          3. build → resources → main에서 확인 가능
        6. 기본적으로 java, env, os는 비활성화

        7. info 커스텀시 참고: https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints.info.writing-custom-info-contributors

    4. logger endpoint

      1. 로깅과 관련된 정보 조회 가능
      2. 실시간으로 로깅 정보를 변경할 수 있음(중요)
      3. **http://localhost:8080/actuator/loggers/{패키지명}**
        1. GET방식으로 해당 URL요청하면 해당 패키지 로깅 레벨 확인 가능

        2. POST방식으로 요청하는 경우 해당 패키지의 로깅레벨을 일식적으로 변경 가능

        3. body에 configuredLevel을 넘겨줘야 변경 가능(변경 성공 → 204응답)

          Untitled

    5. HttpExchanges endpoint

      Untitled

      1. HTTP 요청과 응답의 기록 확인 가능한 엔드포인트
      2. HttpExchangeRepository인터페이스 구현체를 빈으로 등록하면 엔트포인트 사용 가능
      3. 최대 100개의 HTTP요청을 FIFO형태로 제공, **setCapacity()**로 최대개수 조절 가능
      4. 기능이 단순하고 제한이 많기 때문에 운영 단계에서는 핀포인트 등 다른 기술 사용
  4. 액츄에이터 보안

    1. 액츄에이터가 많은 정보를 제공하므로 외부에 공개되는 것은 보안상 좋지 않음

    2. 내부망에서 접근하는 등의 방법 필요

    3. 다른 포트에서의 실행

      Untitled

      1. 특정 포트는 내부망에서만 접근 가능한 경우 사용방법
      2. **management.server.port**를 통해 설정
    4. 엔드포인트 경로 변경

      Untitled

      1. 기본값은 /actuator로 설정되어 있음