본문 바로가기
프로그래밍/Python & Django

[파이썬인강]7주차- 스타일링, Session, GCP, 배포 / 프로젝트 구성

by Cloud_Park 2021. 12. 27.

2021.11.11 - [분류 전체보기] - IT 기업 2.4개월차 드디어 노트북 구매

2021.11.11 - [프로그래밍/Python & Django] - [파이썬 인강] 1주차 파이썬 기본 문법 환경설정 및 Python 기본(Mac)

2021.11.11 - [프로그래밍/Python & Django] - [파이썬 인강] 2주차 - 반복문,튜플, 함수, 클래스, 상속

2021.11.11 - [프로그래밍/Python & Django] - [파이썬인강]3주차-모듈과 패키지, 파일 읽/쓰기 ,예외처리 및 심화문법1

2021.11.29 - [프로그래밍/Python & Django] - [파이썬인강]3주차-모듈과 패키지, 파일 읽/쓰기 ,예외처리 및 심화문법

2021.12.07 - [프로그래밍/Python & Django] - [파이썬인강]4주차 클레스와 객체 ,상속, 데이터베이스, 정규표현식, 스레드

2021.12.13 - [프로그래밍/Python & Django] - [파이썬인강]5주차- 웹 & 프론트엔드 기본(html, css)

2021.12.20 - [프로그래밍/Python & Django] - [파이썬인강]6주차 django 프레임 워크, django view,settings,url,templates 파일

2021.12.13 - [프로그래밍/Python & Django] - [Python & Django] HTML /CSS 실습환경

 

[Python & Django] HTML /CSS 실습환경

실습환경 - vscod vs코드에서 확장팩을 추가 1. korean language Pack for vscode 2. Live Server 적용하기 간단한게 HTML파일 생성하고 오른쪽 마우스 - Open with Live Server

base-on.tistory.com

 

 

 

 

안녕하세요.

드디어 2주차 남았습니다.  7주차 강의를 들었는데요.  배포, GCP를 사용하는 것이 가장 인상 깊었습니다.  장고에 대해 많이 알게 된  주가 된거 같내요.  나날이 발전하는 모습과 패스트캠퍼스의 자기개발챌린지를 조만간에 할 수 있다는 희망에 몹시 기대 됩니다.  저는 기존 AWS를 사용해보긴 했지만 이번에 배운 GCP는 다소 생소하고 AWS와 UI도 달라 당황했지만 VM을 만들어준다는 틀에서는 비슷한 면이 있습니다.

 

장고와 타프레임워크의 차이를 명확하게 설명해줘서 면접시 도움될 것 같습니다.

 

7주차 강의 포스팅하겠습니다.

 

스타일링하기 (bootstrap)

Bootstrap

docs를 보면서 따라하면 여러가지 디자인을 가져올 수있다.

내가 변경 원하는 태그를 검색하고 사진에 나오는 값을 복사 붙여넣기하고 태그에 클래스 설정만 해주면된다 .

 

--- 

생각보다 css가 이쁜 것들이 많았고 디자인에 둔한 저에게 좋았던 부분이 였습니다. 설정방법도 편하게 알려주셨습니다.

저는 2줄의 설명으로 했지만 너무 쉽게 설정할 수 있었습니다.

---

 

 

템플릿 태그

장고를 이 자리까지 오게한 요소중 하나로 빌트인태그와 템플릿태그가 있다.

태그들이 많지만 유용한것들만 보여드리겠습니다.

{% csrf_token %}
{% cycle "a" "b" %} #각각 교차로 출력
{% extends %} #사이트 헤터, 푸터의 정보
{% block %} # 
{% if %} {% endif %}
{% for i in items%}
{% includes %}

 

 

커스텀 템플릿 태그 / 필터 만들기

필터를 통해 원하는 값을 가져오기 쉽게 하기 위해 사용을 한다.

ex) 이메일 @뒤에 값을 *처리하기

@register.filter(name="email")
def email_maker(value):
	email_split=value.splate("@")
	return f"{email_split[0]}@********.***"

태그(뱃지)

 

