Spring/Spring 기초2025. 6. 19. 00:36[Spring/기초] 외부 Api를 호출해서 서버 날리기 (외부 Api 호출 위험성 낮추기)

그냥 예외처리만 잘했는데요?좋아 그럼 너의 서버는 외부 api장애시 thread pool을 전부다 소모해버릴 것이다.외부 Api 호출시 생길수 있는 문제는 다음과 같다.타임아웃 미설정 - 외부 Api가 느려도 응답을 기다리며 스레드 점유벌크헤드 없음 - 외부 Api호출이 하나의 공유 스레드풀, 리소스풀을 사용해 장애가 전파됨서킷 브레이커 없음 - 실패가 연속해서 발생해도 계속 api를 호출함Retry 백오프 없음 - 일시적인 장애인데도 retry를 짧은 시간동안 계속 반복멱등성 없음 - 재시도 요청이 중복처리됨그럼 이제 이들의 자세한 원인 해결 법을 알아보자타임 아웃 미설정서블릿 서버의 경우 1요청 1스레드를 점유하게된다. 이때 wait time 설정이없어서 무한정 대기한다면 금방 스레드 풀이 소모될 것..

[Spring/기초] Valid 예외 처리 + 404, 405 (2)
Spring/Spring 기초2024. 9. 13. 01:23[Spring/기초] Valid 예외 처리 + 404, 405 (2)

문제지금 식별한 부분중 처리되지 않는 에러MethodArgumentNotValidException 400MissingServletRequestParameterException 400HandlerMethodValidationException 400NoHandlerFoundException 404HttpRequestMethodNotSupportedException 405이들은 공통응답처리가 되지 않았다valid, validate, 없는 url과 없는 method로 호출할때가 공통응답 처리가 되지 않았다.@RestControllerAdvicepublic class GlobalExceptionHandler extends ResponseEntityExceptionHandler이유는 ResponseEntityExc..

[Spring/기초] api 공통 응답 포맷 + 예외 처리 합치기 (2)
Spring/Spring 기초2024. 7. 15. 17:48[Spring/기초] api 공통 응답 포맷 + 예외 처리 합치기 (2)

공통 응답 포맷을 만드는 이유일관된 응답 형식 유지모든 API 응답을 일관된 형식으로 유지할 수 있다.이는 전체적인 프로그램의 유지 보수성을 높인다.로깅 및 모니터링같은 방식으로 응답을 하니 로깅 및 모니터링이 더 쉬워진다.보안 및 데이터 검증응답을 전역적으로 처리함으로써 민감한 정보를 숨기거나 데이터를 검증하는 등의 보안 작업을 일관되게 수행할 수 있다.ResponseBodyAdvice 공통 응답 포맷1. 공통 응답 코드 형식 정하기public interface ResponseCode { String name(); HttpStatus getHttpStatus(); String getData();}클라이언트에게 공통 응답 코드를 어떤 형식으로 보내줄 것인지 정의한다.@Getter@Requ..

[Spring/기초] 전역 예외 처리 + Test Code (1)
Spring/Spring 기초2024. 7. 14. 22:17[Spring/기초] 전역 예외 처리 + Test Code (1)

전역 예외 처리를 해야하는 이유Spring은 에러 처리를 위한 BasicErrorController를 구현해뒀다. 그래서 예외가 발생한다면 기본적으로 /error로 에러 요청을 다시 전달하도록 WAS 설정을 해놨다.이것은 Springboot의 WebMvcAutoConfiguration을 통해서 자동으로 이루어진다. 일번적 요청의 흐름은 다음과 같이 진행된다.WAS(톰캣)필터서블릿 (디스패처 서블릿)인터셉터컨트롤러예외가 발생했을 때 별도의 처리를 하지 않았다면 WAS까지 에러가 전달된다. 이때 WAS는 애플리케이션에서 처리를 못하는 예외라 exception이 올라왔다 판단, 대응 작업을 진행한다.컨트롤러(예외 발생)인터셉터서블릿 (디스패처 서블릿)필터WASWAS는 스프링 부트가 등록한 에러 설정에 맞게 요..

[Spring/기초] RestController  완벽 정리 (return type, 파라미터, 추가 개념 및 기능)
Spring/Spring 기초2024. 6. 23. 22:37[Spring/기초] RestController 완벽 정리 (return type, 파라미터, 추가 개념 및 기능)

내가 정리해두고 두고두고 볼라고 만든RestController 완벽 정리정리할 것, 예시코드 예시코드를 사용한 상세 설명 순으로 구성했다.Title - Excode - Description(3쌍)Return Type 정리1.기본 객체 및 컬렉션단일 객체@GetMapping("/user/{id}")public User getUser(@PathVariable Long id) { return userService.findById(id);}//예시 Json 응답{ "id": 1, "name": "John Doe", "email": "john.doe@example.com"} 객체를 반환 json으로 변환 해줌 리스트 or 맵 같은 컬렉션@GetMapping("/users")public Lis..

[Spring/기초] 환경 변수 파일 사용하기 (env.properties)
Spring/Spring 기초2024. 5. 28. 22:04[Spring/기초] 환경 변수 파일 사용하기 (env.properties)

Spring Boot에서 환경변수 파일로 민감한 정보 따로 보관하기환경변수를 Spring boot 프로젝트 전역에서 사용하려면 따로 설정을 해줘야 한다.그럼 한번 방법을 알아보자1. 변수 파일 생성recources/properties 폴더 생성 후 env.properties파일 생성2. env 파일에 환경변수 적기DB_HOST=localhostDB_PORT=5432DB_NAME=exampleDBDB_USERNAME=postgresDB_PASSWORD=1234요런식으로 자신이 원하는 변수들 적기꼭 .gitignore에 적어서 변수가 git에 안올라가도록 하자3. env 파일을 사용할 수 있도록 Spring boot에 연결config폴더에 PropertyConfig.java 생성package com.exam..

728x90
image