대용량 다운로드 기능 개선 작업에서 생각했던 해결 방법과 선택하지 않은 이유 정리
문제
RDB에 저장된 데이터를 가공하여 CSV 형식으로 다운로드 받는 기능에서 Timeout이 발생
어드민 서버에서 사용하는 기능입니다.
사용 빈도가 매우 낮습니다.
해결 방법 1 : Timeout 늘리기
Timeout 설정 시간을 늘려서 당장 Timeout이 발생하지 않도록 하기
장점
기각 사유
- 시간이 지나 RDB에 데이터가 더 많아지면 다시 Timeout 발생 가능
해결 방법 2 : 비동기 처리한 뒤 결과는 메일로 전송
비동기로 CSV 형식으로 파일을 생성한 뒤, 유저에게 메일에 첨부하여 결과 파일 전송하기
장점
- 시간이 아무리 오래 걸려도 Timeout이 발생하지 않음
단점
- 메일 첨부파일 용량 제한이 있음
- 보통 20~25MB
- 현재 파일 크기 10MB
기각 사유
- 시간이 지나 RDB에 데이터가 더 많아지면 용량 초과 가능성 있음
해결 방법 3 : 비동기 처리한 뒤 S3에 저장하고 다운로드 페이지 제공
비동기로 CSV 형식으로 파일을 생성한 뒤, S3에 저장하고, 다운로드 페이지 추가하여 다운로드 가능하도록 구현, 처리 완료시 슬랙 알림 제공
장점 == 채택 사유
- 시간이 아무리 오래 걸려도 Timeout이 발생하지 않음
- 파일 용량이 25MB를 초과해도 동작 가능함
- 다운로드 페이지 링크를 사용하여 결과 파일 쉽게 공유 가능
- 슬랙 알림을 통해 처리 완료 이후 즉시 알림
3번 방법으로 구현 도중에 마주친 메모리 이슈
https://velog.io/@i-no/Ruby-on-Rails-Memory-Bloat