from django.utils.html import mark_safe
@register.simple_tag(name="test-tag", takes_context=True)
def test-tats(context):
	for c in context:
		print(c)
	tag_html="<span class='badge badge-primary'>테스트 태그</span>"
	return make_safe(tag_html)

*팁*

하이퍼링크 태그 맞춰주기 
static 디렉터리만들고 
< href %static 하위 디렉터리 주소>

장고는 쿠키베이스 세션아이디 방식을 사용하지만 타 프레임워트는 jwt방식을 사용

세션을 사용하는데 어떻게 가져오고 변경하는지 들여다 보겟다

로그인 시 유저가 정보를 전달 → 장고가 받아서 유효한지를 확인후 → db에 저장을하게되고

→ 유저에게 세션키을 전달한다.

사용하고시 싶지 않을때 아랫부분 주석

settings파일의
미들웨어
django.contrib.sessions.middleware.SessionMiddleware

-----
세션엔진은 db의 부하를 초래한다.
	django.contrib.sessions.backend.~로 자동으로 생성됨 원치 않고 redis를 원하면 변경한다.

 

jwt방식는 쿠키 방식 + .단위로 1. 헤더 2. 데이터 3. 시그니처가 맞는지 인증값

jwt  장고 세션
요청마다 조회 옵션 must
정보 변경 가능 가능
저장방식 모든 방법 가능 쿠키
보안 우수 매우 우수

 

 

세션다루기

request가 이미 세션을 가지고 있다.

request.session[0]='bar'
request.setsion['0'] #0스트링으로 해야됩

추가적인것들
SESSION_COOKIE_AGE=1209600
SESSION_COOKIE_DOMAIN=None
SESSION_COOKIE_HTTPONLY=True
SESSION_COOKIE_NAME="sessionid"
SESSION_COOKIE_SAMESITE=Lax
SESSION_COOKIE_SECURE=False 
SESSION_SAVE_EVERY_REQUEST=False

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------

배포설정하기

장고에 설정을 위해 debug설정을 해줘야한다.

  1. True를 → False로
  2. ENV설정
#settings파일에서
ENV= os.environ.get("DJANGO_ENV","dev")
if ENV =="dev":
	DEBUG=True
else:
	DEBUG=False

ALLOWED_HOST = [*]

debug_toolbar관련있는 것도 주석

gunicorn: 단일 쓰레드로 돌아가는 장고의 활용성을 위하여 여러개의 워커들을 준비해 놓고 요청하는게 CGI

gunicorn세팅

pip install gunicorn

파이썬 글로벌로 설정이 되어 있기 때문에 venv를 사용

설치한 패치지 가져오기

pip freeze> requirements.txt

---
실행하기
gunicorn --build [hostIP]:[port] [project_name].wsgi.applicatio

css, 스크립트를 서빙을 못해 nginx등과 같은 웹서버를 사용한다.

 

 

 

------------------------------------------------------------------------------------------------------------------------------

클라우드에 배포하기(GCP가입)

VM 만드는 방법은 아래 참조

python3

sudo apt update
sudo apt install python3-pip python3-dev libpq-dev libmysqlclient-dev nginx curl
sudo apt-get install python3 python-dev python3-dev build-essential libssl-dev libffi-dev libxml2-dev libxslt1-dev zlib1g-dev python-pip

sudo -H pip3 install --upgrade pip
sudo -H pip3 install virtualenv

git clone [git address]
cd shrinkers
git reset --hard [version]
sudo guncorn --build 0:8000 shrinkers.wsgi.application

서비스 만들기 (ubuntu)

sudo vi /etc/systemd/system/gunicorn.service
---
[Unit]
Description=gunicorn deamon
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/home/rise_base_on/shrinkers
ExecStart=/usr/local/bin/gunicorn --build [ip]:[port] shrinkers.wsgi:application

[Install]
WantedBy=Multi-User.target
---
sudo systemctl deamon-reload
sudo systemctl start gunicorn

nginx설정

sudo vi /etx/nignx/site-available/shrinkers
---
server{
listen 80;
server_name IP
location=/favicon.ico{
		access_log off;
		log_not_fount off;
	}
location /static/ {
		root /home/web/myprojectdir;
		proxy_pass http://172.0.0.1:8000;
	}
}
---
sudo ln -s /etc/nginx/sites-avaliable/shrinkers /etc/nginx/sites-enable
sudo nginx -t
sudo service nginx restart

 

