소프트웨어 개발자/개발 간 자주보는 글 8

[Django] Django Model - Table Field, Relationship

Model - Field Type 필드 타입 설명 BooleanField True / False 이진 논리 필드 CharField 문자열 값 (일반적으로 짧은) TextField 문자열 값 (일반적으로 긴) EmailField 유휴한 이메일 주소인지 체크 (EmailValidator) IntegerField 정수 데이터 저장 필드 PostiveIntegerField PositiveBigIntegerField 0 or 양수의 정수 필드 FloatField 실수 데이터 저장 필드 DecimalField 고정 소수점 필드 (ex. 4.222) DateField 날짜 데이터 저장 필드 Python의 Datetime.date에 대응되는 필드 DateTimeField 날짜 + 시간 데이터 저장 필드 Python의 ..

[Django] Pagination 방법 비교 (Feat. Django, DRF)

Pagination이란? Pagination 이란 한번에 많은 데이터를 받기 힘든 경우, 특정 구역을 나눠서 받는 방법 Django에서는 Pagination을 구현하기 위한 여러 모듈들이 존재하는데, 향후 Pagaintation 구현시 의사 결정을 빠르게 할 수 있도록, 각 방법을 비교 해보며 특징을 정리 해놓으려고 한다. 👉 Pagination 의 큰 갈래 (방향성) Pagination 방법에는 여러 종류가 있겠지만 크게 3가지로 나뉘는 걸로 보이며, 1), 2) 의 경우 많이 쓰이는 대중적인 방법으로 선호됩니다. 3) 의 경우에도 1) 페이지 번호 기반 : 미리 페이지 크기(page_size)를 정하고, 페이지 번호(page_num)를 요청받아 조회 응답 방법 2) 특정 지점 부터 특정 갯수 기반 :..

[Django] Queryset 최적화 기법 (select, prefetch, F, Indexing 등)

사전 학습 내용 https://yubi5050.tistory.com/60 // ORM 이란? https://yubi5050.tistory.com/83 // ORM Queryset API https://yubi5050.tistory.com/130 // ORM Queryset 특징 QuerySet 최적화 기법 (1) select_related & prefetch_related 일반적으로 조회(GET)시 or Serailization 과정에서 많이 발생 ORM의 Lazy Loading 특성에서 발생하는 N+1 Problem 등 의 문제를 극복하기 위해 Eager Loading (즉시 로딩) 진행 📁 select_related ForeignKey(1:M)의 1입장에서, OneToOne 관계 등에서 사용 가능 S..

[Django] ORM Queryset 특징

사전 학습 내용 https://yubi5050.tistory.com/60 // ORM 이란? https://yubi5050.tistory.com/83 // ORM Queryset API QuerySet 특징 1 . LazyLoading (지연 로딩) 정말 필요한 시점에 데이터를 로드 진행 반복(Iteration), 슬라이싱 (Slicing) 피클링 / 캐싱 (Pickling/Caching) repr(), len(), list(), bool() 정말 필요한 만큼만 로드 진행함 위의 문제는 N+1 Problem 과 같은 문제 발생 QuerySet 특징 2. Caching 기존에 호출했던 Query 결과에 대해 cache를 가지고 있음 QuerySet의 캐싱을 통해 Query 문이 덜 호출되도록 하는 것이 중..

[Django] 채팅 시스템 (2) 코드 구현하기 (with. FE, BE)

이전 글에서는 Django Channel 라이브러리와 적용 전/후의 구조 비교에 대해 알아보았었다. 이번 글에서는 Django Channel을 이용한 채팅 시스템 구현을 해보려고 한다. (+추가 트러블슈팅) Channels Websocket UUID가 포함된 URL 수신하는 법 (링크) 📌 Django Channel 동작 Flow 📌 Channel layer란? channel layer는 쉽게 말해 의사소통 시스테므로, 많은 소비자들(client)들이 다른 client와 의사소통을 할 수 있게 해줌 개념 1. channel - 각 메시지가 전달될 수 있는 우체통 - 각 channel은 이름을 가지며, 다른 channel에게 메시지 전송 가능 개념 2. group - 연관된 channel들의 group -..

[Django, AWS] EC2 에서 Nginx + Gunicorn + Django 배포하기

Nginx + Gunicorn 필요 이유 Django는 기본적으로 runserver 라는 개발용 내장 서버를 탑재하고 있으나, 실제 서비스용 (Production Level) 으로 사용하기에는 성능의 한계, 보안 이슈 등 다양한 문제점이 존재하여, Gunicorn을 통해 배포한다. Gunicorn 은 Django 로 작성한 Web Application 에 HTTP 요청을 전달해주는 역할의 WSGI HTTP Server 로서 사용하며, worker process 의 개수와 worker class(async 방식인 Gevent, Tornado 등)를 설정하여 요청 처리 성능을 높일 수 있다. Nginx는 Free OpenSource Webserver 소프트웨어로 가벼우면서도 높은 성능을 내며, Bufferi..

[Django] User 모델 작성 방법 비교 (AbstractUser vs AbstractBaseUser)

👉 1. AbstractBaseUser vs AbstractUser 비교 AbstractUser AbstractBaseUser 사용 시기 Django의 기본 유저 모델이 제공하는 다양한 인증 기능들을 사용 하는 경우 기존 필드에 추가 커스텀 필드만 필요시 사용 최소한의 User 필드만 상속 받아 커스텀하여 사용 로그인 방식도 변경(ex. 아이디를 email로), 할 수 있고, 인증 절차를 직접 구현하고 싶을 때 사용 가능 PermissionsMixin 을 함께 상속하여, Django의 기본 그룹, 허가권 관리 등을 사용 가능 생성 테이블 비교 myuser 테이블 (11개 필드)로 구성 id, username, password, last_login, is_superuser, first_name, last_..

[Django] ORM Queryset API - 메소드 정리

👉 1. 생성 .create() : 데이터 1개만 생성 .bulk_create() : 데이터 여러개 생성 .get_or_create() : 조회 후 없으면 생성 # Create TeamBoard.objects.create(id=12, team='L', score=3, lastyear_ranking=11) # Create 여러개 TeamBoard.objects.bulk_create([ TeamBoard(team='M', score=2, lastyear_ranking=12), TeamBoard(team='N', score=2, lastyear_ranking=12), TeamBoard(team='O', score=1, lastyear_ranking=13) ]); # 조회 후 없으면 Create TeamBoar..