Framework/Spring Boot 75

ClientAbortException

🌈 TIL큰 문제는 아니고, 서버에서 응답을 보내주기 전에 클라이언트와 연결이 끊긴다고 생각하면 될 것 같다.    참고 👇👇👇https://serverwizard.tistory.com/301 ClientAbortException은 언제 발생하는가?서비스 모니터링을 하다가 아래처럼 ClientAbortException(java.io.IOExceiption: Broken pipe)이 발생하고 있는 것을 확인했다. 이에 해당 Exception이 언제 발생하는지를 분석해 봤다. 일단 해당 로그를 보면서serverwizard.tistory.com

bucket4j를 이용한 요청 횟수 제한

☀️ bucket4j 의존성 추가implementation 'com.bucket4j:bucket4j-core:8.10.1'  🐒 1분에 최대 3번의 요청을 받을 수 있도록 설정@Configurationpublic class BucketConfig { @Bean public Bucket bucket() { final Refill refill = Refill.intervally(3, Duration.ofSeconds(60)); final Bandwidth limit = Bandwidth.classic(3, refill); return Bucket.builder().addLimit(limit).build(); }}  🍔 API 호출 시 1씩 차감제한된 ..

[Error] 'org.springframework.batch.core.configuration.annotation.JobBuilderFactory' that could not be found.

🐛 문제Parameter 0 of constructor in com.sieum.batch.job.DeleteThrownMusic required a bean of type 'org.springframework.batch.core.configuration.annotation.JobBuilderFactory' that could not be found.  😎 해결@EnableBatchProcessing 어노테이션을 붙여주면 빈 주입을 해준다.@EnableBatchProcessing@SpringBootApplicationpublic class BatchApplication { public static void main(String[] args) { SpringApplication.run(..

prometheus와 SpringBoot 연동

🥐 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-actuator'runtimeOnly 'io.micrometer:micrometer-registry-prometheus' 🐣 Swagger 3.0과 actuator 충돌 문제 해결초기화 후에 호출되는 메서드 postProcessAfterInitialization을 재정의빈 타입이 WebMvcRequestHandlerProvider 또는 WebFluxRequestHandlerProvider일때 로직 수행WebMvcRequestHandlerProvider 또는 WebFluxRequestHandlerProvider 클래스에서 handlerMappings 이름을 가진 빌드를 찾는다.pa..

[Error] No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.sieum.batch.feign.MusicFeignClient': Unexpected exception during bean creation; nested exception is java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?Caused by: java.lang.IllegalStateException: No Feign Client..

[Error] Uncaught exception: feign.RetryableException

@PostMapping@Operation(summary = "백엔드 내부에서 토스페이먼츠 결제 승인 API 호출")public ResponseEntity callConfirmAPI(@RequestBody ConfirmPaymentsRequest confirmPaymentsRequest) { paymentsConfirmClient.execute(confirmPaymentsRequest); testService.call(confirmPaymentsRequest); return ResponseEntity.ok().build();} contextPath가 /payments다.위 코드 같은 경우에는 POST /payments로 요청을 보내는데 이렇게 하니까 feign.RetryableExcepti..

[Error] Error creating bean with name 'stackResourceRegistryFactoryBean'

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cloud.aws.core.env.ResourceIdResolver.BEAN_NAME': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stackResourceRegistryFactoryBean' defined in class path resource [org/springframework/cloud/aws/au..

WebFlux

Spring MVC Servlet 기반으로 만들어졌다. sync + blocking 방식으로 동작 하나를 처리할 때 Response를 기다리며 thread를 지연 Multi Thread를 사용하면 block되지 않고 사용할 수 있지만, Thread 간의 Context Switch 발생 시 비용이 생겨 비효율적 WebFlux Spring5에서 새롭게 추가된 모듈 클라이언트와 서버에서 Reactive한 개발을 할 수 있게 도와줌 요청이나 응답을 처리하는 I/O를 async + non blocking으로 방식으로 수행 성능을 최대로 내기 위해서는 모든 I/O 작업이 non blocking 기반으로 동작해야 한다. I/O 작업이 block 되는 곳이 있다면 event loop meltdown 현상으로 다른 작업..