피드 작성을 하면서 S3에 요청할 일이 많았습니다. 하지만, 반복문을 통해 S3에 요청을 보내면서 시간이 너무 많이 걸린다는 것을 API 요청만으로도 느낄 수 있었습니다.
그래서, 이 작업에 대해 비동기 처리를 하게 되었고, 그에 대한 테스트 결과입니다.
사용자는 20건의 요청을 한번에 보내게 되고, 한번의 테스트 당 10개의 이미지(최대 10개로 잡았습니다.)를 보내도록 하였습니다.
1. 단순 반복문 사용
기존 반복문을 사용하였을 때의 결과입니다.
다음과 같이 for문을 이용하여 데이터를 저장해주었습니다.
최소 787ms, 최대 1266ms, 평균 911ms라는 시간이 걸렸습니다.
2. S3 요청 비동기 처리
이미지 처리를 다른 서비스로 넘기면서, Async 처리를 해주었습니다.
또한 초기 쓰레드의 수를 최대 이미지 수인 10으로 설정하고, 최대 30개의 쓰레드까지 생성 가능하도록 해주었습니다.
위와 같은 조건으로 테스트한 결과 최소 46ms, 최대 242ms, 평균 88ms 라는 결과가 나왔습니다.
결론
기존 구현보다 약 11배의 시간이 단축됨을 확인할 수 있었습니다.
이번 테스트를 통해서 비동기 + 멀티 쓰레드 처리의 중요성을 알게 되었습니다. 특히 이러한 서드파티가 사용되는 경우에는 그 시간을 서비스 내에서 가늠할 수 없기 때문에 비동기로 처리하는 것이 자원을 잡고 있는 것에 대해 효율적이라는 것을 알게 되었습니다.
'프로젝트' 카테고리의 다른 글
[Spring] 쿠폰 발급 동시성 문제 - 비관적 락 사용 테스트 (0) | 2024.06.06 |
---|---|
[Spring/OAuth] 카카오 캘린더 API 사용하기 - 캘린더 생성 및 일정 추가 (0) | 2024.06.05 |
[JPA] Column 'chatroom_id' cannot be null 문제 해결하기 (0) | 2024.05.31 |
[Spring] entity 변경해도 update 쿼리 안날라가는 이슈 (0) | 2024.05.28 |
[AWS/S3] Spring에서 S3에 데이터 저장하기 (0) | 2024.05.19 |