728x90

https://docs.djangoproject.com/ko/4.2/intro/tutorial01/

Django 개발 서버는 순수 Python으로 작성된 경량 웹 서버 입니다.

개발 중에만 사용할 수 있도록 되어 있어서 운영환경에서는 다르게 사용해야 한다고 합니다.

장고 프로젝트 사이트에도 "웹 서버가 아닌 웹 프레임워크"라고 설명을 하고 있습니다.

즉 client 호출 대기하는 Web Server(ex Nginx)를 두고 wsgi(Web Server Gateway Interface, ex Gunicorn)를 통해 Django( Was Server )와 연동합니다.

 

정리하면 Django는 와스 서버로서 개발 서버로 동작시 웹서비스 기능을 지원한다고 보면 되겠네요.

 

※ 로컬 프로젝트 프로젝트명 [my_bn1]으로 생성 정보( 업데이트 예정 : book notice 로 DB연동 프로젝트용 )

# 가상화 모듈 설치 
## for mac
python3 -m venv venv
source venv/bin/activate
pip list
pip install django

## 가상화 모듈 설치 ( for windows in vscode bashterminal)
python -m venv venv
source venv/Scripts/activate
pip list
pip install django

; Package    Version
; ---------- -------
; asgiref    3.6.0
; Django     4.2.1
; sqlparse   0.4.4
; tzdata     2023.3

pip freeze > requirements.txt   : 현재 프로젝트에 적용된 라이브러리 정보가 해당 파일에 등록된다.

# 프로젝트 생성하기
## project name "my_bn1" location "." : 현재 폴더 예하에 my_bn1 폴더를 만들고 manage.py가 생성되지만 
   "." 로 폴더를 지정하여 현재 폴더에 manage.py가 생성되도록 한다.
django-admin startproject my_bn1 .
<!-- 
./   
    manage.py  : 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티 입니다. manage.py 에
                 대한 자세한 정보는 django-admin and manage.py 에서 확인할 수 있습니다.
    mysite/    : 디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장됩니다. 이 디렉토리 내의
                 이름을 이용하여, (mysite.urls 와 같은 식으로) 프로젝트의 어디서나 Python 패키지들을 임포트할 수 있습니다.
        __init__.py  : Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 
                       파일입니다. 
        settings.py  : 현재 Django 프로젝트의 환경 및 구성을 저장합니다. Django settings에서 환경 
                       설정이 어떻게 동작하는지 확인할 수 있습니다.
        urls.py  : 현재 Django project 의 URL 선언을 저장합니다. Django 로 작성된 사이트의 “목차” 
                   라고 할 수 있습니다. URL dispatcher 에서 URL 에 대한 자세한 내용을 읽어보세요.
        asgi.py  : 현재 프로젝트를 서비스하기 위한 ASGI-호환 웹 서버의 진입점입니다. 자세한 내용은 
                   ASGI를 사용하여 배포하는 방법 를 참조하십시오.
        wsgi.py  : 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점입니다. WSGI를 사용하여
                  배포하는 방법를 읽어보세요.  WSGI(Web Server Gateway Interface :위스키 )
        -->

## start python
python manage.py runserver 

## sqlite
python manage.py makemigrations
python manage.py migrate

# folder setting
TEMPLATES = [
    {
...
        'DIRS': [BASE_DIR/'templates'],
...        



# git init
git init
git remote add origin https://github.com/[레파지토리]
-- ex) git remote add origin https://github.com/si0-lab/djangotest1.git

## …or create a new repository on the command line
echo "# djangotest1" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/[레파지토리]
--ex) git remote add origin https://github.com/si0-lab/djangotest1.git
git push -u origin main

## …or push an existing repository from the command line
git remote add origin https://github.com/[레파지토리]
-- ex) git remote add origin https://github.com/si0-lab/djangotest1.git
git branch -M main
git push -u origin main

## …or import code from another repository
You can initialize this repository with code from a Subversion, Mercurial, or TFS project.

# reprojects 
deactivate
rm -rf venv
python -m venv venv
source venv/Scripts/activate
pip install -r requirements.txt

# 장고 설치 확인 ( for windows )
py -m django --version

## 파이썬 가상환경 활성화
### 초기 설정시 ( 기존 사용시에도 사용 가능 )
python3 -m venv venv
source venv/Scripts/activate
### 활성화 명령 파일 실행
venv/Scripts/activate.bat
-- set VIRTUAL_ENV=D:\workspace\test1django\myjan1\venv 가상화 위치 정보가 파일내에 있다.
728x90
728x90

