본문 바로가기

Spring

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:.. 더보기
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.. 더보기
Application Context Refresh 전에 로깅 설정하기 개발 중 Application Context가 Refresh 되기전 비정상 종료하면 내가 설정한 로그 파일이 적용되지 않는 이슈를 발견했고, 이 이슈를 해결한 과정을 공유한다. 배경기존 프로젝트에 새로운 Profile을 추가하는 과정에 Java 프로그램이 제대로 실행되지 않는 이슈 발생했다.원인은 Zookeeper 설정 누락으로 새로운 Profile에 대한 Zookeeper endpoint를 제대로 지정하지 않아 실패했다. 원인은 간단하지만, 로그가 내가 설정한데로 동작하지 않아 로그를 찾는데 오랜 시간이 걸렸다...그럼 왜 로그 설정이 내가 원하는데로 되지 않았을까? 로그 설정이 적용되지 않은 이유두괄식으로 이유만 먼저 말하면 application.yaml의 logging.config에 설정한 값은 A.. 더보기
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.. 더보기
[인프런 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 방식을 사용하면 목적에 맞는 코드를 작성할 수 있다. .. 더보기
Spring @Transactional 동작원리 완벽 정리 들어가면서 Spring을 이용해 개발하다보면 누구나 한 번은 @Transactional을 사용해 본 경험이 있을 것이다. 나 또한 애플리케이션을 개발하며 @Transactional을 굉장히 많이 사용한 경험이 있다. 그러다 문득 @Transactional의 동작원리를 제대로 이해하지 않고 사용하고 있다는 생각이 들었다. 어렴풋이 @Transactional을 사용하면 비지니스 로직중 예상하지 못한 문제로 예외가 발생했을때 데이터 정합성을 보장하기 위해 그동안 수정된 데이터를 원복한다고만 이해하고 있었다. 그래서 이번기회에 @Transactional이 내부적으로 어떻게 동작하는지 이해하고 싶어 Spring 코드를 뜯어봤다. 이번 글에서는 Spring 코드를 뜯어보면서 이해한 내용을 정리해 공유하려고 한다.. 더보기
테스트의 Spring Container와 운영 환경의 Spring Container가 다르다..? 들어가면서 이번 글에서는 개발하면서 만난 이슈를 해결해 가는 과정을 공유하겠다. Issue 서버 상태를 확인해주는 HealthCheck API를 만들었다. 이 때 ServletWebServerApplicationContext를 이용해 서버 포트 번호를 확인했다. @RestController @RequestMapping("/health") class HealthCheckController( private val webServerAppCtxt: ServletWebServerApplicationContext, ) { @GetMapping("/info") fun serverInfo(request: HttpServletRequest) = mapOf( "IPAdress" to request.getHeader("X-.. 더보기
Spring Data Redis Pub/Sub 파헤치기 들어가면서 Pub/Sub을 지원하는 도구라 하면 보통 RabbitMQ, Apache ActiveMQ, Amazon SQS 와 Apache Kafka를 생각할 것이다. 하지만 Redis도 NoSQL 기능에 더해 Pub/Sub을 지원한다. 이번 글에서는 Redis Pub/Sub과 Spring Data Redis가 어떻게 Redis Pub/Sub을 지원하는지 알아보겠다. 목차 1. Redis Pub/Sub 2. Spring Data Redis로 Redis Pub/Sub 사용하기 3. Spring Data Redis 코드 파헤치기 Redis Pub/Sub Redis의 Pub/Sub 지원은 일반적인 Pub/Sub 기술들과 유사하다. 1. 구독자는 토픽을 구독한다. 2. 토픽에 메시지가 발행될때 메시지가 구독자들에.. 더보기