개발자 블로그
[django] 오늘의 공부 정리 0625 본문
배포 - docker / nginx / uwsgi
docker
- docker란?
- windows에서 virtualbox를 설치해 가상화 환경을 구축하는 것처럼, docker를 사용해 격리 된 공간에서 서비스나 os를 가상화 하여 띄울 수 있다.
- docker의 격리 된 공간에서 동작하는 것을 컨테이너라 한다.
- virtual machine과 같이 가상화를 하는 것은 비슷하지만, 구조적으로는 차이가 있다.
- docker-compose와 같은 container management 프로그램을 사용해 서비스 환경을 쉽게 구축 할 수 있다.

- 왜 docker를 사용하는가?
- docker-compose를 활용하면 원하는 아키텍처를 빠르게 구성 할 수 있다.
- 서비스가 host에서 동작하는 것이 아닌, container에서 동작하기 때문에 의존성과 같은 문제가 생길 가능성이 적어진다.
- k8s와 같은 오케스트레이션 시스템과 함께 사용하면 더 효율적으로 관리 할 수 있다.
nginx
- nginx란?
- 클라이언트의 request 요청을 처리해주는 web server
- reverse proxy, 로드밸런싱, 캐싱 등의 기능을 지원한다.
- client의 요청을 nginx가 받은 후 service로 데이터를 넘겨주는 방식이다.

- 왜 nginx를 사용하는가?
- 로드밸런싱을 활용해 트래픽을 분산 할 수 있다.
- active / stanby로 구성할 경우 좀 더 안정적으로 배포 환경을 구성 할 수 있다.
- SSL(https) 기능을 사용해 데이터를 안전하게 전달 할 수 있다.
- reverse proxy 기능으로 client에서 서버에 직접적으로 접근하는 것을 막아준다.
- 콘텐츠를 캐싱하여 동일한 요청에 대해 더 빠른 속도로 처리 할 수 있게 해준다.
- 로드밸런싱을 활용해 트래픽을 분산 할 수 있다.
uwsgi
- uwsgi란?
- wsgi(web server gateway interface)는 python으로 작성 된 웹 응용 프로그램 간의 표준 인터페이스이다.
- 기본적으로 django에서 runserver는 배포에 사용해서는 안된다.
- django에서도 공식적으로 runserver는 개발용이다 라고 정의했기 때문(참고)
- wsgi 프로그램은 대표적으로 gunicorn과 uwsgi가 존재한다.
- uwsgi를 사용해 멀티스레드 기능을 사용 할 수 있다.
- nginx와 호환성이 좋다.
- 자매품 - gunicorn
- 왜 uwsgi를 사용하는가?
- gunicorn 써도 됨. 두 프로그램의 특성을 보고 선택
- 대량의 리퀘스트를 처리 할 때 성능과 안정성이 모두 향상됨(참고)

'Django > 오늘의 공부' 카테고리의 다른 글
Timezone Setting (0) | 2022.07.30 |
---|---|
[django] 오늘의 공부 정리 0620 (0) | 2022.06.20 |
[django] 오늘의 공부 정리 0616 (0) | 2022.06.15 |
[django] 오늘의 공부 정리 0615 (0) | 2022.06.15 |
[django] 오늘의 공부 정리 0613 (0) | 2022.06.13 |