Django

장고를 시작하며

위니윈 2023. 3. 13. 20:59

웹 서버 -> 각 소프트웨어가 동작할 수 있는 환경이 되는 컴퓨터

웹 서버 프로그램은 사용자가 브라우저를 통해 서버 컴퓨터에 접속했을 때 요청을 정리하고 웹 애플리케이션으로 전달

 

웹 애플리케이션 서버 -> 웹 서비스 자체가 돌아가는 서버

 

웹 서버 프로그램이 웹 애플리케이션에 요청을 전달하거나 처리된 결과를 받아오기 위해 CGI (Common Gateway Interface) 방식 사용

이게 느려서 아파치 웹 서버는 fast_cgi나 기타 모듈 방식으로 발전했고

웹 애플리케이션 서버 방식으로 발전하게 됨

 

Java는 톰캣, 파이썬 장고나 루비 레일즈는 Gunicorn 같은 미들웨어 서버 방식을 사용

-> CGI 방식에 비해서 포크 방식으로 요청이 있을 때마다 프로그램을 별도로 실행해서 메모리를 잡아먹지 않고 대신 웹 애플리케이션 서버를 통해 요청을 한곳에 전달해서 메모리를 절약할 수 있게 효율화 되었다는 장점

 

 

장고는?

WSGI라는 미들웨어 방식으로 웹 애플리케이션 서버를 구동해서 적은 리소스로 높은 효율성을 내 보겠다

 

인프라

웹 서버와 웹 애플리케이션 서버가 동작하려면 컴퓨터가 필요한데 수백대 이상의 서버가 웹 애플리케이션을 동작시키고 데이버베이스 서버, 파일 이미지 서버 등이 별도로 동작하고 이메일, 로그인 서버를 따로 운영하기도 한다. 이게 인프라.

그리고 클라우드 컴퓨팅이란, 이런 인프라를 가상화하는 것

 

자, 예를 들어서 간단한 인프라를 보겠다

CDN - 로드밸런서 - 웹 서버 - 캐시,데이터베이스,파일 서버

 

CDN은 Content Delivery Network로 전세계에 노드 컴퓨터를 두고 사용자가 필요한 데이터를 미리 저장해 놓거나 요청받은 후에 다음 사용자를 위해 저장해 놓는 형태로 서버와 사용자간 물리적 거리로 인한 응답 시간 최소화 (ex 유튜브)

 

로드밸런서는 동시 접속자 300명을 감당하기 위해 컴퓨터 3대로 늘리기(업 스케일링), 웹 서버 사양을 늘리기(아웃 스케일링) 방식을 해야 할 때 사용하는 것이 바로 로드밸런서

사용자들은 로드밸런서의 IP를 얻어서 접속하고 로드밸런서는 접속한 사용자의 요청을 웹 서버로 전달... 클라우드 컴퓨팅에서는 로드밸런서도 내부적으로 아웃 스케일링을 통해 사용자 증가를 담당

 

 

MVC와 MTV

 

기존은 MVC 패턴임 Model-View-Controller

 

Model: DB의 구조를 결정화

View: 사용자에게 보여지는 UI - HTML 코드등 실질적으로 클라이언트에게 보임

Controller: 기능, 로직- 넘겨받은 데이터를 어떻게 해석하고 가공할지

 

MTV는? 

Model: Model

 

models.py를 통해 DB 명세 관리,

model은 클래스로 만드는데 클래스 이름=테이블 이름, 클래스 속성=Column

속성의 값이 컬럼의 데이터 타입과 제약사항을 결정

SQL을 몰라도 ORM(Object Relational Mapping)은 객체를 이용해 관계형 DB를 이용 가능

 

admn.py에서 DB의 추가, 수정, 삭제, 확인 가능 (Create-Read-Update-Delete) CRUD

모델 만들고 CRUD 페이지 만들어야 하지만 모델이 제대로 만들어졌니? -> 장고의 기본 관리자 페이지로 사용 가능

 

Template: View

HTML이 들어있는 파일

 

View: Controller

게시판을 만든다고 생각해봐라

글 쓰기, 보기, 수정, 삭제가 필요하겠지

이 페이지들은 하나하나 만들 때 views.py에 프로그래밍 해줌(class based, function based) 

 

views.py에 기능을 만들면 해당 기능은 urls.py에서 호출로 동작시킴

즉 어떤 url을 이용해서 어떤 view를 동작시킬지 결정해야 함 -> 프로젝트 urls.py와 각 앱에 해당하는 urls.py로 구성

 

'Django' 카테고리의 다른 글

쇼핑몰 만들기 프로젝트  (0) 2023.03.14
쇼핑몰 만들기 프로젝트 - aws 설정  (0) 2023.03.13
python2 vs python3  (0) 2023.02.25
바로 검색해  (0) 2023.02.24
첫번째 장고 앱 작성하기 (2)  (0) 2023.02.24