문제 상황
- entity의 updatedBy, deletedBy, createdBy 등을 AuditorAware를 구현하여 사용
- Http 호출 시 gateway에서 request 객체에 넣어둔 값을 파싱해서 사용하는 방식
- 하지만 비동기 호출의 경우 HttpServletRequest에 값이 없기 때문에 에러 발생
문제 해결
- 메시지를 생성할 때 userId와 userRole을 같이 파라미터로 넘김
- 이후 consumer에서 요청을 받을 때 userId를 thread 에 넣어 해당 비동기 요청이 완료될 때까지 userId를 공유
- 비동기 요청이 완료될 때 thread를 비워줌
- 위 작업은 모든 비동기 호출에서 공통적으로 적용되기에 AOP를 적용하여 관심사를 분리 -> 비지니스 로직에 집중