1강 웹프로그래밍과 Django
[T24] 장고(Django) 01강_웹프로그래밍과 Django
🏆 웹과 관련된 기본 지식과 용어들을 배우게 된다.
네트워크
- 인터넷이 연결된 네트워크 안에서 웹 서비스를 사용할 것이다.
- 그러면 네트워크와 연결된 모든 사물들이 그 웹 서비스를 이용할 수 있다.
클라이언트와 서버의 관계
클라이언트: 기기에 설치되어 있는 브라우저가 클라이언트가 될 수 있다.
- 이 브라우저를 통해 서버에 서비스를 요청한다. (request)
- 브라우저가 아니더라도 모바일 환경에서 다양한 앱이나 윈도우의 ssh 명령어를 이용한 명령 프롬프트도 클라이언트가 된다.
- 기기와 응용 프로그램을 아울러 클라이언트라 부르기도 한다.
서버: 클라이언트의 요청을 받으면 그 요청에 맞는 작업을 수행하여 서비스한다.
- 클라이언트의 요청에 맞는 데이터를 응답한다. (response)
HTTP: 클라이언트와 서버 간 통신하는데에 있어서 제일 많이 쓰이는 통신 프로토콜
- 클라이언트-서버 간 통신은 간략하게 다음과 같이 이루어진다.
- 클라이언트가 서버에 서비스를 요청 (request)
- 서버가 서비스를 하기 위해 필요한 작업을 수행
- 서버가 클라이언트에게 결과를 응답 (response)
- 응답이 끝나면 HTTP가 연결을 끊어버림
- 서버는 많은 클라이언트들을 감당해야 하기 때문에 서버의 응답이 끝나면 HTTP가 연결을 해제한다.
- 연결을 유지해야 하는 경우에는 쿠키와 세션을 이용하면 된다.
- 연결을 유지해야 하는 데이터가 클라이언트쪽에 있으면 쿠키, 서버쪽에 있으면 세션이라고 한다.
- 보안 측면에서는 개인 PC에 저장되는 쿠키보다는 서버에 저장되는 세션이 더 안전하다.
HTTP 처리 방식
Client → Server 요청할 때 쓰이는 방식
- POST
- 클라이언트가 서버쪽으로 어떤 데이터를 넘기고 싶을 때 사용한다.
- GET
- 클라이언트가 서버쪽에서 어떤 데이터를 받고 싶을 때 사용한다.
- PUT
- 서버에 있는 데이터를 수정하고 싶을 때 사용한다.
- DELETE
- 서버에 있는 데이터를 삭제하고 싶을 때 사용한다.
- 그 외 잘 안쓰이는 방식
- HEAD
- OPTION
- TRACE
- CONNECT
- HTML의 태그는 POST와 GET 방식만 지원한다.
Server → DB
- Create: 생성
- Read: 조회
- update: 수정
- Delete: 삭제
POST와 GET
오타: POST의 요청 메시 → 요청 메시지
GET
- URL에 쿼리 스트링을 붙여 서버로부터 원하는 정보를 얻을 수 있게 한다.
- 데이터가 노출되므로 상대적으로 보안에 취약하다.
POST
- 메시지에 데이터를 담아 요청한다.
- URL이 아닌 메시지에 데이터를 담음으로써 상대적으로 보안에 강하다.
- Django에서는 보통 POST를 이용한다.
URL
URL의 기본 형태
→ [ 프로토콜 ] :// [ 도메인(호스트) ] / [ 경로 ] ? [ 쿼리 ]
- 데이터를 요청하는 쿼리문이 URL로 그대로 노출된다.
REST URL 형태
→ [ 프로토콜] :// [ 도메인(호스트) ] / [ URL 맵핑 (데이터)스트링 ]
- 추후에 학습하면서 자연스럽게 이해할 수 있게 된다.
REST와 Django URL 맵핑
REST 형태로 데이터가 들어오면 Django에서는 함수 호출과 같이 미리 정해둔 작업을 한다.
→ 이것을 맵핑이라고 한다.
서버 구성
서버는 보통 웹 서버 하나만 있는 것이 아니라 애플리케이션 서버도 둔다.
- 웹 서버
- 웹 서버에 있는 정적인 데이터를 요청했을 때는 단순히 처리하면 되지만 날마다 바뀌는 날씨 정보와 같이 동적인 데이터를 요청 시 애플리케이션 서버로 요청을 전달하게 된다.
- 애플리케이션 서버
- DB와 연동하여 주로 동적인 데이터 요청을 처리한다.
- 그 외 다른 서버들이 많이 있을 수 있다. (메일 서버, ftp 서버, …)
- 하드웨어적으로 서버를 분리하면 메모리 효율 향상과 성능 향상을 노릴 수 있다.
2강 Django 설치 및 프로젝트 생성
[T25] 장고(Django) 02강_Django설치 및 프로젝트 생성
🏆 Python, PIP, Django 설치와 MVT 패턴, 프로젝트의 구조에 대해서 알게 된다.
환경
- MacBook Air (M1, 2020)
- macOS Monterey 12.5.1
PIP (Python Install Package)
pip 버전 업그레이드하기
$ pip install --upgrade pip
- pip 대신에 pip3 명령어를 사용할 수 있다.
pip 버전 확인하기
$ pip --version
Django 설치
장고를 설치하기 전에 파이썬 가상환경에 대해서 알아보고 오자.
내가 헤맨 몇 시간 동안의 기록이다.
파이썬 가상환경 구축
완료되었으면 다음 명령어로 django를 설치할 수 있다.
$ pip install django
설치된 django 경로 확인하기
$ python -c "import django; print(django.__path__)"
Django 프로젝트 생성
$ django-admin startproject [project_name]
애플리케이션 생성
$ python manage.py startapp [app_name]
- 여기서 프로젝트를 여러가지의 기능들을 모은 것이라고 한다면 애플리케이션은 하나하나의 기능, 동작을 가리킨다. 모듈같은 의미인 것 같다.
- 프로젝트 내에서 실행하여야 한다.
💡 여기까지 실습 준비를 마쳤고, 이제부터는 MVT 패턴에 대해 알아보자.
MVC 패턴
- 모델은 DB와 연동되어 있고, 컨트롤러는 클라이언트에게 리퀘스트를 받으면 모델에서 데이터를 가져와 처리한다.
- 그 후 가장 적합한 뷰를 골라 응답을 한다.
- Model, View, Control 역할을 나눴기 때문에 유지보수가 용이하다.
- 자바의 Spring이 MVC 패턴으로 되어 있다.
MVT 패턴
- Django는 MVC 패턴에서 살짝 바꾼 MVT 패턴을 사용한다.
- Template은 MVC 패턴의 View와 동일하다.
- MVT 패턴에서의 View는 MVC 패턴의 Control과 똑같다.
- 결론적으로 동일하나 용어만 다르다.
프로젝트 디렉토리 구조
애플리케이션 디렉토리
- model.py
- 작은 크기의 DB가 내장되어 있음 (sqlite3)
- views.py
- template는 따로 만들어야 한다.
메인 애플리케이션 디렉토리
- settings.py
- urls.py
- 클라이언트로부터 url로 요청받았을 경우 이 파일이 뷰와 맵핑시켜준다.
배운 내용 정리
- 새롭게 배운 것
- 개발 환경 구축 중 파이썬 가상 환경에 대해서 알 수 있었다.
- pip를 통한 파이썬 라이브러리 설치하는 방법에 대해서 알 수 있었다.
- Django와 MVT 패턴에 대해서 알 수 있었다.
- 배운 것 중에 모르겠는 것들
- 정말로 MVC 패턴과 MVT 패턴 간에 차이가 없을까?
- 모르는 것을 알기 위해 찾아본 것들
- 구글에 “mvc mvt 차이”로 검색해보았다.
- 서버와 클라이언트 간에 통신을 원활하게 하기 위해 만들어놓은 여러가지 아키텍처 패턴들이 있는데, MVC 패턴은 그 많은 패턴 중에 하나라는 것을 알았다.
- MVC 패턴에서 Controller의 역할을 MVT 패턴에서의 View가 하며 Django 프레임워크도 일부를 직접 처리하는데에 차이가 있었다.
- 참고: MVC/MVT Architecture