Spring 16

JMX(Java Management Extensions)와 Spring Actuator

Java로 어플리케이션을 개발했다면, 모니터링은 어떻게 할까?Java에는 어플리케이션 모니터링을 위한 JMX(Java Management Extensions)가 있다.이번 글에서는 JMX가 어떻게 Java 어플리케이션을 모니터링하는데 도움을 주는지 정리하겠다. 여기에 더해 Spring Actuator가 어떻게 JMX를 사용하고 있는지도 정리하겠다. JMX 정의와 동작 방식 JMX는 크게 3가지 컴포넌트로 구성되어 있다. Instrumentation쉽게 설명하면, 모니터링하고자 하는 리소스에 계측기를 다는 과정이다.이는 엄청 간단하다, JMX Specification에 따라 MBean을 구현하고, MBean 서버에 등록하면 된다. JMX AgentJMX Agent는 자원을 직접 제어하고, 자원들을 워녁 관..

Java 2026.01.12

Java 라이브러리 개발 실전 로그: Gradle 의존성, Maven 배포, 그리고 Spring 자동 설정

Java로 라이브러리를 개발하는 과정은 단순히 기능을 구현하는 것에서 끝나지 않습니다. 내가 만든 라이브러리를 사용자가 얼마나 편리하게 이용할 수 있는지 고민하는 것이 핵심입니다.이 글은 라이브러리를 개발하면서 겪었던 고민과 해결 과정을 정리한 '실전 로그'입니다. 다음 세 가지 주제를 중심으로 라이브러리의 완성도를 높이는 방법을 공유합니다.Gradle Dependencies: api와 implementation의 차이를 명확히 이해하고 의존성을 올바르게 전파하는 방법Maven Repository: 개발한 라이브러리를 maven-publish 플러그인을 이용해 배포하는 과정Spring Auto Configuration: Spring Boot 환경에서 라이브러리가 '마법처럼' 동작하도록 자동 설정을 제공하..

개발 경험기 2025.11.15

Spring 우아하게 종료하기

우아하게 종료해야 하는 이유: Graceful Shutdown의 필요성API 서버를 운영하다 보면 배포나 오토스케일링(HPA) 등으로 인해 서버 프로세스가 갑작스럽게 종료될 수 있다. 만약 이 과정에서 현재 처리 중이던 요청이 강제로 중단된다면, 사용자에게는 불완전한 응답이 전달되고 데이터 손실이나 서비스 장애로 이어질 수 있다. 이러한 문제를 막기 위해서는 프로세스가 종료되더라도 기존에 진행하던 작업들은 끝까지 완료하도록 하는 '우아한 종료(Graceful Shutdown)' 처리가 필수적이다. 이번 글을 통해 Spring이 종료되는 흐름과, 우아하게 종료하려면 어떤 설정들을 추가해야 하는지 정리하겠다. 스프링이 종료되는 과정 Kubernetes 환경에서는 보통 SIGTERM을 이용해 수행중인 Proc..

Spring 2025.08.18

Spring DataSource 설정 팁!

Spring을 이용해 애플리케이션 개발시 DB를 사용했다면, DataSource 설정을 해본 경험이 누구나 있을것이다.DataSource 설정 관련해 몇 가지 Tip을 공유하고자한다. LazyConnectionDataSourceProxy개발을 하다보면, 간혹 DB Connection Pool이 부족해 애플리케이션 성능이 떨어질때가 있다. 다양한 원인이 있을 수 있지만, 이때 하나의 Thread가 DB Connection을 너무 오래 갖고있지 않은지 확인해 볼만하다. 만약 그게 원인이라면 LazyConnectionDataSourceProxy를 이용해 성능을 개선할 수 있다. LazyConnectionDataSourceProxy 객체를 DataSource로 사용하면 실제 DB 연결이 필요한 시점에 DB Co..

Spring 2025.04.23

Zookeeper 이용해 Spring에서 동적으로 설정 값 변경하기

서비스를 운영하다보면 서버의 설정 값들을 동적으로 바꾸고 싶은 니즈가 생긴다. 이럴때 Zookeeper를 이용하면 손쉽게 동적으로 변경 가능한 설정값을 사용할 수 있다. Spring과 Zookeeper  연동Spring과 Zookeeper를 연동하면, Spring Environment를 이용해 Zookeeper Node에 있는 데이터를 읽어올 수 있다. 여기서 장점은 데이터를 로컬에 저장해두기 때문에 빠르게 원하는 데이터를 가져올 수 있다는 점이다. 연동 가이드는 아래 문서를 참고하면 쉽게 연동할 수 있다.https://docs.spring.io/spring-cloud-zookeeper/reference/config.html Distributed Configuration with Zookeeper :: ..

