메시지 큐로 비동기 처리를 구현한 사이드 프로젝트 경험 중심의 결
백엔드 사이드 프로젝트에서 이미지 업로드 처리를 동기로 구현했다가 응답 시간이 3~5초까지 늘어나는 문제가 생겼습니다. 사용자 입장에서는 버튼을 누르고 아무 반응이 없으니 오류처럼 느껴지는 상황이었습니다. RabbitMQ를 처음 도입해서 이미지 처리 작업을 큐에 넣고 워커가 비동기로 처리하는 구조로 바꿨습니다. 처음 설정할 때 워커가 예외 없이 죽는 경우를 처리하지 않아서 작업이 유실되는 버그가 있었고, dead letter queue를 추가해서 해결했습니다. 동시성 문제는 같은 리소스를 여러 요청이 동시에 수정하려 할 때 발생했는데, DB 트랜잭션 격리 수준을 조정하고 낙관적 락을 적용해서 충돌을 줄였습니다.
처음에는 개념만 알고 적용했다가 실제 레이스 컨디션이 발생한 뒤에야 제대로 이해했습니다. 이후 응답 시간이 200ms 이하로 줄었고, 팀원들이 같은 구조를 다른 기능에도 적용했습니다.