5월, 2021의 게시물 표시

Django + ASGI + Docker 적용하기.

 Django + ASGI + Docker 적용하기. 지금까지 Django wsgi + uWSGI 를 사용하다가 장고 3.0 버전에서 ASGI 서버를 지원하게 되면서 그것에 대해 코드 적용 및 발생 하는 이슈에 대해서 적을까 합니다. 1. Gunicorn worker hanging issue docker 내부에서 gunicorn 사용할때 worker가 가동되는데 그 워커의 tmp directory가  /tmp 로 docker 내부에 있는 overlay 스토리지 타입으로 되어있어서,  docker 내에서 gunicorn worker 가동시 blocking 걸릴수도 있음. 따라서 gunicron 의 worker tmp directory path를 세팅해줌으로써 worker 가 hanging 걸리는 이슈 해결 gunicorn --worker-tmp-dir /dev/shm ....  2. uvicorn --relaod 사용시 high cpu usage uvicorn high cpu 의 경우 reload 사용시 모든 폴더 및 파일을 watching 하고 있어서 이슈가 발생. reload-dir을 어플리케이션 directory 로 세팅해주면  high cpu usage 이슈는 해결됨. 기존에 45% 까지 사용하던 CPU Usage가 25%까지 줄어들었음. uvicorn --reload-dir /app 3. too slow response Application 의 경우는 Django 3.1 을 사용해서 Async view만 적용 되어, ORM 쪽은 async 로직이 아직 적용 안되어있는 상태 따라서 DJANGO_ALLOW_ASYNC_UNSAFE 세팅 필요. settings.py 에 해당 라인 추가 os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" 그리고 지금 Application의 경우 graphql을 사용하고 있는데, 거기에 제공하는 playgorund를 통해 테스트 진행. 그리고 gun...