※ 장고 웹서비스를 간단히 구성해보려 보다 보니 사설이 늘어나서 정리해봅니다.

 구성 자체는 심플하게 선택하였습니다. 선택 후 특장점을 알아보니 정리를 해두면 도움이 될것 같네요.

  • Docker, Nginx, gunicorn, django

 특장점이 있어서 이 선택을 하게 되었지만, 아는 사람에게는 단순한 내용이겠지만 모르는 사람에게는 설명이 필요할 거라 생각되기 때문에 조금 적어 보겠습니다.

... 사설은 접고

더보기

 서버 관련해서 오래전부터 공부는 실사용과 비슷한 환경으로 맞춰서 해보았습니다. 물론 담당 업무가 아니기도 했으니 잘 잊어 버리고 생활하지만, 2003년부터 간간히 리눅스, 유닉스, 우분투 를 깔아서 사용해보고 있습니다. 인터뷰하는 곳에 가면 "단순한 건 할 수 있어요"라고 말하는데 공부하시는 분들에게는 많은 것을 해보시라고 이야기 해 드리고 싶네요.

 언제 사용하게 될지 모르기도 하고 자주 사용안하면 안 해본거라 생각하다보니 누적된 경험치가 얼마나 도움이 되는지도 이야기해 드리기도 모호하지만, 도움이 되는 것은 분명합니다. 

Docker

 리눅스 설치부터 스터디가 시작해서 버철머신으로 넘어와서 요즘은 도커를 사용하고 있어서 도커선택이 되었지만, 왜 도커를 사용하는지 도커를 모르는 분들이 이글을 볼 수 있으니 간단히 적어보면, 도커 컨테이너에 접속하면 리눅스 환경을 사용할 수 있다고 보시면 됩니다. 버철머신의 경우 OS환경을 구성하기 위해 많은 리소스를 설정해야 하는데 도커의 경우 상대적으로 적은 리소스를 사용하기 때문에 사용을 하고 있습니다. 

 

https://www.docker.com/why-docker/

https://papago.naver.net/website?locale=en&source=en&target=ko&url=https%3A%2F%2Fwww.docker.com%2Fwhy-docker%2F 

 아마존 서비스 중에도 도커를 사용한 서비스도 있어서 적용시에도 도움이 되지만, 개인적인 교육 및 오픈 소스 커뮤니티 용으로는 무료라는 것도 중요한 선택의 이유입니다.

 

Nginx

 - 아파치 / NGINX - 생각없이 늘 사용하던 아파치와 개인적으로 8년전 쯤부터 이야기 들어오던 nginx 비교 후 nginx 선택

 아파치의 경우 스레드 포크 방식으로 호출이 많을 경우 메모리 점유가 늘어나서 서버가 포화상태를 넘으면 서비스 중단이 발생한다고 알고 있고, NGINX를 호출이 늘어나도 이벤트 방식으로 비동기 처리방식이라 메모리 점유율이 호출과 비례해서 늘어나는 구조는 아니라고 알고 있습니다.

 핵심을 정리하여 간단히 생각을 정리해보면 다음과 같습니다. 

 기존 웹서비스(Apache)는 프로세스를 스레드 방식으로 하면 서로 독립적으로 처리하는 프로그램이 생성되어 처리된다고 생각하면 됩니다. 일반적으로 빠른 처리가 가능하지만 많은 사용자(10000)를 처리 시 서비스에 문제가 있을 수 있습니다. 참고로 스레드 방식의 가장 큰 문제는 디버깅하기가 어렵다는 것입니다. 

 nginx의 경우 이벤트를 큐에 입력하여 이벤트 처리 방식으로 순차처리 방식이라 오래걸리는 작업이 걸리면 그로인해 뒷작업이 대기 상태로 오래 있게 됩니다. 이것을 비동기식 방법으로 해결하였다고 합니다. 하지만 큐의 사이즈를 넘어 선다면 서비스가 종료 되지는 않겠지만 누실되는 것이 발생될 것 같습니다. 이 내용은 윈도우 큐를 사용해본 사용자 경험에서 나온거라 nginx에서 어떻게 되는지는 찾아보아야 겠네요. 

 메모리 문제와 같이 서비스 중단의 발생없이 많은 서비스 요청에 대응 할수 있다는 점에서 nginx의 장점이 있어서 선택했습니다.

 

