본문 바로가기

전체 글

(21)
HandlerExceptionResolver - API 예외처리 RESTful API를 개발할 때 고려해야 할 사항 중 Response Status를 잘 남겨야 하는 사항이 있다. 일반적으로 성공한 요청에 대해서는 적절한 상태를 나타내지만 예외가 발생하면 그렇지 않은 경우가 있다. 따라서 스프링 MVC는 HandlerExceptionResolver 인터페이스를 제공하는데 상속받아 직접 구현하거나 애너테이션을 적용해 예외를 해결하면서 적절한 Response Status를 지정해줄 수 있다. HandlerExceptionResolver 호출 시점 HandlerExceptionResolver는 이름에서 유추할 수 있듯이 Handler 밖으로 예외가 던져진 경우 호출되어 처리한다. 따라서 예외가 발생해도 서블릿 컨테이너까지 예외가 전달되지 않고, 스프링 MVC에서 예외 처리..
트랜잭션 격리성 데이터베이스 트랜잭션은 4가지 특성을 가지고 있다. 4가지 중 3가지에 대해서는 글로만 읽더라도 쉽게 이해가 되었는데 격리성에 대해서는 이해하기 어려워 이를 정리하고자 한다. 격리성(Isolation) 여러 트랜잭션이 동일한 데이터를 다루다 보면 이상 현상이 발생할 수 있다. 예를 들어 트랜잭션-1은 데이터 A의 값을 50에서 10으로 변경하고, 트랜잭션-2는 A의 값을 50에서 100으로 변경한다고 가정해보자. 1. 트랜잭션-1 : A의 값 조회 (결과 : A = 50) 2. 트랜잭션-2 : A의 값 조회 (결과 : A = 50) 3. 트랜잭션-1 : A의 값 변경 (결과 : A = 10) 4. 트랜잭션-1 : 커밋 5. 트랜잭션-2 : A의 값 변경 (결과 : A = 100) 6. 트랜잭션-2 : 커..
JUnit5 Extension 정리 Extension Extension은 테스트 실행 전후로 무언가 처리를 하고 싶을 때 사용한다. 위와 같이 언제 실행될 것인지 구체적으로 정할 수 있으며 Interface로 구성되어 implements를 선언 후 메서드를 작성해주어야 한다. 주요 인터페이스 AfterAllCallback : 모든 테스트 종료 후 실행 (가장 나중에 실행된다.) AfterEachCallback : @AfterEach 적용된 메서드 종료 후 실행 AfterTestExecutionCallback : 각 테스트가 종료 후 실행 BeforeAllCallback - @BeforeAll 적용된 메서드 전에 실행(가장 먼저 실행된다.) BeforeEachCallback - @BeforeEach 적용된 메서드 종료 후 실행 BeforeT..
스프링AOP - 실무 주의사항 프록시 방식의 AOP 한계 스프링은 프록시 방식의 AOP를 사용한다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다. 이렇게 해야 프록시에서 먼저 어드바이스를 호출하고, 이후에 대상 객체를 호출한다. 만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고, 어드바이스도 호출되지 않는다. 프록시 방식의 AOP는 메서드 내부 호출에 프록시를 적용할 수 없다. 아래 코드로 테스트를 해보자. CallServiceV0.java package hello.aop.internalcall; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @Slf4j @..
스프링 인터셉터 스프링 인터셉터는 웹과 관련된 공통 관심사를 처리를 할 때 사용한다. AOP도 공통 관심사에 대한 처리를 하지만 AOP는 주로 메서드를 중심으로 처리하는 반면 인터셉터는 주로 HTTP 헤더 정보나 URL 정보, 세션 정보, 쿠키 정보, 핸들러 정보 등을 이용해서 웹 요청 자체에 초점을 맞춰서 처리한다. HandlerInterceptor public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } default void postHandle(HttpServletRe..