Framework 82

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..

TypeError: Failed to execute 'fetch' on 'Window' : Request with GET/HEAD method cannot have body.

Swagger에서 GET 메소드로 API를 실행시키니 이런 에러가 떴다.TypeError: Failed to execute 'fetch' on 'Window' : Request with GET/HEAD method cannot have body. 포스트맨에서 호출하면 잘 된다.이상한 점이 GET은 원래 body가 없다고 했는데 그럼 포스트맨이 이상한가?GET에 body를 담아보낼 수도 있고, 안 될수도 있다고 함POST로 바꿈 참고 👇👇👇https://funveloper.tistory.com/157 GET 메소드 요청시 body 를 보낼 수 있을까?안녕하세요. 루루개발자 입니다. 이번에는 GET 메소드로 요청을 보낼 때, body 를 같이 보내는 것이 가능한지 알아보고자 합니다. GET 메소드에 대..

Framework/Spring 2024.04.26

[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..

gRPC 구현 예제

🌹 TILgRPC 서버 포트를 0번을 하지말자. 0번으로 했다가 다시 실행하면 랜덤으로 바껴서 다른 컴포넌트에서 gRPC 서버를 찾지 못 했었다.@GrpcClient에 들어가는 파라미터는 gRPC 서버의 spring.application.name  🐭 의존성 추가1. 플러그인 추가id 'com.google.protobuf' version '0.9.2' 2. dependencies 추가// gRPCimplementation 'net.devh:grpc-client-spring-boot-starter:2.13.1.RELEASE'// protobufimplementation 'com.google.protobuf:protobuf-java:3.22.2'implementation project(':proto') ..

Framework/gRPC 2024.03.21

[MyBatis] 순서가 있는 답글

🟠 요구사항 답글은 최근에 등록된 것일수록 위에 있게 한다. 위의 이미지에서 18번 답글이 17번 답글보다 더 최신 답글이다. 16번 글은 18, 17번 답글의 부모 게시글이다. reboard 답글 테이블의 필드 article_no 답글이 달린 조상의 번호 depth 쉽게 생각하면, 들여쓰기 step 답글의 정렬 순서 parent_no 원글의 번호(누구의 답글인지?) => 내 바로 위 부모의 번호 🟢 MyBatis 및 서비스 1. 새 글을 작성했을 때 @Transactional @Override public void writeArticle(Reboard reboard) throws Exception { reboardMapper.writeArticle(reboard); reboardMapper.newRep..

Framework/MyBatis 2023.11.27