Spring 15

모니터링 메트릭 활용

마이크로미터를 사용해서 메트릭을 직접 등록하는 방법을 알아보자 MeterRegistry마이크로미터 기능을 제공하는 핵심 컴포넌트스프링을 통해서 주입 받아서 사용하고, 이곳을 통해서 카운터, 게이지 등을 등록한다. 카운터단조롭게 증가하는 단일 누적 측정항목단일값보통 하나씩 증가누적이므로 전체 값을 포함(total)프로메테우스에서는 일반적으로 카운터의 이름 마지막에 _tatal 을 붙여서 my_intersetstock_tatol 과 같이 표현함값을 증가하거나 0으로 초기화 하는 것만 가능예 ) HTTP 요청수 메트릭 등록 - 예제 만들기관심 주식 등록 서비스에 카운터 메트릭을 적용해보자!package com.flab.mars.domain.service;import com.flab.mars.db.entity...

Spring 2025.03.25

Spring Boot 애플리케이션 실시간 모니터링: Actuator, Prometheus, Grafana 활용법

서비스 운영에서 실시간 모니터링은 장애 대응의 핵심 요소다. 만약 모니터링 도구가 없다면, 장애 발생 시 원인 분석과 트러블슈팅이 어렵고 시간이 오래 걸릴 수 있다. 이 글에서는 가장 널리 사용되는 Prometheus + Grafana 조합을 활용하여 Spring Boot 애플리케이션을 효과적으로 모니터링하는 방법을 소개한다. 개인 프로젝트를 진행하면서 Spring Boot Actuator를 활용해 Prometheus로 메트릭을 수집하고, 이를 Grafana로 시각화해보았다. 이를 통해 운영 툴을 익히고 데이터 흐름을 파악하는 과정을 정리해보려 한다. 액추에이터:  메트릭을 수집할수 있는 API 엔드포인트 제공 prometheus : 매트릭 같은 시계열  데이터 스키마를 지원하는 데이터 베이스시계열 데이..

Spring 2025.03.19

Spring Boot + Redis 적용기

현재 개인적으로 주식 관련 프로젝트를 진행 중인데, 여러 유저들이 동일한 종목의 정보를 조회할 때 발생하는 API 호출의 중복 문제를 해결하기 위해 Redis를 도입했습니다. 문제점여러 유저가 동일한 종목 정보를 조회하는 경우, 증권사 API를 여러 번 호출해야 하는 상황이 발생할 수 있습니다. 이는 불필요한 트래픽을 유발하고 성능 저하를 초래할 수 있습니다. 이를 해결하기 위해 디스크 기반의 DBMS 에 비해 훨씬 빠른 레디스를 도입해보았다.레디스는 인메모리에 모든 데이터를 저장하기 때문에 훨씬 빠르며 여러가지 자료구조를 지원하고  확장성을 고려하였을때도 여러 기능을 제공한다는 점에서 이점이 있다.동일한 종목 요청시 캐시된 데이터를 반환하도록 api 호출을 최적화해보고 최적화 전 후 성능을 비교해보자 ..

Spring 2025.02.19

[스프링 핵심 원리 - 기본편] 의존관계 자동 주입 1

다양한 의존 관계 주입 방법 의존 관계 주입 4가지생성자 주입수정자 주입(setter 주입)필드 주입일반 메서드 주입 1. 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입받는 방법이다.생성자 호출 시점에 딱 한번만 호출되는 것을 보장한다.불변, 필수 의존 관계에 사용한다.@Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRe..

Spring 2024.11.05

[스프링 핵심 원리 - 기본편] 컴포넌트 스캔 2

탐색 위치와 기본 스캔 대상탐색할 패키지의 시작 위치 선정모든 자바 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸립니다. 그래서 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있습니다. @ComponentScan( basePackages = "hello.core.member")basePackges : 탐색할 패키지의 시작위치를 지정해 줍니다. 이 패키지를 포함해서 하위 패키지를 모두 탐색합니다.basePackages = {"hello.core", "hello.service"}  이렇게 여러 시작 위치를 지정할 수도 있습니다.basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정한다.만약 지정하지 않으면 @ComponentScan 이 붙은 설정 정보 클래스..

Spring 2024.10.28

[스프링 핵심 원리 - 기본편] 컴포넌트 스캔 1

컴포넌트 스캔과 의존관계 자동 주입 시작하기지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 을 통해 설정 정보를 직접 등록할 스프링 빈을 나열했다.예제는 등록해야 할 스프링 빈이 몇 개 안 되었지만 실무에서 수천, 수만 개가 된다면 설정정보도 커지고 개발자가 빈 등록을 누락할 수 도 있다.이를 해결하기 위해 스프링에서 설정정보 (AppConfig.class)가 없어도 자동으로 스프링 빈을 제공하는 컴포넌트 스캔이라는 기능을 제공하다.또 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제한한다.코드로 알아보기!package hello.core;import org.springframework.context.annotation.ComponentScan;import org.springfr..

Spring 2024.10.18

[스프링 핵심 원리 - 기본편] 싱글톤 패턴 1

싱글톤 패턴이란싱글톤 패턴은 인스턴스를 불필요하게 생성하지 않고 오직 하나의 인스턴스만 생성하여 사용하는 디자인패턴이다.즉, 생성자의 호출이 반복적으로 이루어져도 실제로 생성되는 객체는 최초로 생성된 객체를 반환해 주는 것이다.  싱글톤 패턴을 사용하는 이유인스턴스가 단 하나만 존재하는 것을 보증하고 싶은 경우 싱글톤 패턴을 사용한다. 장점메모리 낭비를 방지해 준다이미 생성된 인스턴스를 활용함으로써 속도 측면에서도 장점이 있다.데이터 공유가 쉽다.싱글톤으로 생성된 객체는 전역성을 띄기 때문에 다른 객체와 공유가 용이하다.하지만 만약 여러 클래스의 인스턴스에서 싱글톤 인스턴스의 데이터에 동시에 접근하게 된다면 동시성 문제가 생길 수 있다.단점싱글톤 패턴을 구현하는 코드가 많이 들어간다.의존관계상 클라이언트..

Spring 2024.10.17

[스프링 핵심 원리 - 기본편] 스프링 컨테이너와 스프링 빈 3

다양한 설정 형식 지원 - 자바 코드, XML스프링 컨테이너는 다양한 형식의 설정 정보를 받아들일 수 있게 유연하게 설계되어있다.자바 코드, XML, Groovy 등등애노테이션 기반 자바 코드 설정 사용new AnnotationConfigApplicationContext(AppConfig.class)AnnotationConfigApplicationContext 클래스를 사용하면서 자바코드로 설정된 정보를 넘기면 된다.xml 설정 사용최근에는 스프링 부트를 많이 사용하면서 xml 기반의 설정은 잘 사용하지 않는다. 아직 많은 레거시 프로젝트들이 xml 로 되어있고, 또 xml 을 사용하면 컴파일없이 빈 설정 정보를 변경할 수 있다는 장점이 있으므로 한번쯤 배워두는 것도 괜찮다.GenericXmlApplic..

Spring 2024.10.16

[스프링 핵심 원리 - 기본편] 스프링 컨테이너와 스프링 빈 2

컨테이너에 등록된 모든 빈 조회스프링 컨테이너에 실제 스프링 빈들이 잘 등록되었는지 확인해 보자package hello.core.beanfind;import hello.core.AppConfig;import org.junit.jupiter.api.DisplayName;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.config.BeanDefinition;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class ApplicationContextInfoTest { AnnotationConfigApplicati..

Spring 2024.10.16