문제 요약

<aside> 💡 비동기 이벤트 처리 중 URL 요청 절차가 완료되지 않았는데 새로운 요청이 들어오면 진행 중이던 작업이 중단되고 새로운 요청이 처리되는 문제가 발생했습니다.

</aside>

프로젝트 배경

이 프로젝트는 음악 트랙을 저장할 때 외부 크롤링 서버를 통해 YouTube URL을 가져와 데이터베이스를 업데이트하는 기능을 포함합니다. 이를 위해 Spring의 비동기 이벤트 처리와 트랜잭션 관리를 사용했습니다.

문제 설명

특정 트랙을 저장할 때 TrackSavedEvent 이벤트를 비동기적으로 처리하여 외부 서버에 요청을 보내고 URL을 가져와 DB를 업데이트합니다. 하지만 @Order 애노테이션을 설정하지 않아 URL 요청 절차가 완료되지 않은 상태에서 새로운 요청이 들어오면, 기존 작업이 중단되고 새로운 요청이 처리되는 문제가 발생했습니다

문제의 원인

문제의 원인을 파악하기 위해 다음과 같은 초기 분석을 진행했습니다:

분석 결과, @Order 애노테이션을 설정하지 않아서 발생한 문제임을 확인했습니다. 이로 인해 비동기 작업의 우선순위가 명확하지 않아 동시 요청 시 작업이 중단되는 현상이 발생했습니다.

문제 진단

문제의 원인을 더욱 명확히 하기 위해 다음과 같은 진단을 진행했습니다:

  1. 비동기 이벤트 처리 로직 검토: @Async와 @EventListener 애노테이션이 올바르게 설정되어 있는지 확인했습니다.
  2. 우선순위 설정 확인: @Order 애노테이션을 추가하여 이벤트 처리의 우선순위를 설정했습니다.
  3. 동시 요청 처리 로직 분석: 동시 요청 시 작업이 중단되는 현상을 재현하고, 문제의 원인을 파악했습니다.

해결 시도

문제를 해결하기 위해 다음과 같은 단계별 시도를 했습니다: