개발/백엔드23 [Web Server 이해하기] Gunicorn과 Nginx 역할분배 Ningx는 request가 가장 먼저 도착하는 곳이다. Web application으로 보내져야만 하는 request들만을 보낸다.(필터링같은 느낌) Gunicorn은 request를 웹 프레임워크가 이해하고 처리할 수 있는 형식으로 변환시켜 보낸다. Nginx Nginx는 Web server이자 Reverse Proxy이다. 아래는 Nginx가 잘하는 기능들 예시이다: - domain name routing - 정적 파일 보내기 - 한번에 들어오는 많은 양의 request를 처리하기 - 느린 client들 처리하기 - 동적처리가 필요한 request들을 Gunicorn으로 보내기 - SSL 끝내기 Nginx는 다음과 같은 일들은 할 수 없다: - Python web application 실행하기 - .. 2020. 3. 18. [Web Server 이해하기] Nginx Configuration 설정법 1. Upstream Block Upstream은 서버들의 묶음이다. upstream backend { server 111.111.111:8000 weight=5; server 111.111.112:8000; server 111.111.113:8000; } 위의 예시에서는 3개의 서버간에 load balancing이 되며 weight를 명시하게 되면 해당 서버에 더 많은 load를 배분할 수 있다. 위의 예시에서는 111.111.111서버가 다른 2서버에 비해 5배 많은 load를 할당받는다. configuration 파일에서 server블럭에서는 ip주소로 호출하는 것이 아니라 upstream의 이름으로 호출한다. (예시에서 backend) 2. Server Block Server Block은 하나의 .. 2020. 3. 18. [Docker 이해하기] Docker Configuration 설정법 1. links vs depends_on: links와 depends_on 둘 다 dependency와 container의 생성순서를 정해준다. 하지만 links는 위의 기능과 link된 container의 이름을 내부코드에서 사용하여 접근할 수 있다. 예시: web: image: example/my_web_app:latest links: - db - cache db: image: postgres:latest cache: image: redis:latest 위의 예시에서 links를 사용한다면 web 내부에서 db:5432 로 접근할 수 있지만 depends_on을 사용한다면 접근할 수 없다. https://stackoverflow.com/questions/35832095/difference-betwee.. 2020. 3. 18. [Django 공식문서 번역] REST Framework - Viewset and Router Viewset을 사용하면 관련된 view들을 하나의 클래스로 묶을 수 있다. class UserViewSet(viewsets.ViewSet): """ A simple ViewSet for listing or retrieving users. """ def list(self, request): queryset = User.objects.all() serializer = UserSerializer(queryset, many=True) return Response(serializer.data) def retrieve(self, request, pk=None): queryset = User.objects.all() user = get_object_or_404(queryset, pk=pk) serializer = .. 2020. 3. 18. [Django REST Framework] create() vs perform_create() Django REST Framework의 ModelViewSet과 create() 관련 찾아보고 공부한 내용을 정리해보려고 한다. 기본적으로 ModelViewSet은 GenericAPIView라는 클래스를 상속받기 때문에 .list(), .create() .list(), .create() 등을 기본으로 내장하고 있다. 따라서 이 중에서 기본 내장되어 있는 메소드 중 동작을 변경하고 싶은 것들만 overriding해서 수정하면 된다. 그리고 ModelViewSet은 GenericAPIView를 상속받고 있기 때문에 최소한 queryset와 serializer_class는 세팅해주어야 한다. from rest_framework import status from rest_framework.response im.. 2020. 3. 18. Django Channels - Introduction Scope란 connection의 정보를 뜻한다. remote IP, username, lifetime of connection등의 정보를 가지고 있다. Application은 한번의 scope당 한번씩 instantiate된다. HTTP에서는 각 request마다, socket에서는 각 WebSocket connection마다이다. Consumer 각각의 프로토콜은 각자 다른 event들이 발생하며 이 event들은 메소드로 표현된다. 개발자는 각각의 event들을 어떻게 처리할지 코드만 작성하면 Django의 Channel이 스케쥴링과 병렬적으로 실행시켜준다. class LogConsumer(WebsocketConsumer): def connect(self, message): Log.objects.c.. 2020. 3. 18. 이전 1 2 3 4 다음