스프링14 외부 API 예외 처리 전략: 내 서비스와 매핑하는 방법 REST API를 개발하다 보면 외부 API를 호출하고 그에 대한 예외를 처리해야 하는 상황이 자주 발생한다.외부 API에서 내려주는 HTTP 상태 코드와 에러 메시지를 내 서비스의 예외 처리 방식과 일관되게 매핑해야 한다.이 글에서는 외부 API 예외를 내 서비스에서 어떻게 처리하면 좋을지, 그리고 확장 가능한 예외 처리 구조를 어떻게 설계할지 정리해본다. 📒 외부 API 예외 응답의 형태일반적으로 외부 API는 자체적으로 정의한 에러 코드, 에러 메시지를 반환한다.국회 api 예시를 보자.자체적으로 정의한 에러코드, 에러메세지를 반환하고 있다.http 상태코드는 api 마다 다른데, 국회 api는 에러여도 200 ok로 온다. 📒 내 서비스에서의 예외 처리 방식 private void va.. 스프링 2025. 2. 3. 트랜잭션 내부에서 외부 api 호출하지 말자 // CongressmanService @Transactional public NewsListDTO findNewsList(String encryptedCongressmanId, Pageable pageable) { final Long congressmanId = aesUtil.decrypt(encryptedCongressmanId); final Congressman congressman = findById(congressmanId); // 외부 api 호출 final String response = getApiResponse(buildUrlStringForNews(pageable, congressman)); .. 스프링 2025. 2. 3. spring 요청 Validation 검증, 예외 처리 서론최근 tdd 방식으로 사이드프로젝트를 진행중이다.tdd 방식은 시간도 더 걸리고 귀찮지만 이미 테스트코드가 있으니까 리팩터링 시 chat gpt를 적극 활용할 수 있다. 코드를 수정할 때도 테스트 딸깍으로 사이드 이펙트를 확인할 수 있어서 좋다. 또, 실패 테스트 작성 과정에서 예외 처리에 대해 신경쓰게 되어 꼼꼼한 예외처리가 가능해지는 것 같다. 컨트롤러에서 요청값을 받을 때 적용한 예외처리에 대해 간단하게 정리해보고자 한다. Bean Validation @GetMapping("/{encryptedCongressmanId}") public ResponseEntity ratingList( @PathVariable String encryptedCongressmanId, .. 스프링 2025. 1. 16. 테스트 시 @Value 사용 스프링에서 @Value 는 properties 파일에서 속성값을 읽어오는데 쓰인다. 테스트 시에는 @Value를 어떻게 사용할까? public class ValueTest { @Value("${member.password}") private String password; @Test void valueTest() { assertThat(password).isNotNull(); assertThat(password).isEqualTo("babo123!"); }}위 테스트는 password값이 null로 실패한다. @ExtendWith(SpringExtension.class)@ContextConfiguration(classes = TestConfig.clas.. 스프링 2024. 11. 4. dto를 사용해야 하는 이유 작년에 사이드프로젝트를 진행하면서 api서버를 개발했다. 프론트에서 http 요청 바디에 데이터를 넘겨주면 api서버에서는 무조건 dto로 받기로 했다. 팀원이 그렇게 처음부터 정하고 프로젝트를 진행했기 때문에 왜 dto를 사용해야 되는지 고민해보지를 않았다. dto를 쓰지 않은 코드를 보면서 역체감으로? 왜 dto를 쓰는게 좋은 지 느끼게 된 바가 있어 글을 작성해보겠습니다. 어디까지나 제 주관적인 생각입니다. HttpServletRequest getParameter 사용 @RequestMapping("/messages") public ModelAndView make(HttpServletRequest request) { String title = request.g.. 스프링 2024. 9. 1. ApplicationContext 출처김영한님 스프링 핵심 원리 기본편 강의https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보www.inflearn.com 스프링 컨테이너가 필요한 이유스프링 컨테이너가 무엇인지 알아보기 전에 먼저 스프링 컨테이너가 왜 필요한지 알아보자. public class OrderServic.. 스프링 2024. 8. 28. 서블릿과 MVC 패턴과 프론트 컨트롤러 패턴 서블릿이란?서블릿(Servlet)이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다. 서블릿은 클라이언트의 요청에 따라 동적으로 작동하는 웹 애플리케이션 컴포넌트이다. 서블릿이 필요한 이유서블릿을 사용하면 개발자는 의미있는 비즈니스 로직 개발에만 집중하면 되므로 효율적인 개발이 가능하다. @WebServlet(name = "helloServlet", urlPatterns = "/hello")public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest.. 스프링 2024. 8. 27. 카카오 로그인 rednose 프로젝트를 진행하면서 카카오 로그인 부분을 맡았고 관련해서 배운 점들을 정리해보겠습니다.카카오 로그인kakao developers 문서에서 설명하는 흐름은 위와 같습니다. 먼저 사용자는 프론트엔드에서 제공하는 kakao login 버튼을 눌러 카카오 로그인을 시도합니다.step1사용자가 카카오계정 로그인과 동의 화면에서 동의하고 계속하기를 클릭하면 kakao auth server에서 인가코드를 redirect uri로 보내줍니다. 이 redirect uri는 저희가 kakao developers에 앱을 등록하고 정할 수 있습니다. 인가 코드를 받고자 하는 uri를 지정하면 됩니다. @AccessibleWithoutLogin @GetMapping("/login/kakao") .. 스프링 2024. 8. 2. @RestControllerAdvice를 활용한 스프링 예외 처리 서론 프로젝트를 진행하며 예외처리에 관해 가은님과 의견차이가 있었다. public enum ErrorCode { INVALID_REQUEST_BODY, SOLUTION_NOT_FOUND, PROBLEM_NOT_FOUND, PROBLEM_LINK_NOT_FOUND, COMMENT_NOT_FOUND, ... 이하생략 } 현재 우리가 사용하는 ErrorCode는 위와 같다. public class SolutionNotFoundException extends NotFoundException { public SolutionNotFoundException() { super(SOLUTION_NOT_FOUND, "풀이를 찾을 수 없습니다."); } } 커스텀한 예외 클래스에서 예외코드를 사용할 때는 위와 같이 예외메세.. 스프링 2023. 12. 19. SpringDataJpa 사용자 정의 Repository 적용 사용자 정의 Repository가 필요한 이유 public interface ReviewRepository extends JpaRepository{ ... } Spring이 JpaRepository를 상속하는 인터페이스의 구현체를 자동으로 생성해준다. Service에서는 자동 생성된 구현체를 주입받아 사용한다. 기본으로 제공하는 메서드들을 사용할 수 있다. 더해서 명명규칙에 따라 메서드를 작명하면 알아서 쿼리를 짜준다. 개발자는 메서드를 가져다 쓰기만 하면 되는 편리한 기능이다. https://zara49.tistory.com/130 [JPA] JPA Repository 메서드 명명규칙 JPA는 우리가 쿼리를 열심히 짜는것을 대신해 간단하게 표현하여 쿼리를 사용할 수 있도록 해준다. 그렇다면 어떤 형태로.. 스프링 2023. 12. 9. Pageable 프로그레인저 프로젝트에서 페이지네이선에 Pageable 객체를 사용하도록 전체적인 수정사항이 있었다. Pageable을 사용하는 편이 통일성도 있고, 코드도 간결해지고.. 여러 장점이 있는 것 같다. 다만 내가 구현한지 좀 지난 기능들이고 그때는 구현이 급해서 참고한 내용들을 따로 정리를 못했다. 그래서 관련 내용들이 기억이 잘 안난다.. 내용을 복습하고 정리해보자. https://tecoble.techcourse.co.kr/post/2021-08-15-pageable/ Pageable을 이용한 Pagination을 처리하는 다양한 방법 Spring Data JPA에서 Pageable 를 활용한 Pagination 의 개념과 방법을 알아본다. Pageable을 활용한 Pagination… tecoble... 스프링 2023. 12. 8. 메세지, 국제화 메세지 다양한 메세지를 한 곳에서 관리하는 기능을 메세지 기능이라 한다. 메세지 기능을 사용하려면 스프링이 제공하는 MessageSource를 스프링 빈으로 등록해야 한다. MessageSource는 인터페이스이므로 ResourceBundleMessageSource 구현체를 스프링 빈으로 등록해야 한다. @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasenames("messages", "errors"); messageSource.setDefaultEncoding("utf-8"); return mes.. 스프링/스프링mvc2 2023. 10. 11. 이전 1 2 다음