Web/Spring
-
Spring MVC 2 - API 예외 처리 @ExceptionResolverWeb/Spring 2023. 11. 22. 00:39
- 스프링 부트가 기본으로 제공하는 ExceptionResolver는 다음과 같다. 1. ExceptionHandlerExceptionResolver : @ExceptionHandler 처리 (API 예외 처리 대부분 이 기능 사용) 2. ResponseStatusExceptionResolver : HTTP 상태 코드 지정해줌 (@ResponseStatus) 3. DefaultHandlerExceptionResolver : 스프링 내부 기본 예외를 처리 * HandlerExceptionResolverComposite 에 위 순서로 등록됨 -> null반환하면 계속 다음 것 찾음 -> 없으면 걍 500일 듯(WAS) 1. ReponseStatusExceptionResolver - 예외에 따라 HTTP 상태..
-
Spring MVC 2 - API 예외 처리 HandlerExceptionResolverWeb/Spring 2023. 11. 22. 00:26
1. API 예외 처리 - 시작 - API 예외 처리는 어떻게 해야할 까? - HTML 페이지를 보여주어야 하는 경우 쉽게 처리할 수 있었다. - API 예외는 각 오류 상황에 맞는 오류 응답 스펙을 정의하고, JSON으로 데이터를 내려주어야 한다. @Slf4j @RestController public class ApiExceptionController { @GetMapping("/api/members/{id}") public MemberDto getMember(@PathVariable("id") String id) { if (id.equals("ex")) { throw new RuntimeException("잘못된 사용자"); } return new MemberDto(id, "hello " + id);..
-
Spring MVC (2) - 예외 처리와 오류 페이지Web/Spring 2023. 11. 21. 22:53
1. 서블릿 예외처리 - 서블릿은 2가지 방식으로 예외 처리를 지원한다. (Exception, response.sendError(HTTP 상태코드, 오류메시지)) 1.1 Exception - 자바의 경우 try-catch를 하지 못하고 main쓰레드까지 예외가 던져지면, 예외 정보 출력 후 쓰레드 종료 - 웹 애플리케이션의 경우 예외를 잡지 못하는 경우 인터셉터 -> 서블릿 -> 필터 -> WAS 까지 전파됨 @GetMapping("/error-ex") public void errorEx() { throw new RuntimeException("예외 발생!"); } - 위와 같이 예외를 발생시키면, 톰캣 기본 오류 화면을 볼 수 있다. (HTTP Status 500 - Internal Server Err..
-
Spring MVC (2) - 스프링 포맷터Web/Spring 2023. 11. 21. 12:14
1. Formatter란? - Converter는 입력 및 출력 타입에 제한이 없는, 범용 타입 변환 기능을 제공함 - 일반적인 웹 애플리케이션 환경에서는 문자 - 타입간 변환이 많다 - 특히 Integer -> String (1000 -> "1,000") 혹은 ("1,000" -> 1000) - 날짜 객체 ("2021-01-01 10:50:11")을 Date 객체로 변환하거나 그 반대 상황이 많다. (특히 날짜 표현 방법은 Locale 현지화 정보가 사용될 수 있다.) - 이러한 상황에서 문자-객체 사이 특화된 기능을 제공하는 것이 Formatter이다 *스프링은 용더에 따라 다양한 포맷터를 제공함 > Formatter > AnnotationFormatterFactory -필드의 타입이나 애노테이션 정..
-
Spring MVC(2) - 스프링 타입 컨버터Web/Spring 2023. 11. 21. 11:04
1. 타입 컨버터란? - 문자를 숫자로 변환하거나, 숫자를 문자로 변환하는 일이 굉장히 많음 - 기존 스프링을 사용하면서 @RequestParam, @ModelAttribute, @Pathvariable에서 이게 가능했음 (자동) 추가로 @Value를 통해 정보읽기, XML에 넣은 스프링 빈 정보 변환 + 뷰 렌더링 (요청파라미터, @Value, 뷰렌더링) - 개발자가 직접 새로운 타입을 정의하고, 이에 맞는 타입 컨버터를 등록하고 싶다면 어떻게 해야할까? package org.springframework.core.convert.converter; public interface Converter { T convert(S source); } - 스프링은 확장 가능한 컨버터 인터페이스를 제공함! - 추가적인..
-
SpringMVC 2 - 서블릿 필터와 인터셉터Web/Spring 2023. 11. 15. 23:42
- 서블릿을 호출하기 전에 특정한 처리를 해야할 때 (공통처리) 필터를 사용함 - 여러 로직에서 공통으로 관심 있는 것을 공통 관심사라고 함 (ex 인증) - 공통 관심사는 AOP를 사용할 수도 있지만, 웹과 관련된 관심사는 필터나 인터셉터를 사용하는 것이 좋다. (웹과 관련된 부가 기능을 제공해줌!) * 필터나 인터셉터 구현체를 스프링 빈으로 등록한 뒤에 등록해도됨 만약 필터나 인터셉터 구현체를 만들기 위해 여러 의존객체가 필요하다면 빈으로 등록한 뒤 등록하도록 하자! 1. 서블릿 필터 > HTTP 요청 > WAS > 필터 > 서블릿 > 컨트롤러 순으로 작동함 > 필터에 특정 URL 패턴을 적용할 수 있다. > 필터는 우선순위를 설정해서 여러개 둘 수 있다. (로그필터 > 로그인 필터) > 필터 인터페..