분류 전체보기 1341

Spring 6의 새로운 HTTP Interface와 3가지 REST Clients

RestTemplate @SpringBootApplication public class RestApplication { @Bean public ApplicationRunner init(ErApi api) { return args -> { //https://open.er-api.com/v6/latest RestTemplate rt = new RestTemplate(); /* String res = rt.getForObject("https://open.er-api.com/v6/latest", String.class); System.out.println(res); */ Map res = rt.getForObject("https://open.er-api.com/v6/latest", Map.class); Syst..

Ch02. 일단 실행 - Hello, World (스프링 배치 구조 익히기)

SpringInitializer lombok spring configuration processor jdbc api spring data jpa mysql driver spring batch docker-compose.yml version: '3' services: mysql: container_name: spring_batch image: mysql:5.7 platform: linux/amd64 environment: MYSQL_DATABASE: "spring_batch" MYSQL_ROOT_PASSWORD: "password1234" TZ: "Asia/Seoul" ports: - "3307:3307" command: - "--character-set-server=utf8mb4" - "--collati..

Ch01. 배치작업과 스프링 배치의 구조

배치 작업이란? 실시간 작업과 대치되는 작업으로 한 번에 모아서 처리하는 작업들의 모임 배송, 은행/가맹점의 정산 작업 같은 경우 실시간으로 처리되지 않고 모아서 처리가 된다. 배치 작업은 고객의 눈에는 보이진 않지만, 배치 작업이 서비스 주기마다 일정하게 실행되고 있으며, 실시간 작업만큼 중요한 작업이다. 배치 작업이 필요한 예시 이메일 쿠폰 발송 가맹점 정산 거래 명세서 생성 추천 시스템 데이터 작업 스프링 배치로 작업이 필요한 이유 풍부한 기능 파일이나 JSON 과 같은 데이터를 읽어올 수 있도록 풍부한 기능을 제공한다 일관성 된 코드 배치작업은 가공된 데이터를 읽고 쓰는 작업이 일관되어 있기 때문에 스프링 배치를 사용하면 일관된 코드를 작성할 수 있다 트랜젝션과 같은 기능도 제공이 가능하고, 유지..

Ch09. 모니터링 메트릭 활용 - 실무 모니터링 환경 구성 팁

모니터링 3단계 대시보드 애플리케이션 추적 - 핀포인트 로그 대시보드 전체를 한눈에 볼 수 있는 가장 높은 뷰 제품 마이크로미터, 프로메테우스, 그라파나 등등 모니터링 대상 시스템 메트릭(CPU, 메모리) 애플리케이션 메트릭(톰캣 쓰레드 풀, DB 커넥션 풀, 애플리케이션 호출 수) 비즈니스 메트릭(주문수, 취소수) 애플리케이션 추적 주로 각각의 HTTP 요청을 추적, 일부는 마이크로서비스 환경에서 분산 추적 제품 핀포인트(오픈소스), 스카우트(오픈소스), 와탭(상용), 제니퍼(상용) https://github.com/pinpoint-apm/pinpoint GitHub - pinpoint-apm/pinpoint: APM, (Application Performance Management) tool for ..

Ch09. 모니터링 메트릭 활용 - 메트릭 등록(게이지)

https://prometheus.io/docs/concepts/metric_types/#gauge Metric types | Prometheus An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach. prometheus.io 게이지는 임의로 오르내릴 수 있는 단일 숫자 값을 나타내는 메트릭 값의 현재 상태를 보는데 사용 값이 증가하거나 감소할 수 있음 예) 차량의 속도, CPU 사용량, 메모리 사용량 참고: 카운터와 게이지를 구분할 때는 값이 감소할 수 있는가를 고민해 보면 도움이 된다. St..

Ch09. 모니터링 메트릭 활용 - 메트릭 등록(@Timed)

타이머는 @Timed라는 애노테이션을 통해 AOP를 적용할 수 있다. OrderServiceV4 @Slf4j @Timed(value = "my.order") public class OrderServiceV4 implements OrderService { private AtomicInteger stock = new AtomicInteger(100); @Override public void order() { log.info("주문"); stock.decrementAndGet(); sleep(500); } @Override public void cancel() { log.info("취소"); stock.incrementAndGet(); sleep(200); } @Override public AtomicInte..

Ch09. 모니터링 메트릭 활용 - 메트릭 등록(Timer)

Timer Timer는 좀 특별한 메트릭 측정 도구인데, 시간을 측정하는 데 사용된다. 카운터와 유사한데, Timer를 사용하면 실행 시간도 함께 측정할 수 있다. Timer는 다음과 같은 내용을 한 번에 측정해 준다. seconds_count : 누적 실행 수 - 카운터 seconds_sum : 실행 시간의 합 - sum seconds_max : 최대 실행 시간(가장 오래걸린 실행 시간) - 게이지 내부에 타임 윈도우라는 개념이 있어서 1~3분 마다 최대 실행 시간이 다시 계산된다. OrderServiceV3 @Slf4j public class OrderServiceV3 implements OrderService { private final MeterRegistry registry; private At..

Ch09. 모니터링 메트릭 활용 - 메트릭 등록(@Counted)

앞서 만든 OrderServiceV1의 가장 큰 단점은 메트릭을 관리하는 로직이 핵심 비즈니스 개발 로직에 침투했다는 점이다. 이런 부분을 분리하려면 어떻게 해야 할까?? 바로 스프링 AOP를 사용하면 된다. 직접 필요한 AOP를 만들어서 적용해도 되지만, 마이크로미터는 이런 상황에 맞추어 필요한 AOP 구성요소를 이미 다 만들어두었다. OrderServiceV2 @Slf4j public class OrderServiceV2 implements OrderService { private AtomicInteger stock = new AtomicInteger(100); @Override @Counted("my.order") public void order() { log.info("주문"); stock.dec..

Ch09. 모니터링 메트릭 활용 - 메트릭 등록(카운터)

마이크로미터를 사용해서 메트릭을 직접 등록하는 방법을 알아보자. 먼저 주문수, 취소수를 대상으로 카운터 메트릭을 등록해 보자.. MeterRegistry 마이크로미터 기능을 제공하는 핵심 컴포넌트 스프링을 통해서 주입 받아서 사용하고, 이곳을 통해서 카운터, 게이지 등을 등록한다. Counter(카운터) https://prometheus.io/docs/concepts/metric_types/#counter Metric types | Prometheus An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting app..

Ch09. 모니터링 메트릭 활용 - 메트릭 등록(예제 만들기)

앞서 보았듯이 CPU 사용량, 메모리 사용량, 톰캣 스레드, DB 커넥션 풀과 같이 공통으로 사용되는 기술 메트릭은 이미 등록되어 있다. 우리는 이런 이미 등록된 메트릭을 사용해서 대시보드를 구성하고 모니터링하면 된다. 여기서 더 나아가서 비즈니스에 특화된 부분을 모니터링 하고 싶으면 어떻게 해야 할까? 예를 들어서 주문수, 취소수, 재고 수량 같은 메트릭들이 있다. 이 부분은 공통으로 만들 수 있는 부분은 아니고, 각각의 비즈니스에 특화된 부분들이다. 이런 메트릭들도 시스템을 운영하는데 상당히 도움이 된다. 예를 들어서 취소수가 갑자기 급증하거나 재고 수량이 임계치 이상으로 쌓이는 부분들은 기술적인 메트릭으로 확인할 수 없는 우리 시스템의 비즈니스 문제를 빠르게 파악하는데 도움을 준다. 예를 들어서 택..