SW개발/Django

    [Django]get_object() 란?

    get_object() 란? 간단하게 get_object()는 pk로 queryset을 필터링 하고, queryset 결과에서 object를 뽑아서 return 시켜주는 함수이다. 실제 코드는 class SingleObjectMixin(ContentMixin) 내에서 확인할 수 있다. https://docs.djangoproject.com/en/3.2/ref/class-based-views/mixins-single-object/#singleobjectmixin Single object mixins | Django documentation | Django Django The web framework for perfectionists with deadlines. Overview Download Documen..

    [Django]GenericForeignKey, ContentType로 여러 모델과의 관계 맺기

    RDB를 사용하여 모델을 만들다 보면 한 모델이 여러 모델과의 관계를 맺어야 하는 순간이 생기기 마련입니다. 일반적으로 생각한다면 ForeignKey를 이용하여 모델링을 하는 방법이 떠오를 것입니다. 위의 설명으로는 부족하니 하나의 모델을 통해 예시를 들어 설명해보겠습니다. class Post(models.Model): title = models.CharField(max_length=100) # 여러 필드들 class Comment(models.Model): content = models.CharField(max_length=100) # 여러 필드들 class Recommend(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE)..

    [Django]Django REST Framework - Permissions

    아래의 포스팅은 DRF 공식 Documentation에 존재하는 permission에 대한 내용을 번역한 글입니다. 틀린 내용이 있을 수 있으니 헷갈리는 부분은 원문을 참고하여 주시면 감사하겠습니다. https://www.django-rest-framework.org/api-guide/permissions/#permissions Permissions - Django REST framework www.django-rest-framework.org Permissions 인증 또는 식별만으로는 일반적으로 정보 또는 코드에 엑세스하기에 충분하지 않다. 이를 위해서 접근을 요청하는 주체에 권한이 있어야 한다. — Apple Developer Documentation 인증 및 스로틀링과 함께 권한은 요청을 허용할지..

    [Django]Docker-compose로 Django 환경 구축하기 6 - Celery

    기본적으로 Web Server의 경우 프로세스를 동기적으로 처리하기 때문에 오래 걸리는 연산의 경우 사용자는 작업이 마무리 될 때까지 기다려야 한다. 이 때 오래 걸리는 작업들을 따로 모아 비동기로 처리하는 방식을 수행하면 사용자는 해당 작업을 기다릴 필요가 없어지게 된다. 따라서, 사용자 측면에서의 속도 개선을 위한 비동기 태스크 큐인 Celery가 주로 Django와 함께 사용하게 되는데 이를 container 하는 과정을 알아볼 것이다. (보통, 푸시 알림과 같은 용도로 사용한다.) 현재 Message Broker로 사용되는 RabbitMQ 컨테이너가 존재하므로 장고 서버에서 메시지 큐로 Task를 전달하고 Celery Worker가 메시지 큐에 존재하는 작업들을 받아서 비동기로 처리하는 방식으로 ..

    [Django]Docker-compose로 Django 환경 구축하기 5 - Nginx

    Django는 Web Framework이며 Web Server로서의 기능을 하지 못한다. Production 환경을 구성할 경우에 Web Server가 필요하게 되는데 이 때 주로 Nginx를 사용하게 된다. 이번 포스팅에서는 Nginx를 Docker Container 환경에 띄우는 과정을 다뤄볼 것이다. 마찬가지로 docker-compose.yml에 내용을 추가하면서 시작해보자. Web Server는 주로 웹 페이지를 클라이언트로 전달하는 기능(css, html 문서 등)을 담당하며 부가적으로 Proxy, Reverse Proxy와 같은 기능들도 지원한다. docker-compose.yml 추가 # yml 파일 포맷의 version 설정 version: "3" # docker-compose 볼륨 정의 ..

    [Django]Docker-compose로 Django 환경 구축하기 4 - RabbitMQ

    오늘날 개발자들은 MSA를 사용하여 애플리케이션을 구축하는 일이 당연하게 여겨지고 있다. MSA를 사용함에 따라 서버들은 아주 작은 기능을 하는 1개의 서버로서 동작을 하는데 분할된 서버들은 데이터를 어떻게 주고 받아야 할까? 두 가지의 방법이 떠오를 수 있다. 다이렉트로 데이터를 주고 받음 메시지 큐를 활용하여 데이터를 주고 받음 당연히 다이렉트로 주고 받는 것이 가장 기본이 될 것이다. 하지만 이 경우에 데이터가 적재된 곳의 서버가 부하를 버티지 못하고 서비스가 다운되버린다면? 서비스는 정상적으로 동작을 할 수 없는 상태가 된다. 이렇듯 다이렉트로 주고 받을 경우 최악의 경우는 서비스를 제대로 이용할 수 없는 상태가 되어버리는 것이다. 이 때 AMQP 프로토콜을 이용한 메시지 큐중 하나인 Rabbit..

    [Django]Docker-compose로 Django 환경 구축하기 3 - Redis

    지난번 포스팅에선 Django와 관계형 DB인 Postgres까지 Dockerizing 하는 과정을 다루어 보았다. 이 두가지의 기술만으로도 웹페이지를 만들 수는 있지만, 서비스를 만들다 보면 다양한 요구사항에 맞추어 다양한 기술들의 필요성을 느끼게 된다. 주로 caching을 활용하기 위해서 키 값 형식의 데이터베이스를 이용하게 되는데 바로 Redis가 이에 해당한다. 따라서 이번 포스팅에서는 키 값 형식의 데이터베이스인 Redis를 덧붙여 사용하는 방법을 적어보려고 한다. docker-compose.yml 설정 파일을 보면서 진행해보자. Docker-compose.yml 추가 # yml 파일 포맷의 version 설정 version: "3" # docker-compose 볼륨 정의 (이 볼륨은 도커가..

    [Django]Docker-compose로 Django 환경 구축하기 2 - Postgres

    대부분의 웹 프로젝트는 DB를 사용할 것이다. Django와 가장 잘어울리는 DB는 Postgres이며 Django의 공식 Dcoumentation에도 나와있다. 따라서 이번 포스팅에서도 역시 postgres를 사용하여 컨테이너로 띄우는 방법에 대해서 알아보려고 한다. 우선, 저번 포스팅에서 설명하지 못한 부분에 대해서 docker-compose.yml 파일과 함께 알아보자. docker-compose.yml 추가 # yml 파일 포맷의 version 설정 version: "3" # docker-compose 볼륨 정의 (이 볼륨은 도커가 관리함) volumes: postgres_db_dev: {} # 띄울 컨테이너 목록 services: # Database container, 추후에 설명 postgre..

    [Django]Docker-compose로 Django 환경 구축하기 1 - Django

    이번 시리즈는 기존에 존재하는 장고 프로젝트나, 새로 시작하는 프로젝트를 Docker-compose를 활용하여 도커라이징 하는 과정에 대해서 올릴 것이다. 일반적으로 Django에 Postgres, Nginx, Redis, RabbitMQ, Celery와 같은 것들을 붙여서 사용하기 때문에 이에 대해서 순차적으로 진행할 예정이다. 이번 포스트에서는 Django 프로젝트를 컨테이너로 띄워보는 것이 목표이다. 기존에 진행중인 프로젝트를 가지고 있는 사람이면 그대로 진행하면 될 것이고 새롭게 프로젝트를 시작하는 사람이라면 프로젝트와 앱을 생성한 후 정상적으로 장고 서버가 실행되는 상태에서 작업하면 된다. 도커 데스크탑 설치 해당 포스팅의 환경은 Mac을 기준으로 할 것이다. 아래의 링크에서 도커 데스크탑을 설..

    [Django]추천하는 모듈 import 순서

    장고에서 개발을 진행하다 보면 수없이 쌓이는 import 문을 볼 수 있다. 그럴때마다 하나의 기준을 가지고 순서를 맞춰놓지 않으면 어디에 위치한지 파악하기 힘들고 심지어 이 모듈을 사용을 했는지 안했는지에 대한 판별도 어려워지게 된다. 따라서 일련의 규칙을 적용해서 import 를 작성하는 것이 보기에도 좋고 관리에도 편할 것이다. 나의 경우에는 다음과 같은 규칙을 따라서 작성을 하고 있다. Django 모듈 import 순서 # 파이썬 표준 라이브러리 임포트 from math import sqrt from os.path improt abspath ... # 코어 장고 임포트 from django.db import models from django.utils.translation import ugett..