-
Notifications
You must be signed in to change notification settings - Fork 0
김현수 8주차 개인 회고
Kim Hyunsu edited this page Aug 18, 2024
·
1 revision
@ControllerAdvice
의 빈 등록 순서는 Ordered.LOWEST_PRECEDENCE
이다. 그래서 GlobalExceptionHandler 를 등록하더라도 모든 DomainExceptionHandler 에서 우선순위를 낮춰야한다.
해결방안:
package camp.woowak.lab.common.advice;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.AliasFor;
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RestControllerAdvice
@Order(Ordered.LOWEST_PRECEDENCE - 1)
public @interface CustomRestControllerAdvice {
@AliasFor(annotation = RestControllerAdvice.class, attribute = "basePackages")
String[] basePackages() default {};
@AliasFor(annotation = RestControllerAdvice.class, attribute = "basePackageClasses")
Class<?>[] basePackageClasses() default {};
@AliasFor(annotation = RestControllerAdvice.class, attribute = "assignableTypes")
Class<?>[] assignableTypes() default {};
@AliasFor(annotation = RestControllerAdvice.class, attribute = "annotations")
Class<? extends Annotation>[] annotations() default {};
}
도메인 내의 ExceptionHandler 에는 위 anotation 을 붙여 사용한다.
그렇게 되면 그냥 @ControllerAdvice
를 사용한 Handler 보다 우선 순위가 높아지게 된다
- 팀원 간의 소통이 많아서 좋지만 많은 소통으로 인해 하고 있던 업무가 중단되고 까먹어 버리는 경우가 빈번히 생겼다.
- 또한, 갑자기 말하다 보니 자료로 정리가 안되었다.
해결방안
- 이를 해결하기 위해서 논의 내용을 Discussion 에 남기고 일정 시간 뒤에 논의 하자고 말하는 작업의 도입이 필요하다.
문제 발생 배경: User ID 를 Long에서 UUID 로 바꾸면서 Service 층에서 DataIntegrityViolationException 을 잡지 못한다.
이 문제는 쓰기 지연에 대한 이해 부족에서 기인했다.
GenerateType.Indentity(AUTO_INCREMENT) 는 무조건 DB의 sequence 값을 조회해야하기 떄문에 지연쓰기를 할 수 없기 때문에 service 층에서 예외를 처리할 수 있다.
GenerateType.UUID 를 사용하면 Hibernate에서 만든 UUID 값을 넣기 때문에 쓰기 지연이 발생한다. 그래서 UUID 로 바꾸면서 문제가 발생한 것이다.
해결 방법은 saveAndFlush 를 사용해서 명확히 쓰기를 진행하면 된다.