VM생성하기

GCP (VM생성)

상단좌측에 상병(가로 세줄 )눌러 VM 인스턴스 버튼 클릭- 생성

 

리전 : 서울

스펙 : 가장적은거

이미지: 우분투20.04

ssh: 허용

 

—만드는데 시간 조금 걸림

아이피 확인 및 ssh접근

서버확인

python --version

 

 

 

 

 

------------------------------------------------------------------------------------------------------------------------------

프로젝트 구성

 

 

 

프로젝트 이전의 개념 

httprespons

-rendering View,json Response View 모두 API의 일종

-html을 렌더링 하는지 json 형태로 단순 정보만 주는차이

-렌더링을 해야할때 django의 render를 사용 (화면이 바뀐다던가는 불가-js의 역할)

-json 포멧으로 전달해야 할 때는 jsonRespons를 사용

---------------------------------------------------------------------------------------------------------------------------

Rest API

-표준프로토콜이 아님 (서로 약속)

-표준이 아님

 

특징

uniform : 기능을 예측/파악 가능

stateless: 상태를 저장하지 않는다.

casheable: 백엔드에서 부터 내용(이름,나이등)을 바뀌지 않는다면 시간동안에 유지시킨다.

 

구현

method하는 행위를 구분

item과 id 만 url에 사용

“-”는 가독성을 위해사용

“_”는 사용하지 않ㅇ므

파일 확장자는 url에 포함하지 않음

언제나 소문자만 사용

 

 

--------------------------------------------------------------------------------------------------------------------------------

DB모델링

목적

-Mysql을 GCP에 설치

-python에서 접근을 하기위해 mysqlclient설치가 필요

 

 

GCP에  DB만들기

VM생성

DB선택

값입력

인스턴스 ID: testdb

비밀번호 : [password]

버전: 8.0

리전: 서울

단일영역 (저렴) / 여러 영역(고가용성이만 비쌈)

구성옵션에 다양한 옵션이

  • 경량 (cpu1,메모리3)

-스토리지 10기가

-자동증가사용 (원하면)

-연결(공개 (개발 시)/ 비공개(was, 프레인워크에서만 만지기 때문에 외부로하면 해킹의 소지가있다.))

 

 

-네트워크 추가

이름: Anywhare

네트워크(모두되도록): 0.0.0.0/0 | VM아이피대역만하여 보안 강화가능

 

 

[생성버튼]

 

생성시 10분 정도 소요 /완료되면 공개아이피 주소나옴

DataBase만들기

 [database 만들기 클릭]

데이터베이스 이름 : app.db

문자집합 : utf8mb4

대조 : utf8mb4_bin

 

 

----------------------------------------

Tools(디비버)
접속하여 mysql 연결

mysql 선택

database: [GCP에서 만든 DataBase_name]

server host: 아이피호스트 입력

username: [user]

password:[password]

 

 

 

django에 설정 방법

#mysql 클라이언트 설치
pip install mysqlclient
#pymysql은 순수하게 python으로 생성  mysqlclient은 c로 만들어짐  mysqlclient가 빠름 
---
settings.py

DATABASE ={
	"default":{
		"ENGIEN" :"django.db.backends.mysql",
		"NAME":"[DATABACE_NAME]",
		"USER":"[user]",
		"PASSWORD":"[password]",
		"HOST":"[GCP db VM의 아이피]",
		"PORT": 3306, #기본포트는 3306 
		"OPTIONS":{
			"autocommit": True,
			"charset": "utf8mb4"
		}
	}
}

 

이슈!! 

마이그레이션 시 오류 발생 

*기존의 프로젝트의 앱의 migrations의 디렉터리 db들을 삭제

python manage.py makemigrations
pythob manage.py migrate

 

 

 

 

 

 

이렇게 GCP이 VM에  퍼블릭클라우드로 프로젝트를 진행해봤고 추가적으로  각종의 이슈와 에러에 대처하는 자세를 배웠었습니다. 한번 취미 삼아 해보시면 재밋을 것으로 생각 됩니다.