티스토리 뷰

Java의 예외처리

Exception (예외)

특수한 처리를 필요로 하는 비상적 또는 예외적 상황

 

 

Spring Boot의 예외처리 방법들

ResponseStatusException

단발적 예외: 해당 예외 처리를 위한 메소드를 만들 필요까지는 없을 때 사용

스프링부트 내부에서 자동적으로 처리할 준비가 되어있다는 점이 가장 큰 장점

빠르게 기능을 구현해보기 위한 개발 초기단계에서 주로 사용

\

@ExceptionHandler

Controller 내부에서 함수에 붙여 선언함으로써 특정한 예외를 처리할 때 사용 

@ExceptionHandler가 붙은 함수는 지정된 예외에 대해서 예외를 처리할 때 동작하는 함수가 됨

자신이 선언된 컨트롤러 내부에서만 작동 

HandlerExceptionResolver

실제 예외를 처리하는 Handler를 구성함으로써 전역적으로 어플리케이션 전체에 예외 처리를 적용할 때 사용

@ControllerAdvice

bean의 일종으로 ExceptionHandler를 모아놓은 역할


Interceptors & Filters

Filter & Interceptor 기본 개념

모든 사용자가 해야하는 기능 중 일부(보안 등)을 구현하기 위해 Filter를 사용

Filter

Spring Boot의 일부가 아니고 / JavaX(Jakarta) Servlet API 에 구현되어(정의되어) 있는 인터페이스

(Handler)Interceptor

Spring Framework내부에 구현되어 있음

cf) AOP

reflection: 함수의 이름을 런타임에서 실행 중에 알아냄으로써 그에 따른 행동을 바꿔주고 스트링으로 바꿔서 비교가 가능하게끔 해주는 형태로 작동

interceptor/filter: 요청과 응답이 오고가는 와중에 각자 기능을 적용시킬 수 있도록 만들어진 인터페이스 (구현 난이도가 AOP에 비해 낮음)

예외처리는 대부분 스프링 프레임워크 안에서 일어남

(인터셉터에서 발생한 예외는 설정해둔 예외처리 항목하에서 작동하는데, 필터에서 발생하는 예외는 불가능하다)

Filter

필터 인터페이스에는 doFilter()함수 1개만 존재

ServletRequest, ServeletResponse는 HttpServeletRequest, Response의 상위 객체

> ServletRequest/Response를 사용함으로써 조작이 가능함

FilterChain 변수를 사용해 filter의 전후를 구분

Spring 밖에서 Spring Application에 도달하기 전에 요청을 막아낼 수 있음

Spring Application 내부가 아니기 때문에 쉽게 bean injection이 일어나지는 않음

Interceptor

preHandle(), postHandle(), afterCompletion() 3개의 함수가 존재

preHandle()과 postHandle() 사이에서 컨트롤러와 모델에 대한 조작이 이루어짐

postHandle()과 afterCompletion() 사이에서 요청의 전달, 응답의 전달이 이루어짐

preHandle(): 컨트롤러로 요청이 들어가기 전에 사용하는 함수

postHandle(): 컨트롤러에서 응답을 만들고 난 다음 호출되는 함수

afterCompletion(): 응답을 클라이언트에게 보낸 후 실행되는 함수

 

Filter 구현하기

 

HandlerInterceptor 구현하기

 


Spring Boot Tests

Testing에 대하여

개별 코드 단위의 테스트 (unit test, integration test)

unit test: controller 클래스 하나, dto 클래스 하나, service 클래스 하나 각각의 함수들이 정상적으로 작동하는지를 보는 것

integration test: 만들어진 모든 클래스들이 서로 상호작용을 잘 하는지 확인하는 것

test: 

 

TDD (Test Driven Development)


Spring Boot Actuator

상용 서비스 준비

서비스가 안정적으로 돌아가는데 필요한 기능 (production-ready feature)

Spring Boot Actuator: production-ready feature를 제공하기 위한 라이브러리

 

health check: 어떤 서비스가 현재 상용자의 요청을 받을 수 있는 준비가 되어있는 상태인지 확인하는 작업

actuator를 추가시켜줌으로써 health check를 위한 endpoint가 자동으로 생성됨

 

spring:
  profiles:
    active: test

management:
  endpoints:
    enabled-by-default: true
    web:
      exposure:
        include: health,info,loggers
  endpoint:
    health:
      show-details: always
      show-components: always

enabled-by-default: actutor가 가지고 있는 bean을 사용할지 말지를 결정. false로 지정 시 endpoint별로 아래와 같이 수정해줘야 함

spring:
  profiles:
    active: test

management:
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include: health,info,loggers
  endpoint:
    health:
      enabled: true
      show-details: always
      show-components: always
    info:
      enabled: true
    loggers:
      enabled: true

exposure: enabled-by-default가 true이더라도 exposure의 include안에 포함되어있지 않은 기능들은 실제로 endpoint가 형성되지 않음

actuator를 사용하면 실행중인 logger의 log level을 바꿀 수 있음 (configuredLevel)

 

Actuator와 Prometheus

 

 

 

 

'Java > project lion JSB the origin' 카테고리의 다른 글

Ch.9 Spring과 Middlewares  (0) 2022.04.01
Ch.8 Spring Security  (0) 2022.03.20
Ch.6 Spring Boot 기능활용(1)  (0) 2022.03.04
Ch.5 CRUD & Data (2)  (0) 2022.03.01
Ch.4 CRUD & Data (1)  (0) 2022.02.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함