본문 바로가기

Web Programming/django22

Gunicorn Gunicorn - gunicorn은 WSGI기술의 일종 WSGI(Web Server Gateway Interface) - 파이썬 어플리케이션과 웹 서버와 통신하기 위한 규약 또는 인터페이스 - WSGI 서버와 파이썬 어플리케이션이 WSGI의 규칙에 따라 작성되면, 어플리케이션은 내부 구현에 상관없이 WSGI 서버를 선택 가능 - 파이썬에서 대표적으로 사용되는 WSGI로는 uWSGI, gunicorn이 있으며, gunicorn의 퍼포먼스가 비교적 가볍다고 함. Gunicorn을 사용하는 이유 - Gunicorn은 Python WSGI로 웹 서버(Nginx)로부터 서버사이드 요청을 받으면 WSGI를 통해 서버 어플리케이션으로 전달해주는 역할 - Django의 "runserver" 또한 같은 역할을 수행하지.. 2022. 7. 5.
AWS 서버 배포 - (2) Django 프로젝트 배포 1. 가상환경 패키지 저장 1) 가상환경 실행 source [Virtual Environment]/bin/activate 2) requierments.txt 파일 생성 pip3 freeze >> requirements.txt 2. EC2 인스턴스에 git 설치 sudo yum install git 3. git clone mkdir ~/[디렉터리 명] - 프로젝트를 clone할 디렉터리 생성 cd ~/[디렉터리 주소] && git clone [레파지토리 명] 4. 가상환경 내 패키지 설치 source [가상환경 명]/bin/activate - 가상환경 활성 pip3.8 install -r requirements.txt - 패키지 리스트를 통해 패키지 설치 5-1. 패키지 관련 버전 이슈 해결 - djang.. 2022. 6. 14.
AWS 서버 배포 - (1) EC2 인스턴스 생성 AWS EC2 인스턴스 생성 1) region 설정 2) 인스턴스 생성 ec2 -> 인스턴스 시작 (1) AMI(Amazon Machine Image) 선택 - AMI란 EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것 - 프리 티어 사용 가능한 Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type 선택 (2) 인스턴스 유형 선택 - t2는 요금 타입, micro는 사양을 의미 - T 시리즈(t2, t3 등)는 범용 시리즈라고 불리기도 하며, 다양한 사양을 사용할 수 있음 - T 시리즈는 크레딧이란 일종의 CPU를 사용할 수 있는 포인트 개념이 있음 - 인스턴스 크기에 따라 정해진 비율로 CPU 크레딧을 계속 받게 되며, 사용하지 않을 때는.. 2022. 6. 9.
[Django] Model기반 form 형식 지정 목표 - model 기반의 form 형식을 지정할 수 있다. form 태그 form 태그는 웹 애플리케이션에서 데이터를 입력받는 태그이다. Model class Patient(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() height = models.FloatField() weight = models.FloatField() blood = models.CharField(max_length=10) description = models.TextField() 만약, 위 코드에서 처럼 Model에 Patient라는 클래스가 있다면 우리는 이러한 데이터를 웹 애플리케이션에서 입력받기위해 template과 view에.. 2020. 6. 22.
[Django] 페이지네이션 목표 - 페이지네이션을 사용해 한 페이지당 일정한 수의 글만 제공할 수 있다. 페이지네이션(Pagination) 한 페이지당 일정한 수의 데이터만 보여주는 기능이다. 이런 게시글이 있을 때, 만약 게시글이 10만 건이 있다면, 게시글을 불러오는데 많은 시간을 소모하게 되고 또한 사용자가 특정 게시글을 찾기 위해서 계속해서 마우스 스크롤을 내려야하는 상황이 발생한다. 페이지네이션을 사용해 이러한 문제를 해결할 수 있다. 페이지네이터는 테이블의 레코드 중 지정한 수 개수만큼 페이지 단위로 관리해 사용자에게 제공한다. 현재 이 글이 포스트되고 있는 티스토리 블로그에서도 페이지네이션을 확인할 수 있다. Views.py(View) from django.core.paginator import Paginator de.. 2020. 6. 22.
[Django] 템플릿 확장 목표 - 템플릿 확장을 통해 html 코드 작성을 간결하게 한다. html 코드의 중복 html 코드를 작성하다보면, html 파일 마다 html 태그, head 태그, nav bar 등 중복되는 코드가 발생한다. {% load static %} {% if user.is_authenticated %} 새 글쓰기 {{user.username}} 로그아웃 {% else %} 회원가입 로그인 {% endif %} ... 이러한 소스 코드의 중복은 번거로울 뿐만 아니라 가독성마저 떨어뜨리게 된다. Django에서는 템플릿 확장을 통해 이러한 문제점을 해결할 수 있다. 하나의 중복된 코드를 저장해두는 base.html을 만들고, 그 안에 담겨져야할 다른 html 코드에 적용한다. base.html 생성 프로젝트 .. 2020. 6. 22.
[Django] 부트스트랩 목표 - 부트스트랩을 사용해 빠른 프론트엔드 개발을 할 수 있다. 부트스트랩(Bootstrap) 부트스트랩이란 Jquery 기반의 오픈소스 프론트엔드 라이브러리로, 버튼, 레이아웃 등 프론트 엔드에 필요한 많은 요소들을 내장하고 있어 빠른 프론트 엔드 개발을 지원한다. 또한, 제공하는 요소들은 반응형 웹을 지원하며, 부트스트랩을 사용해 개발하면, 협업 또는 프로젝트 인계 시에 빠른 캐치업이 가능하다는 이점을 가지고 있다. 컨텐츠 다운로드 부트스트랩에서 제공하는 css, javacript 등의 파일들을 다운로드하는 방법에는 두 가지 방법이 있다. 첫 번째는 부트스트랩 웹 페이지에서 직접 파일들을 다운받아 적용시키는 방법이다. 부트스트렙 홈페이지에서 관련된 리소스를 다운받아, 프로젝트 내에 static 디렉.. 2020. 6. 22.
[Django] URL 관리 목표 - app 단위로 url을 관리할 수 있다. urls.py urlpatterns = [ path('admin/', admin.site.urls), path('', blog.views.index, name='index'), path('detail//', blog.views.detail, name='detail'), path('create/', blog.views.create, name='create'), path('delete//', blog.views.delete, name='delete'), path('update//', blog.views.update, name='update'), path('login/', account.views.login, name='login'), path('signup/.. 2020. 6. 22.
[Django] 이미지 업로드 목표 - 사용자가 이미지를 업로드할 수 있는 기능을 구현한다. - 미디어 파일에 대해서 이해한다. Media file static 컨텐츠에는 두 가지 종류가 있다. 1) static file - 개발자가 웹 애플리케이션 개발을 위해 개발 과정에서 저장한 파일(css, javascript, image) 2) media file - 사용자가 웹 애플리케이션에 업로드한 파일(image) 저번 포스트에서 static file을 관리하는 방법을 알아보았으니, 이번에는 media file을 업로드하고 관리하는 방법을 알아보자 Media files 저장 및 전달 설정 media file을 저장하고 관리할 수 있는 디렉터리 설정과 url 전달 설정이 필요하다. settings.py에 아래의 코드를 추가한다. # 미디어.. 2020. 6. 21.
[Django] 정적파일 목표 - Django에서 정적파일을 관리하는 방법을 알아본다. 지난 CRUD Operation에 대한 포스트에서 '정적 컨텐츠'란 말을 잠깐 한적이 있었다. 정적 컨텐츠는 웹 애플리케이션의 구성요소 중 웹 서버에 저장되어있는 html, css, image 파일 등과 같이 컨텐츠가 고정되어 사용자의 요청에 따라 변하지 않는 컨텐츠를 의미한다. Django 에서는 이러한 정적 컨텐츠들을 프로젝트 디렉토리 내의 static 디렉토리에서 '프로젝트 단위'로 관리한다. 그럼 Django에서 정적 컨텐츠를 관리하는 방법을 알아보자 App 내의 static 디렉토리 생성 1) app 디렉터리(blog) 내에 static 디렉터리를 하나 생성 2) static 디렉터리 내에 css, js, img 디렉터리를 생성 3).. 2020. 6. 21.
[Django] 모델 관계 (2) 저번 포스트에서 1:n 관계를 맺는 방법에 대한 글을 썼다. 이번 글을 Django에서 1:1, 1:n, n:m의 관계를 맺는 예시이다. 1:1 관계 1:1 관계는 OneToOneField를 이용해 표현할 수 있다 OneToOneField는 ForeignKey에 Unique 속성을 True로 준 것과 동일하게 작동한다 class 모델이름(models.Model): 필드이름 = models.OneToOneField(관계대상모델) 1:1 관계를 표현하는 기본적인 방법을 위와 같다. class Husband(models.Model): name = models.CharField(max_lenght=10) age = models.IntegerFiled(default=0, blank=Ture, null=True) .. 2020. 6. 21.
[Django] 모델 관계 (1) 목표 - 사용자만이 게시글을 작성할 수 있도록 구현한다. - 모델 관계를 이해한다. 등록된 사용자만이 게시글을 작성할 수 있도록 구현해보자. 사실 이 부분은 게시글을 작성할 수 있는 권한은 등록된 사용자에게 제한을 둔다는 점보다 모델 간에 관계를 맺는다는 점에서 더 큰 의미가 있다. 이전 포스트까지 진행하면서 데이터베이스에는 아래와 같은 테이블들을 가지고 있다. 생각해보면 User라는 클래스는 따로 정의해주지 않았다. 하지만, Django는 User라는 모델을 기본적으로 제공하고 accout 앱 내의 views.py에서 from django.contrib.auth.models import User django.contrib.auth.models의 User 클래스를 import해서 사용하였다. Django.. 2020. 6. 21.