일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- okhttp progress
- spring 테스트 속도
- 자바 가상스레드
- gradle plugin이란
- okhttp upload progress
- 자바 가상스레드란
- okhttp sink
- gatling
- gradle plugin만들기
- spring 테스트 성능
- 스프링 성능테스트
- @MockBean 속도
- file upload progress
- JDK21 가상스레드
- 스프링 scouter
- Springboot 테스트 속도
- spring socuter
- JAVA 가상스레드란
- 자바Thread
- spring gatling
- @DirtiesContext 속도
- 테스트 속도개선
- custom plugin
- junit 테스트 속도
- gradle custom plugin
- 스프링 gatling
- 테스트 속도
- gradle pl
- 스프링 모니터링
- 성능테스트 모니터링
Archives
- Today
- Total
호딩클라우드
[Spring boot] 비동기 이벤트로 로직을 분리하여 실행시간 55% 개선 본문
[배경]
회원가입시 프로필 사진을 등록하면 외부 배경제거 api를 통해 배경을 제거한 후 S3에 업로드를 하게 됩니다.
이때 배경제거 후 S3업로드 까지 동기식으로 진행되다 보니 프로필 사진 업로드에 많은 시간이 소요되는 문제를 식별했습니다.
아래는 이미지 크기별 소요시간입니다.
이미지 크기 (KB) | Total Elapsed (ms) | Remove Background Elapsed (ms) | S3 Elasped (ms) |
50kb | 4470 | 2343 | 1449 |
100kb | 3350 | 1660 | 1606 |
155kb | 5230 | 3865 | 2962 |
330kb | 7100 | 4933 | 2092 |
800kb | 7940 | 3993 | 3860 |
1200kb | 10150 | 5685 | 4379 |
1900kb | 14610 | 7037 | 7344 |
2300kb | 19000 | 7146 | 11738 |
2900kb | 19920 | 7636 | 11872 |
이미지 크기별로 3번의 요청의 실행시간 평균을 담아낸 데이터입니다.
이미지 크기에 따라 4초에서 19초까지 소요되는 것을 확인했습니다.
[해결방안]
실행시간을 개선하기 위해 배경제거 API 완료 이후 바로 클라어인트에게 이미지를 반환하고 S3업로드는 트랜잭션 커밋이후 비동기로 처리하기로 결정했습니다.
이때 배경제거 API에서는 이미지에 접근할 수 있는 URL을 통해 이미지를 반환해주는데, 해당 URL은 24시간뒤 만료되는 URL이기 때문에 DB에는 반드시 S3의 업로드된 URL을 저장해야 했습니다.
때문에 S3 이미지 URL을 메모리에 HashMap으로 저장해두고 회원가입 POST 요청이 올때 만료되는 URL을 S3에 업로드된 이미지 URL로 변경해서 저장하기로 결정했습니다.
[개선적용 결과]
이미지 크기 (KB) | Total Elapsed (ms) | Remove Background Elapsed (ms) | S3 Elasped (ms) |
50kb | 1973 | 1754 | 1211 |
100kb | 1733 | 1654 | 1347 |
155kb | 1666 | 1653 | 1125 |
330kb | 3610 | 3520 | 2440 |
800kb | 5050 | 4958 | 3301 |
1200kb | 6096 | 6000 | 6121 |
1900kb | 6930 | 6805 | 4345 |
2300kb | 8116 | 7637 | 9663 |
2900kb | 8370 | 8225 | 12239 |
전체 소요시간과 api 소요시간이 동일해진 것으로 보아 예상했던 만큼 응답속도가 향상 됐음을 확인할 수 있습니다.
'문제해결' 카테고리의 다른 글
[MySQL] prefix index로 조회속도 최적화 (0) | 2024.08.27 |
---|---|
[springboot] TestContainer, 테스트 성능 속도 30% 개선기, 테스트 주의사항 (0) | 2024.02.08 |
[SpringBoot] 스프링 문서화 자동화 하는법 가이드. 문서 배포 (with. Restdocs, restAssured) (31) | 2023.12.29 |