gunicorn : WSGI ( Web Server Gateway Interface ) 중의 하나

프레임워크의 웹 서버로 파이썬 스크립트가 웹 서버와 통신하도록 도와주며 웹 서버와 웹 어플리케이션 사이에 위치한다. 때문에 WSGI는 웹 서버와 웹 앱 두 가지의 특징을 가지고 있다.

웹 서버와 웹 앱

웹 서버는 html, image 등 정적인 파일, 소스들을 처리하며 Apache, Nginx를 예로 들 수 있다.

웹 앱은 Django, Flask와 같은 파이썬 프레임 워크라 할 수 있고 동적인 요청을 처리하고 웹 서버에게 처리한 결과를 돌려준다.

WSGI는 서버와 앱 사이에서 Callable Object 를 통해 웹 서버가 요청에 대한 정보를 웹 앱에 전달한다.

대략적인 구조를 보면 쉽게 이해가 될 것 같다.

 자세한 분석보다는 개념적 이해를 하는 것이 좋을 것 같다. 

 

django

오늘의 주인공. spring으로 게시판을 만들어 보았고 python으로 구현해 보고자 하는 내용이다. 

https://docs.djangoproject.com/ko/4.2/intro/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 python은 현재 3.12 개발자 버전이 나왔고 로컬 개발 환경은 stable diffusion 경험을 위해 Python 3.10.6 환경으로 설정되어 있는 상태입니다.

 django는 4.2버전이 최신으로 나와있네요. 사용버전에 대해서 잘 나와있네요. 일단 현재 설치되어 있는 파이썬 기준으로 장고 4.2버전 호환이 된다고 나와있네요.

https://docs.djangoproject.com/ko/4.2/faq/install/#faq-python-version-support

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

장고 4.2 : Python 3.8~3.11

 

 

 다음에 시간을 내서 버전별 특색과 장단점을 알아보고 python 버전과 호환성을 살펴보고 spring과 react로 구현한 db조회 게시판을 비슷하게 만들어 보겠습니다.

 문제는 얼마나 걸리냐의 문제일 것 같고, 나중을 위해 정리하면 한달전에 파이썬을 입문하여 기본 문법을 확인하고 웹크롤링등 구글의 codelab을 사용해본 상태에서 spring과 react 복습용 게시판을 만들어 본 상태입니다.

1차 목표 파일럿시스템 소개...

2023.04.21 - [프로그램/Web] - spring boot vscode로 oracle table 조회 실행해보기(2023.4)

 

spring boot vscode로 oracle table 조회 실행해보기(2023.4)

개발 스펙을 검토중이라면 각 구성항목의 버전별 지원여부와 유무료 정책 및 버전별 특성을 확인하시는 습관을 들이기 바랍니다. 연습하거나 공부용이라면 이점을 확인 안하는 경우가 많아서

jsi0.tistory.com

2023.04.21 - [프로그램/Web] - Oracle23c 도커 설치 후 테스트 계정 생성(2023.4)

 

Oracle23c 도커 설치 후 테스트 계정 생성(2023.4)

테스트 프로그램 만들고 확인할 용으로 적어 봅니다. 2023.04.15 - [프로그램/짜투리상식] - Dorker에 Oracle 설치(2023.04) Dorker에 Oracle 설치(2023.04) 도커 설치 후 오라클 공식 홈페이지에 접속하여 최신

jsi0.tistory.com

 

2023.04.23 - [프로그램/react] - 간단하게 react 게시판 만들기 (2023.4)

 

간단하게 react 게시판 만들기 (2023.4)

때때로 정리를 했었는데 막상 다시하려니 무엇부터 봐야 할지 고민되네요. 다시 정리해 봅니다. 무척 돌아가는 정리가 될것 같네요. 파일럿 서비스로 동작유무 정도의 목적으로 기존 생각을 정

jsi0.tistory.com

 

 

 

728x90

'프로그램 > python' 카테고리의 다른 글

Django 웹 프레임 워크 간단 설명  (0) 2023.05.10
django 로컬 개발 서버 알아보기(2023.05)  (1) 2023.05.10
Notion AI를 이용한 Python 요약  (2) 2023.04.13
1. 파이썬 개요와 공부 환경  (1) 2023.04.13
python 강좌  (0) 2023.04.12

+ Recent posts