Web application
- Web application (web service) 개발
- 인터넷을통해 사용자에게 제공되는 소프트웨어 프로그램을 구축하는 과정
- 다양한 디바이스(모바일, 태블릿, PC 등)에서 웹 브라우저를 통해 접근하고 사용할 수 있음
클라이언트와 서버
Client(클라이언트)
- 서비스를 요청하는 주체
(웹 사용자의 인터넷이 연결된 장치, 웹 브라우저)
Server(서버)
- 클라이언트의 요청에 응답하는 주체
(웹 페이지, 앱을 저장하는 컴퓨터)
웹의 동작 방식
- 우리가 컴퓨터 혹은 모바일 기기로 웹 페이지를 보게 될 때까지 무슨 일이 일어날까?
- 웹 브라우저(클라이언트)에서 'google.com'을 입력
- 브라우저는 인터넷에 연결된 전세계 어딘가에 있는 구글 컴퓨터(서버)에게 'Google 홈페이지.html' 파일을 달라고 요청
- 요청을 받은 구글 컴퓨터는 데이터베이스에서 'Google 홈페이지.html' 파일을 찾아 응답
- 전달받은 'Google 홈페이지.html' 파일을 사람이 볼 수 있도록 웹 브라우저가 해석해주면서 사용자는 구글의 메인 페이지를 보게 됨
Frontend & Backend
Frontend (프론트엔드)
- 사용자 인터페이스(UI)를 구성하고, 사용자가 애플리케이션과 상호작용할 수 있도록 함
- HTML, CSS, JavaScript, 프론트엔드 프레임워크 등
Backend (백엔드)
- 서버 측에서 동작하며, 클라이언트의 요청에 대한 처리와 데이터베이스와의 상호작용 등을 담당
- 서버 언어(Python, Java 등) 및 백엔드 프레임워크, 데이터베이스, API, 보안 등
Framework
Web Framework
- 웹 애플리케이션을 빠르게 개발할 수 있도록 도와주는 도구
(개발에 필요한 기본 구조, 규치, 라이브러리 등을 제공)
Django
Python 기반의 대표적인 웹 프레임워크
| 이유 | 상세 |
|---|
| 다양성 | Python 기반으로 소셜 미디어 및 빅데이터 관리 등 광범위한 서비스 개발에 적합 |
| 확장성 | 대량의 데이터에 대해 빠르고 유연하게 확장할 수 있는 기능을 제공 |
| 보안 | 취약점으로부터 보호하는 보안 기능이 기본적으로 내장되어 있음 |
| 커뮤니티 지원 | 개발자를 위한 지원, 문서 및 업데이트를 제공하는 활성화 된 커뮤니티 |
| 검증된 웹 프레임워크 | 대규모 서비스에서도 안정적인 서비스 제공(Spotify, Instagram, Dropbox, Delivery Hero) |
가상 환경
- Python 애플리케이션과 그에 따른 패키지들을 격리하여 관리할 수 있는 독립적인 실행 환경
- 가상 환경을 사용하는 이유
| 이유 | 상세 |
|---|
| 의존성 관리 | 라이브러리 및 패키지를 각 프로젝트마다 독립적으로 사용 가능 |
| 팀 프로젝트 협업 | 모든 팀원이 환경과 의존성 위에서 작업하여 버전간 충돌을 방지 |
- 가상 환경 만들기
$ python -m venv venv
- venv 폴더 위치는 내가 개발하는 환경에 둔다.
- venv 폴더 내 폴더 및 파일은 절대 직접 건들지 않는다

- 아무것도 없는 텅 빈 가상 환경

- 가상 환경 활성화
$ source venv/Scripts/activate

- 하나의 bash에서 활성화한다고 해도, 다른곳에서는 활성화 되어 있지 않음

- 환경에 설치된 패키지 목록 확인
$ pip list
- 가상 환경에는 아무것도 설치되어 있지 않음
- 가상 환경

- 글로벌 환경

패키지
- 의존성 패키지
- 한 소프트웨어 패키지가 다른 패키지의 기능이나 코드를 사용하기 때문에 그 패키지가 존재해야만 제대로 작동하는 관계
- 사용하려는 패키지가 설치되지 않았거나, 호환되는 버전이 아니면 오류가 발생하거나 예상치 못한 동작을 보일 수 있음
- 의존성 패키지 목록 생성
pip freeze > requirements.txt
- 개발 환경에서는 각각의 프로젝트가 사용하는 패키지와 그 버전을 정확히 관리하는 것이 중요


디자인 패턴
- 소프트웨어 설계에서 발생하는 문제를 해결하기 위한 일반적인 해결책
(공통적인 문제를 해결하는 데 쓰이는 형식화 된 관행)
- "애플리케이션의 구조는 이렇게 구성하자" 라는 관행
MVC 디자인 패턴
(Model, View, Controller)
- 애플리케이션을 구조화하는 대표적인 패턴
- ("데이터" & "사용자 인터페이스" & "비즈니스 로직"을 분리)
- 시각적 요소와 뒤에서 실행하는 로직을 서로 영향 없이, 독립적이고 쉽게 유지 보수할 수 있는 애플리케이션을 만들기 위해
MTV 디자인 패턴
(Model, Template, View)
- Django에서 애플리케이션을 구조화하는 패턴
- (기존 MVC 패턴과 동일하나 단순히 명칭을 다르게 정의한 것)
- View -> Template
- Controller -> View
Django project
- 애플리케이션의 집합
- (DB 설정, URL 연결, 전체 앱 설정 등을 처리)
Django application
- 독립적으로 작동하는 기능 단위 모듈
- (각자 특정한 기능을 담당하며 다른 앱들과 함께 하나의 프로젝트를 구성)
- 앱 생성
$ python manage.py startapp articles
- 포함관계이지만 물리적인 폴더는 밖에 있음


- 앱 등록
- 반드시 앱을 생성한 후에 등록해야 함
(등록 후 생성은 불가능)
- settings.py 파일의 INSTALLED_APPS 리스트의 앞쪽에 앱을 추가함

프로젝트 구조
- settings.py
- urls.py
- 요청 들어오는 URL에 따라 이에 해당하는 적절한 view를 연결
- __init__.py
- 해당 폴더를 패키지로 인식하도록 설정하는 파일
- asgi.py
- wsgi.py
- manage.py
- Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인 유틸리티

앱 구조
- admin.py
- models.py
- DB와 관련된 Model을 정의
- MTV 패턴의 M
- view.py
- HTTP 요청을 처리하고 해당 요청에 대한 응답을 반환
(url, model, template과 연계)
- MTV 패턴의 V
- apps.py
- tests.py
