FrameWork/Django 19

FrameWork/Django
장고 개발 환경에서 프로세스 2개가 실행되는 이유

django에서 프로세스 2개가 실행되는  이유최근에 django에서 스케쥴러를 공부하고 있었는데, 스케쥴러를 장고 앱에 등록하고, "python manage.py runserver"로 서버를 실행했는데 출력이 2번 일어나는 현상을 보게 되었다.  이는 프로세스가 2개가 돌아가고 있다는 것인데,  해당 이유를 찾기 위해서 구글을 통해 정보를 찾아보기 시작했고 스택오버플로우에 문제에 대한 대답을 들을 수 있었다.   Why django runserver command starts 2 processes? What are they for? And how to distinguish between each in the code?While building some standalone Django app, which..

FrameWork/Django
유저 커스텀 모델 사용하기

유저 커스텀 모델 사용하기 Django에서는 유저 모델을 기본적으로 제공하고 있다.  django.contrib.auth.models.User에 보면 장고의 유저 모델은 다음과 같이 명시되어 있다.  📁 django.contrib.auth.models.Userclass User(AbstractUser): class Meta(AbstractUser.Meta): swappable = 'AUTH_USER_MODEL' 아래는 User 모델에서 사용하고 있는 속성들이다. username = models.CharField()first_name = models.CharField()last_name = models.CharField()email = models.EmailField()is_staff ..

FrameWork/Django
Django에서 static, media 관리하기

static, media 폴더 관리하기장고에서는 static, media와 같이 용도에 맞는 파일을 제공하기 위해서 settings.py에서 파일을 제공하는 경로를 비롯한 설정을 할 수 있다. 여기서 나오는 static, media의 폴더들은 다음과 같은 역할을 지닌다. static: 주로 장고에서 제공하는 정적 파일을 관리할 때 주로 사용한다. (html, css, javascript)media: 유저로부터 받은 파일을 저장하거나 제공할 때 주로 사용한다. 로컬 파일에서 static, media을 사용할 때는 프로젝트의 시작 urls.py에 static, media 경로를 입력해 사용한다.  🛣️ urls.pyfrom django.contrib.auth import settingsfrom django..

FrameWork/Django
N + 1 쿼리 문제

오늘은 n + 1 문제에 대해서 알아보고자 한다.   N + 1 문제연관관계에서 발생하는 문제로, 연관 관계가 설정된 엔티티를 조회할 경우에 데이터 개수(N)만큼 연관관계의 조회쿼리가 추가로 발생하여 데이터를 읽어오게 되는 문제를 말한다.   예를 들어 아래처럼 각 모델과 연관관계를 설정해 두었다고 가정한다. from django.db import modelsclass Post(models.Model): title = models.CharField(max_length=20) contents = models.TextField()class Comment(models.Model): contents = models.TextField() post = models.ForeignKey("Post..

FrameWork/Django
select_related와 prefetch_related

오늘은 select_related와 prefetch_related에 대해서 정리해보고자 한다. 해당 주제를 다루기 전에 Django의 ORM 특징과 쿼리 셋에 대해서 알고 가면 좀 더 이해에 도움이 된다. https://jheaon.tistory.com/274 Django ORM과 QuerySet오늘은 Django의 ORM과 QuerySet에 대해 알아보고자 한다. Django ORM과 QuerySetORM (Object Relational Mapping)ORM이란 Object Relational Mapping의 약자로 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해 주jheaon.tistory.com  정참조, 역참조일단 설명하기전에, 다음과 같이 모델이 정의되어 있다고 가정한다. from dja..

FrameWork/Django
orm과 queryset

오늘은 Django의 ORM과 QuerySet에 대해 알아보고자 한다. Django ORM과 QuerySetORM (Object Relational Mapping)ORM이란 Object Relational Mapping의 약자로 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해 주는 기술을 의미한다. 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 SQL 쿼리문 없이도 데이터베이스 데이터를 다룰 수 있게 해 준다. QuerySetQuerySet이란 데이터베이스에서 전달받은 객체들의 모임을 말한다.  Django에서는 ORM을 사용하여 각 객체를 관계형 데이터베이스와 매핑해서 사용하는데 이때 모델과 데이터베이스 간의 연산을 수행하기 위해 모델매니저(Model Manager)가 존재한다. 이때 사용..

FrameWork/Django
django-seed을 통해 더미데이터 만들기

이번에는 django-seed 라이브러리를 통해 더미 데이터를 만들어 비어있는 DB 채워주는 것을 알아보고자 한다. django-seed django-seed는 Faker라이브러리를 사용하여 django 모델에 대한 테스트 데이터를 생성해 주는 라이브러리이다. 설치 터미널을 통해 설치한다. 참고로 psycopg2를 설치하니 오류가 발생하여, 바이너리 버전인 psycopg2-binary을 설치하여 진행하였다. pip install django-seed pip install psycopg2-binary 그다음 settings.py에 들어가 앱을 등록한다. INSTALLED_APPS = ( ... 'django_seed', ) 아래 명령어를 통해 다음 생성하고자 하는 앱과 --number 옵션을 작성하여 더미..

FrameWork/Django
settings.py 분리하여 관리하기

Settings.py을 분리한다는 것이 무슨 말이죠? 장고를 사용하다보면 기능 구현을 위해 여러 라이브러리나 모듈, 미들웨어 등을 추가하면서 몸집을 키워나가게 되는데 이 과정에서 settings.py 파일의 크기가 커진 나머지 내가 어떤 것을 추가하였는지 대해 찾기도 어려울 뿐더러, 배포을 할때에는 사용자에게 보여주면 안되는 세부정보들을 제공하지 않기 위해 개발용 세팅과, 배포용 세팅을 따로 둘 필요성이 있습니다. 따라서 이런 이유로 장고 개발자들은 본래 프로젝트를 시작하면 만들어지는 settings.py을 settings 라는 폴더를 만들고 그 안에 common.py, prod.py 등으로 쪼개서 관리하시는 식으로 프로젝트를 관리하고 있습니다. 한문장으로 설명하자면 : 그냥 프로젝트에 사용되는 설정 코..

FrameWork/Django
dumpdata와 loaddata을 통해 DB데이터 추출, 적재하기

이걸 왜 사용하나요? 장고에서 DB을 사용하다 보면, 성능이나 다른 이슈로 인해 다른 DB에 데이터를 옮겨야 하는 상황이 발생하기도 합니다. 이때 dumpdata와 loaddata을 활용한다면 쉽게 DB에서 데이터를 추출하고 적재할 수 있습니다. dumpdata : DB 데이터 추출 dumpdata 명령어를 실행한 뒤 출력되는 데이터를 파일로 추출하는 방식입니다. 해당 명령을 실행하면 dumpdata로 반환되는 값을 data.json 이름의 파일로 보내면서 참고로 data.json 말고 다른 이름으로 변경하여 사용이 가능합니다. python manage.py dumpdata > data.json 특정 장고 앱의 데이터만 저장한다면 dumpdata 뒤에 앱 이름을 입력합니다. python manage.py..