-
Notifications
You must be signed in to change notification settings - Fork 2
Description
개요
어제 테스트로 Bletcher-mix 레포지토리를 헤로쿠에 빌드 및 배포하였고 이후, 정상적으로 두 이미지가 배포 서버에서 합성 및 Cloudinary 업로드 되는 것을 확인하였다.
이 때 테스트한 샘플 이미지는 단순 바탕화면 조각 캡처로, 결과는 별다른 이미지 변화 없이 크기만 바뀌었다.
-> 
문제는 이미지를 바꿔서 테스트 했을 때 나타났다.
문제점
로컬 환경에서 blecher-mix Django 서버를 실행하고 위 그림으로 테스트하는 경우, 다음과 같이 문제 없이 합성이 진행되었고 저장소에 업로드되는 것을 확인할 수 있었다.
하지만, 배포된 'bletcher-mix.herokuapp.com'에 동일한 요청을 보낼 시 에러가 나타났다.

-
H12 Error
https://devcenter.heroku.com/articles/error-codes#h12-request-timeout
: 이 에러의 경우, HTTP request를 수행하는데 30초 이상 걸릴 시 발생한다고 한다. 요청 및 작업 수행에 이상이 없더라도 response 시간이 30초를 넘는다면 무조건 이 에러를 리턴하며, 로그 창 확인 결과, 헤로쿠 프로세스(Worker)는 나머지 일을 마저 수행하는 것을 확인하였다. (즉, Node로는 status 500이 가지만, 기다리면 cloudinary에 합성 이미지만 올라가는 현상) -
R14 Error
https://devcenter.heroku.com/articles/error-codes#r14-memory-quota-exceeded
: 메모리 사용량 초과 에러다. 단순 해결법은 헤로쿠를 업그레이드 하는 것. 아니라면, Gunicorn 설정을 통해 worker 수를 줄여야 한다고 한다.
해결 방안
이를 해결하는 방법으로는 다음과 같은 예시가 있었다.
- https://devcenter.heroku.com/articles/background-jobs-queueing
- https://devcenter.heroku.com/articles/python-rq
- Celery 참고: https://jonnung.dev/python/2018/12/22/celery-distributed-task-queue/
- Celery on Heroku: https://devcenter.heroku.com/articles/celery-heroku
또한, 이를 사용하기 위해서는 Redis나 RabbitMQ와 같은 작업을 할당할 '브로커' 설정이 필요하다.
작업해야 할 것이 생각보다 많아서 계획을 잘 짜고 시작해야 할 것 같다.
( + 거의 10년 전 사례지만 현재 우리의 문제와 비슷해서 참고) : https://spoqa.github.io/2012/05/29/distribute-task-with-celery.html