Spring 2025.04.02

Feign Client 사용법 익히기

What is Feign ClientFeign Client는 Java에서 HTTP 요청 작업을 수행할때 사용할 수 있는 Http Client 중 하나이다.Feign Client가 나오게 된 배경은 HTTP 요청의 복잡성을 줄여주기 위해 나왔다.Feign's first goal was reducing the complexity of binding Denominator uniformly to HTTP APIs regardless of ReSTfulness.ref - https://github.com/OpenFeign/feign?tab=readme-ov-file#feign-simplifies-the-process-of-writing-java-http-clients GitHub - OpenFeign/feign:..

Spring 2025.03.30

WebClient를 이용한 외부 호출 관련 Metric 수집

서비스를 운영하다보면 내 서비스가 호출하는 API 호출량을 모니터링 하고 싶은 경우가 있다. 내 서비스가 외부 서비스 API를 너무 과하게 호출하고 있지는 않은지 점검할 수 있다. WebClient를 통한 외부 호출 모니터링Spring에서 외부 API를 호출하기 위해 대표적으로 RestTemplate과 WebClient를 제공한다. 만약 Spring에서 생성해준 Builder를 주입받아 RestTemplate, WebClient 객체를 만들었다면, 기본적으로 Metric이 수집된다. 즉, Grafana를 통해 모니터링 할 수 있다. ref : https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/production-ready-metri..

Spring 2025.03.02

Application Context Refresh 전에 로깅 설정하기

개발 중 Application Context가 Refresh 되기전 비정상 종료하면 내가 설정한 로그 파일이 적용되지 않는 이슈를 발견했고, 이 이슈를 해결한 과정을 공유한다. 배경기존 프로젝트에 새로운 Profile을 추가하는 과정에 Java 프로그램이 제대로 실행되지 않는 이슈 발생했다.원인은 Zookeeper 설정 누락으로 새로운 Profile에 대한 Zookeeper endpoint를 제대로 지정하지 않아 실패했다. 원인은 간단하지만, 로그가 내가 설정한데로 동작하지 않아 로그를 찾는데 오랜 시간이 걸렸다...그럼 왜 로그 설정이 내가 원하는데로 되지 않았을까? 로그 설정이 적용되지 않은 이유두괄식으로 이유만 먼저 말하면 application.yaml의 logging.config에 설정한 값은 A..

Spring 2025.02.17

Spring Event UnderTheHood

Spring을 이용해 개발하다보면, 모듈간 결합도를 낮추기 위해 Spring Event를 활용하는 케이스가 있다. Spring Event를 편리하게 사용하고 있다 문득 내부 동작 원리가 궁금해 코드를 살펴봤다. 이번글은 Spring Event 동작 방식에 대해 설명하는 글이다. 크게 2가지 동작의 원리를 살펴보겠다.1. @EventListener 애노테이션을 통한 Handler 등록 과정2. ApplicationEventPublisher를 이용해 Event를 발행할 때 Event가 Listener로 전송되는 과정 @EventListener 애노테이션을 통한 Handler 등록 과정FlowApplicationContext Refresh 과정에 EventListenerMethodProcessor 부터 @Ev..

Spring 2025.02.04

[인프런 X VMware Tanzu] Spring Boot 밋업 with Josh Long 후기

좋은 기회로 Josh Long님이 Java21과 SpringBoot 3.x에 대해 소개해주는 밋업에 참여했다.깊이 있는 내용을 다루기엔 시간이 짧았지만, Java21과 SpringBoot 3.x에서 제공해주는 새로운 기능들과 이 기능들의 활용 방법에 대한 아이디어를 얻을 수 있었다. Java21의 DATA ORIENTED PROGRAMMIG 지원 요즘 인프라의 트랜드는 서비스를 작은 서버에 여러대에 올려 필요에 따라 scale out/in해 사용한다.작은 서버에 애플리케이션을 실행시키기 때문에 하나의 서비스가 하는 역할이 작아졌고, 다른 서비스들과 메시지를 주고 받을 일이 많아졌다. 그리고 이러한 상황에 DATA ORIENTED PROGRAMMING 방식을 사용하면 목적에 맞는 코드를 작성할 수 있다. ..

Conference 2024.10.01