Spring 기초(41)
-
API 예외 처리 (2) - 스프링이 제공하는 ExceptionResolver
스프링 부트가 기본으로 제공하는 ExceptionResolver 는 다음과 같다. HandlerExceptionResolverComposite 에 다음 순서로 등록 되어있다. 1. ExceptionHandlerExceptionResolver 2. ResponseStatusExceptionResolver 3. DefaultHandlerExceptionResolver -- 우선 순위가 가장 낮다. ExceptionHandlerExceptionResolver @ExceptionHandler 을 처리한다. API 예외 처리는 대부분 이 기능으로 해결한다. 잠시 뒤에 자세히 설명한다. ResponseStatusExceptionResolver HTTP 상태 코드를 지정해준다. 예) @ResponseStatus(va..
2022.04.09 -
API 예외 처리 (1) - MediaType, ExceptionResolver
HTML을 응답으로 보내주는 경우에는 예외처리를 4xx, 5xx 등의 오류 페이지만 있다면 대부분의 문제를 해결 가능했다. 이에 대한 포스팅은 https://mr-popo.tistory.com/53?category=1004552 스프링 예외 처리와 오류 페이지 서블릿은 크게 두가지 방식으로 예외 처리를 지원한다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) Exception(예외) 자바의 메인 메서드를 실행하면 main이라는 이름의 쓰레드가 실행 mr-popo.tistory.com 지금부터 API의 경우 어떻게 예외 처리를 하면 좋은지 알아보자! @Slf4j @RestController public class ApiExceptionController {..
2022.04.09 -
스프링 예외 처리와 오류 페이지
서블릿은 크게 두가지 방식으로 예외 처리를 지원한다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) Exception(예외) 자바의 메인 메서드를 실행하면 main이라는 이름의 쓰레드가 실행된다. 실행 도중에 예외 처리를 하지못하고 처음 실행한 main()메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 웹 애플리케이션의 경우, 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무런 문제가 없다. 그런데 만약에 애플리케이션에서 예외를 잡지 못하고, 서블릿 밖으로 까지 예외가 전달되면 어떻게 동작할까? 톰캣 같..
2022.04.06 -
로그인 처리 - 필터, 인터셉터(2)
로그인 처리 - 필터, 인터셉터(1) 에서 필터를 다루었다. 본 게시물에서는 인터셉터를 다룬다. 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다. 하나씩 살펴보자! 인터셉터의 위치는 디스패처 서블릿과 컨트롤러 사이에 위치해있다. 앞서 배운 필터는 서블릿에서 전처리를 한다면, 인터셉터는 컨트롤러로 날아가는 요청을 낚아채 후딱딱 처리한다음 컨트롤러로 보내는(혹은 보내지 않는) 역할을 수행한다. HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터..
2022.04.05 -
로그인 처리 - 필터, 인터셉터 (1)
로그인 처리 - 필터, 인터셉터 (1) 게시물은 필터를 다룹니다. 로그인 처리 - 필터, 인터셉터 (2)에서 인터셉터를 다루겠습니다. 필터 다음과 같은 상황이다. 내가 만든 웹사이트에 로그인 하지 않은 사용자는 회원가입, 홈 화면 외에는 접근을 막고싶다. 로그인 하지 않은 사용자가 url로 직접 호출하면 관리, 상세 페이지에 접근이 가능한 상황이다. 이를 막기위해서는 1. 모든 컨트롤러에서 로그인 여부를 체크하는 로직을 개발한다. 세션이 null이거나 session Attribute에서 id가 없으면 로그인 페이지로 쫓아내면 된다. 근데 이렇게 할 경우, 로그인 여부를 체크하는 로직이 변경된다면? 모든 컨트롤러를 다 뒤져가며 일일이 수정해야 한다. 심지어 몇몇 군데는 로그인 여부를 체크하는 로직이 누락될..
2022.04.05 -
@SessionAttribute와 세션정보, 세션 타임아웃 설정
스프링은 세션을 더 편리하게 사용할 수 있도록 @SessionAttribute를 지원한다. 이미 로그인 된 사용자를 찾을 때는 다음과 같이 사용하면 된다. 추가로, required에 false값을 주면 새로운 세션을 생성하지 않는다. @GetMapping("/") public String homeLoginV3Spring( @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model){ ... } 위의 @SessionAttribute는 아래 3단계 과정을 생략할 수 있게 해준다. @SessionAttribute HttpSession session = request.getSession()..
2022.04.04