완전 공부용으로 아래 링크에서 글 저장
http://oniondev.egloos.com/v/10048149
유저 Request → Nginx → Gunicorn → Django
Nginx
- Reverse Proxy Server 역할
- 로드 밸런싱 : traffic 분산
- 서비스 속도 개선: in-bound, out-bound 데이터 압축, SSL 암호화(어플리케이션 단 수고를 덜어줌)
- 보안 강화: 각종 조건에 따른 트래픽 차단 기능, 백엔드 서버 군의 IP 외부 노출 방어
- 로그 Path
- Access log: /var/log/nginx/access.log
- Error log: /var/log/nginx/error.log
Gunicorn
- Gunicorn 은 무엇인가?
- WSGI HTTP Server for UNIX
- WSGI (=Web Server Gateway Interface) : 파이썬 웹 어플리케이션으로 request 를 포워딩 해주는 웹서버를 단순하게 일컫는 말
- pre-fork worker model = 멀티 프로세싱
- pre-fork : master 프로세스가 "미리(=pre)" 여러 자식 프로세스를 생성(=fork) 하여 각각 하나의 request 를 핸들링하도록 하는것
- 각각의 request가 일으키는 문제가 다른 프로세스에 영향을 주지 않음
- non thread-safe library 에 대하여 호환성 보유
- 여러 Django Application Process 가 원활하게 managing 될 수 있도록 관리해준다.
- TMI: Green Unicorn 약자라고 함
- WSGI HTTP Server for UNIX
- 로그 Path
- 서버에서 ps -ef | grep gunicorn 이라고 쳐보면 아래처럼 나옴 (로그파일 Path 확인 가능!!)
ubuntu 1690995 1 0 17:37 ? 00:00:02 /usr/local/bin/python3.8 /home/ubuntu/.local/bin/gunicorn src.myapp.wsgi:application --env DJANGO_SETTINGS_MODULE=hwahae.production --pid /myapp/tmp/gunicorn.pid --bind unix:/myapp/tmp/gunicorn.sock --access-logfile /myapp/log/gunicorn/access.log --error-logfile /myapp/log/gunicorn/error.log --log-syslog --log-level info --workers 4
- Access log: /myapp/log/gunicorn/access.log
- Error log: /myapp/log/gunicorn/error.log
- 위에 찍히는 로그는 Gunicorn 로그이지 장고 앱과는 관련이 없음!!
- 서버에서 ps -ef | grep gunicorn 이라고 쳐보면 아래처럼 나옴 (로그파일 Path 확인 가능!!)
Django
- 파이썬 웹 어플리케이션 프레임워크...
- 장고 로그는 지금!!! 장고로 웹앱 개발을 하고있는 당신이 남기는 로그를 출력할 것임
- 직접 로그의 흐름(?) 을 설정할 수 있음
- python 에서 기본 제공하는 logging 패키지의 각종 Handler 를 사용할수 있음
- Gunicorn 로그파일에서 장고 로그도 보고 싶다면?
- Django: StreamHandler 를 사용
- gunicorn 구동 시, capture_output 옵션을 사용
- 독립된 파일로 로그를 관리하고 싶다면?
- Django: WatchedFileHandler 를 사용
로그파일 관리
- 주기적으로 오래된 로그파일을 지워주면 됩니다!
- linux logrotate 사용
- Web 으로 조회도 하고 검색도 하고 차트로도 볼 수 있는!!!
- 로그 모니터링 툴을 사용하면 됩니다!!
- DataDog, NewRelic, Elastic Stack 등..
'IT > 파이썬' 카테고리의 다른 글
Django - Rest-framework API 서버 구현 with Django Ninja (0) | 2023.04.28 |
---|---|
Django - response 객체에 쿼리스트링 추가 (0) | 2023.04.26 |
파이썬 코드 웹 실행 사이트 (0) | 2023.04.25 |
파이썬 - 바이트 배열을 정수형 변환 코드 예제 (0) | 2023.04.25 |
Django ORM - Q 객체, F 객체 사용 (0) | 2023.04.18 |