일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링
- 스프링 핵심 원리
- db
- JDBC
- Proxy
- pointcut
- kotlin
- Thymeleaf
- AOP
- 자바
- 알고리즘
- 인프런
- java
- Servlet
- Exception
- 스프링 핵심 기능
- http
- 김영한
- spring
- springdatajpa
- SpringBoot
- 그리디
- QueryDSL
- 백준
- Spring Boot
- transaction
- Greedy
- jpa
- Android
- JPQL
- Today
- Total
목록인프런 (528)
개발자되기 프로젝트
1. ConversionService 개별 컨버터를 모아두고 그것들을 묶어서 편리하게 사용할 수 있는 기능 package org.springframework.core.convert; import org.springframework.lang.Nullable; public interface ConversionService { boolean canConvert(@Nullable Class sourceType, Class targetType); boolean canConvert(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType); T convert(@Nullable Object source, Class targetType); Object conver..
타입 컨버터를 사용하려면 org.springframework.core.convert.converter.Converter 를 구현 ㅋㅋㅋㅋ Converter라는 인터페이스가 너무 많음.. 조심 ㅎㅎ 1. String -> Integer import lombok.extern.slf4j.Slf4j; import org.springframework.core.convert.converter.Converter; @Slf4j public class StringToIntegerConverter implements Converter { @Override public Integer convert(String source) { log.info("convert source= {}", source); return Integer..
1. ex) 문자 -> 숫자 @RestController public class HelloController { @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request){ String data = request.getParameter("data"); //문자 타입 조회 Integer integer = Integer.valueOf(data); //숫자 타입으로 변경 System.out.println("integer = " + integer); return "ok"; } } 분석 localhost:8080/hello-v1?data=10 String data = request.getParameter("data") HTTP 요청 파라미..
@ExceptionHandler 를 사용해서 예외를 깔끔하게 처리할 수 있게 되었지만, 정상 코드와 예외 처리 코드가 하나의 컨트롤러에 섞여 있다. @ControllerAdvice 또는 @RestControllerAdvice 를 사용하면 둘을 분리할 수 있다. 1.@ControllerAdvice Controller에 있던 오류 처리 코드를 분리해 내자. @RestControllerAdvice를 적용한 ExControllerAdvice 클래스를 생성하여 코드를 여기로 옮겨놓자. 그러면 여러 controller에서 발생한 Exception을 ControllerAdvice에서 처리해줌. @Slf4j @RestControllerAdvice public class ExControllerAdvice { @Respo..
1. HTML 화면 오류 & API 오류 웹 브라우저에 HTML 화면을 제공할 때는 오류가 발생하면 BasicErrorController 사용이 편함 이때는 단순히 5xx, 4xx 관련된 오류 화면을 보여주면 된다. BasicErrorController 는 이런 메커니즘을 모두 구현해둠. 그런데 API는 각 시스템 마다 응답의 모양도 다르고, 스펙도 모두 다르다. 예외 상황에 단순히 오류 화면을 보여주는 것이 아니라, 예외에 따라서 각각 다른 데이터를 출력해야 할 수도 있다. 그리고 같은 예외라고해도 어떤 컨트롤러에서 발생했는가에 따라서 다른 예외 응답을 내려주어야 할 수 있다. 즉 세밀한 제어가 필요하다. 2. API예외 처리의 어려운 점. HandlerExceptionResolver 를 떠올려 보면 ..
1. DefaultHandlerExceptionResolver DefaultHandlerExceptionResolver 는 스프링 내부에서 발생하는 스프링 예외를 해결. 대표적으로 파라미터 바인딩 시점에 타입이 맞지 않으면 내부에서 TypeMismatchException 이 발생하는데, 이 경우 예외가 발생했기 때문에 그냥 두면 서블릿 컨테이너까지 오류가 올라가고, 결과적으로 500 오류가 발생한다. 그런데 파라미터 바인딩은 대부분 클라이언트가 HTTP 요청 정보를 잘못 호출해서 발생하는 문제이다. HTTP 에서는 이런 경우 HTTP 상태 코드 400을 사용하도록 되어 있다. DefaultHandlerExceptionResolver 는 이것을 500 오류가 아니라 HTTP 상태 코드를 400으로 변경 2..
1. Spring에 제공하는 ExceptionResolver HandlerExceptionResolverComposite 에 다음 순서로 등록 ExceptionHandlerExceptionResolver @ExceptionHandler 을 처 API 예외 처리는 대부분 이 기능으로 해결 ResponseStatusExceptionResolver HTTP 상태 코드를 지정해준다. 예) @ResponseStatus(value = HttpStatus.NOT_FOUND) DefaultHandlerExceptionResolver 우선 순위가 가장 낮다. 스프링 내부 기본 예외를 처리한다 2. ResponseStatusExceptionResolver ResponseStatusExceptionResolver 는 예외에..
1.예외를 ExceptionResolver에서 마무리하기 예외가 발생하면 WAS까지 예외가 던져지고, WAS에서 오류 페이지 정보를 찾아서 다시 /error 를 호출하는 과정은 생각해보면 너무 복잡하다. ExceptionResolver 를 활용하면 예외가 발생했을 때 이런 복잡한 과정 없이 ExceptionResolver에서 문제를 깔끔하게 해결- > BasicErrorController호출하는 등의 절차가 없음. 2. UserException 임의의 예외를 만듦 public class UserException extends RuntimeException{ public UserException() { super(); } public UserException(String message) { super(me..