본문 바로가기

전체 글145

[Spring + Prometheus + Grafana] 간단한 커스텀 메트릭 구현 #2 - @Counted, @Timed, MeterBinder ≣ 목차이번 포스팅에서는 간단한 주문 관련 메트릭을 구현하는 방법에 대해 알아보겠습니다.스프링 엑추에이터, 프로메테우스, 그라파나의 기초 설정에 대해서는 이미 알고 있다고 가정하겠습니다.  카운터란?카운터는 단순하게 증가하는 단일 누적 측정 항목이며, 일반적으로 전체 값을 의미합니다. 이 측정 항목은 값이 증가하거나 0으로 초기화하는 기능만 가능하고, 마이크로미터에서는 값을 감소시키는 기능도 지원하지만 일반적으로 감소시키는 기능을 사용하는 것은 이러한 목적에는 적합하지 않습니다. 예를 들어 HTTP 요청 수를 카운터로 사용하는데 일반적으로 HTTP 요청 수를 감소 하는 일은 없습니다. 직접 카운터 생성@Slf4j@Servicepublic class OrderService implements OrderSe.. 2024. 10. 20.
[Actuator + Prometheus + Grafana] 모니터링 간단한 구현 #1 간단한 소개spring boot actuator: 스프링부트 내부 라이브러리로, 실행 중인 어플리케이션에 메트릭을 엔드포인트로 제공합니다.Prometheus: actuator가 제공하는 메트릭을 엔드포인트로 가져와 프로메테우스 자체적으로 저장하는 DB에 저장합니다.Grafana: Prometheus에서 저장한 메트릭을 시각화하고, 원하는 정보만 볼 수 있도록 대시보드를 구성합니다.  spring boot Actuator 설정implementation 'org.springframework.boot:spring-boot-starter-actuator'액추에이터는 스프링 부트 내장 라이브러리이기 때문에, 사용하려면 build.gradle 파일에 의존성 코드를 한 개만 추가하면 됩니다.  Prometheus 설.. 2024. 10. 20.
[Spring Boot] micrometer의 역할 (시스템 모니터링) 모니터링 툴의 중요성 - 마이크로미터(Micrometer)의 역할서비스를 운영할 때, 애플리케이션의 CPU, 메모리, 커넥션 사용량 등 다양한 지표를 모니터링하는 것은 필수적입니다. 이러한 지표를 통해 문제 발생 시 사전 대응이 가능하며, 실제 문제가 발생했을 때도 원인을 신속하게 파악하고 대처할 수 있습니다. 예를 들어, 메모리 사용량이 가득 찼다면, 메모리 문제와 관련된 부분을 빠르게 찾아 대응할 수 있습니다. Micrometer란? - 의존성 문제 해결수많은 모니터링 툴이 존재하며, 시스템의 다양한 정보를 툴에 전달하여 사용합니다. 예를 들어, CPU, JVM, 커넥션 정보 등을 JMX 툴에 전달한다고 가정해 보겠습니다. 이 경우, 각각의 정보를 JMX 모니터링 툴이 정한 포맷에 맞추어 측정하고 전.. 2024. 10. 18.
[Spring Boot] 액추에이터(Actuator) 문제 및 해결 방법 Spring Actuator란Spring Actuator는 org.springframework.boot:spring-boot-starter-actuator 패키지를 Dependency에 추가만 해주면 바로 사용할 수 있는 기능으로, 애플리케이션 모니터링 및 관리 측면에서 도움을 줄 수 있습니다. Actuator 보안 이슈애플리케이션 모니터링 및 관리 측면에서 개발자에게 편의를 주는 기능이나, 잘못 사용할 경우 비밀번호, API KEY, Token 등 Credential들이나 내부 서비스 도메인, IP 주소와 같은 중요 정보들이 유출될 수 있습니다.  1. 환경변수로 중요 정보를 저장해 둔 경우개발자들은 보안 문제로 API KEY, DB Password 등 중요한 정보들을 하드 코딩을 하지 않고 appli.. 2024. 10. 16.
[Spring Boot] 액추에이터(Actuator) 정리 ≣ 목차 액추에이터란?스프링 부트는 프로덕션 환경에서 애플리케이션을 모니터링하고 관리하는데 필요한 감사(auditing), 추적(trace), 지표(metric)을 자동으로 수집하는 기능을 제공하며, HTTP 엔드포인트와 JMX를 통해 애플리케이션의 상태를 확인하고 관리할 수 있습니다. 그럼 해당 기능들이 왜 필요할까??모니터링을 통해 개발자는 애플리케이션의 상태를 쉽게 파악하고 문제를 신속하게 해결할 수 있으며, 시스템의 부하나 성능 저하를 조기에 감지할 수 있습니다. 또한, 보안 설정을 통해 중요한 정보에 대한 접근을 제어할 수 있어 민감한 데이터의 노출을 방지할 수 있습니다. 이러한 이유로 스프링 액추에이터는 애플리케이션의 효율적인 관리와 운영에 필수적인 도구로 자리잡고 있습니다. build.gra.. 2024. 10. 16.
[Spring Boot] spring.jpa.open-in-view is enabled by default 경고 메시지 JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 해당 경고 메시지는 나오는 이유해당 경고 메시지는 spring.jpa.open-in-view 설정이 활성화되어 있을 때 발생하는 경고 메시지입니다. 이 설정은 기본적으로 true로 설정되어 있어서, 뷰 렌더링 중에도 데이터베이스 세션이 열려 있을 수 있다는 점을 알려주는 메시지입니다. 그럼 어떤 문제가 있.. 2024. 10. 15.
[Spring Boot] 다양한 외부 설정 방법 #4 - @Profile @Profile@Profile을 활용하면 각 환경에 맞는 스프링 빈을 등록할 수 있어 로컬 개발 환경에서는 가짜 결제 기능을 제공하는 빈을, 운영 환경에서는 실제 결제 기능을 제공하는 빈을 등록할 수 있습니다. 이를 위해 각 환경에 맞는 프로필을 설정하고, 해당 프로필에 따라 필요한 빈을 정의할 수 있습니다. 예를 들어 로컬 환경에서는 @Profile("local")을 사용하여 가짜 결제 서비스를 구현하고, 운영 환경에서는 @Profile("prod")을 사용하여 실제 결제 서비스를 구현하는 방식으로 설정할 수 있습니다.  해당 예시를 간단하게 코드로 구현해보겠습니다. Pay 관련 인터페이스public interface PayClient { void pay(int money);}DI를 적극 활용하기.. 2024. 10. 15.
[Spring Boot] 다양한 외부 설정 방법 #3 - @Value, @ConfigurationProperties ≣ 목차@Valueapplication.properties 파일에 필요한 외부 설정을 추가한 후, @Value 애노테이션을 통해 해당 값들을 손쉽게 읽어올 수 있습니다. @Value는 내부적으로 Environment를 사용하여 설정 값을 가져옵니다. 이 애노테이션은 필드에 적용할 수 있을 뿐만 아니라, 메서드의 파라미터에도 사용할 수 있어 유연한 설정할 수 있습니다.만약 특정 키를 찾지 못할 경우, 코드에서 기본값을 사용하고 싶다면, @Value 애노테이션의 값 뒤에 콜론(:)을 추가하고 기본값을 적어주면 됩니다. @Value("${my.datasource.etc.max-connection:1}") 추가로, @Value를 사용할 때는 설정 값의 타입에 맞게 변환이 이루어지므로, 적절한 타입으로 변환될 수.. 2024. 10. 15.
[Java] uses unchecked or unsafe operations 에러 해결 해당 오류를 몇 번 경험해본 적이 있는데, 문득 자바에서는 해당 오류를 경고 메시지만 보여주는 이유가 궁금해져서 자세히 알아보려고 합니다. 1. uses unchecked or unsafe operations. 에러 원인해당 경고는 제네릭이 필요한 자료형이나 객체를 사용할 때, 제네릭 자료형을 명시하지 않아서 발생합니다. 이로 인해 타입 안전성이 보장되지 않고 ClassCastException오류가 발생할 수 있습니다. 2. 해결 방법해결 방법은 간단합니다. 제네릭이 필요한 부분에 적절한 자료형을 명시해 주시면 해당 오류를 쉽게 해결할 수 있습니다. -----------------------해결 전 ----------------------@SpringBootApplicationpublic class Ge.. 2024. 10. 14.
[Spring Boot] 다양한 외부 설정 방법 #2 - Environment 해당 글을 읽기전에 아래 글을 읽고 오시는 걸 추천합니다.https://pjstudyblog.tistory.com/70 [Spring Boot] 다양한 외부 설정 방법 #1≣ 목차 외부설정이란?외부 설정은 애플리케이션이 실행되거나 빌드될 때 외부에서 설정 값을 주입 받는 있는 기능을 의미합니다. 그렇다면 애플리케이션 실행에 필요한 설정값을 외부에서 어pjstudyblog.tistory.com 외부 설정 일관성 문제 해결스프링은 외부 설정의 일관성 문제를 Environment와 PropertySource를 통해 해결했습니다. 이를 통해 다양한 설정 소스를 통합하고, 일관된 방식으로 프로퍼티를 관리할 수 있게 도와줍니다.  외부 설정 일관성 문제에 대해서는 위에 게시글에 있습니다.  Environment특정.. 2024. 10. 13.