서비스 개발에 필요한 기능들을 미리 구현해서 모은 것
Frame(틀) + Work(일하다)
- 일정한 뼈대, 틀을 가지고 일함
- 제공받은 도구들과 뺘대, 규약을 가지고 무언가를 만드는 일
- 특정 프로그램을 개발하기 위한 여러 도구들과 규약을 제공함
소프트웨어 프레임워크
- 복잡한 문제를 해결하거나 서술하는데 사용되는 기본 개념 구조
직접 개발 X
- 자신이 만들고자 하는 로직에 집중해 개발할 수 있음
- 소프트웨어의 생산성과 품질을 높임
장점
- 개발 속도의 상승
- 검증된 코드의 사용
- 반복되는 불필요한 개발 감소
- 협업에 용이
단점
- 선택의 폭이 좁아짐
- 러닝 커브(학습 곡선)이 존재
Python으로 작성된 프레임워크
- Python이라는 언어의 강력함과 거대한 커뮤니티
수많은 여러 유용한 기능들
검증된 웹 프레임워크
- 화해, Toss, 두나무, 당근 마켓, 요기요 등
- 유명한 많은 서비스들이 사용 == 안정적인 서비스 검증
현재 대부분 웹서비스는 클라이언트-서버 구조가 기반
클라이언트와 서버 둘 다 하나의 컴퓨터
- 클라이언트 : 요청
- 서버 : 응답
클라이언트
- 웹 사용자의 인터넷에 연결된 장치
- Chrome 또는 Firefox와 같은 웹 브라우저
- 서비스를 요청하는 주체
서버
- 웹페이지, 사이트 또는 앱을 저장하는 컴퓨터
- 클라이언트가 웹페이지에 접근시
- 서버에서 클라이언트로 웹페이지 데이터를 응답
- 사용자의 웹브라우저에 표시
- 요청에 대해 서비스를 응답하는 주체
Google 홈페이지에 접속
- 구글 컴퓨터에게 'Google 홈페이지.html'을 달라고 요청
- 요청을 받은 구글 컴퓨터는 요청한 파일을 인터넷을 통해 우리 컴퓨터에게 응답
- 전달받은 파일을 웹브라우저가 우리가 볼 수 있도록 해석해줌
- 클라이언트 : 파일을 요청한 컴퓨터
- 서버 : 파일을 제공한 컴퓨터
프로젝트별 패키지를 독립적으로 관리하기 위한 것
각각의 패키지를 하나의 환경에 담아야 함
내 프로젝트를 다른 사람이 실행하기 위해선 모든 패키지를 다 설치해야 해야함
가상환경 생성
python -m venv venv
가상환경 활성화(on)
source venv/Scripts/activate/
가상환경 비활성화(off)
deactivate
가상환경 패캐지 목록 저장
pip freeze > requirement.txt
파일로부터 패키지 설치
pip install -r requirement.txt
프로젝트 생성
django-admin startproject 프로젝트명
서버 실행
python manage.py runserver
- Python에게 이 디렉토리를 하나의 Python 패키지로 다루도록 지시
- 별도로 추가 코드를 작성하지 않음
- Asynchronous Server Gateway Interface
- Django 애플리케이션이 비동기식 웹 서버와 연결 및 소통하는 것을 도움
- 추후 배포 시에 사용하며 지금은 수정 X
- Django 프로젝트 설정을 관리
- 매우 중요
- 사이트의 url과 적절한 views의 연결을 지정
- Web Server Gateway Interface
- Django 애플리케이션이 웹서버와 연결 및 소통하는 것을 도움
- 추후 배포 시에 사용하며 지금은 수정하지 않음
- 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인 유틸리티
- 수정 X
애플리케이션(앱) 생성
python manage.py startapp 앱명
앱(App) == 하나의 큰 기능 단위
- 정해진 규칙은 없으며 개발자가 판단해서 앱 생성
- 여러 개의 앱이 아닌 단일 앱으로 개발해도 괜찮음
- 관리자용 페이지를 설정하는 곳
- 앱의 정보가 작성된 곳
- 별도로 추가 코드를 작성하지 않음
- 애플리케이션에서 사용하는 Model을 정의하는 곳
- MTV 패턴의 M에 해당
- 프로젝트의 테스트 코드를 작성하는 곳
- view 함수들이 정의되는 곳
- MTV 패턴의 V에 해당
- Installed_APPS 리스트에 반드시 추가해야함
- settings.py에 존재
Project
- app들의 집합
- 프로젝트에는 여러앱이 포함될 수 있음
- 앱은 여러 프로젝트에 있을 수 있음
Application
- 앱은 실제 요청을 처리하고 페이지를 보여주는 등의 역할을 담당
- 앱은 하나의 역할 및 기능 단위로 작성하는 것을 권장
URL
- 구성
- 실제 기능을 담당하는 view와의 연결
view
- 실제 기능
- 함수를 사용
Template
- 사용할 자원
작동순서
- URL -> VIEW -> TEMPLATE