클라이언트-서버 개념
네트워크
- 두 개 이상의 컴퓨터들 간의 연결
클라이언트-서버 시스템
- 클라이언트
- 서비스를 요청(Request)하는 컴퓨터
- 서버
- 서비스를 전송(Reply)하는 컴퓨터
What is URL
URL
- 네트워크 상의 자원을 나타내는 주소
https://never.com:8000/article/12345?page=2&size=12
프로토콜(Protocol)
- https 부분이 해당
- 컴퓨터끼리 네트워크 통신을 할 때 사용하는 규칙
- HTTPS, SMTP, FTP, SSH… etc
- HTTP
- 클라이언트와 서버 간의 통신을 위한 프로토콜
- HTTPS
- HTTP에 보안 기능이 강화된 프로토콜(HTTP + Security)
호스트(Host)
- never.com 부분이 해당
- 네트워크에서 서로를 구분하기 위한 주소
- 데이터 전송 경로를 확립해주는 역할
- 도메인
- 사람이 쉽게 이해할 수 있는 영문 주소
- IP
- 실제로 사용되는 네트워크 식별자
포트 번호(Port)
- 8000 부분이 해당
- 어느 서버에 접속해야 하는지 컴퓨터에 알려줄 때 사용하는 번호
- IP 주소가 건물 주소라면, 포트 번호는 방 번호
- 포트 번호는 1~65535 범위의 숫자로 표현
- Well-known port
- 1~1024 범위는 예약된 포트 번호
경로(Path)
- article/12345 부분이 해당
- 웹에 존재하는 자원에 대한 식별자
- 원하는 데이터를 명시
쿼리 스트링(Query String)
- page=2&size=12 부분이 해당
- URL을 통해 데이터를 전달할 때 사용
- 세부적인 조건/정보를 명시 (e.g. 필터링/탐색/정렬/페이징)
Django 프로젝트 시작
Django란?
- 웹 개발을 쉽게 할 수 있도록 도와주는 파이썬 기반의 웹 프레임워크
웹 프레임워크
- 웹 서비스 등의 제작을 보조해주는 도구 (react, express, django, spring… etc)
- 웹 서비스를 구축할 때, 항상 비슷한 유형의 요소들이 사용됨 (데이터베이스 연동, URL 라우팅, 보안, 서버 설정, 데이터 유효성 검사, 세션 관리… etc)
- 재사용할 수 있는 수 많은 코드를 웹 프레임워크로 통합
- 프레임워크는 코드의 큰 뼈대(frame)을 제공해줘서 그 뼈대에서 개발을 할 수 있도록 도와준다
Django를 쓰는 이유
- 파이썬을 사용하므로 쉽다
- 보안이 우수하다
- 편하다
- 개발 시간을 단축시켜준다
MVC 패턴

- 개발 영역을 Model, View, Controller로 역할을 분리하는 디자인 패턴
- 각 영역끼리 영향을 주지 않고 개발 및 유지보수 가능
- Model
- 데이터를 저장하고 처리하는 부분
- View
- 사람들에게 보여지는 부분
- Controller
- 내부 동작 로직을 담당하는 부분
- Model과 View 사이의 데이터 흐름을 제어하는 부분
MTV 패턴

- MVC에 대응되는 Django의 디자인 패턴
- Model, Template, View로 구성
- Model
- MVC 패턴의 Model에 대응
- DB에 저장되는 데이터
- Template
- MVC 패턴의 View에 대응
- 사용자에게 보여지는 화면
- View
- MVC 패턴의 Controller에 대응
- 요청에 따른 로직을 수행
프로젝트 / 앱
- 하나의 웹 서비스가 하나의 프로젝트
- 앱은 프로젝트를 구성하는 하나의 단위
- 각각의 앱은 MVT 패턴을 따름
가상 환경

- 프로젝트에 필요한 패키지들을 저장할 독립된 환경
- 프로젝트마다 필요한 라이브러리, API들의 버전이 다르기 때문
리눅스 명령어
- mkdir [디렉토리명]
- 디렉토리 생성
- ls
- 현재 디렉토리에 존재하는 파일과 폴더 조회
- ls -a
- 숨겨진 파일, 폴더까지 조회
- pwd
- 현재 디렉토리 경로
- cd
- [이동할 경로] 디렉토리 이동
pip 명령어
- pip install [패키지명]
- 설치
- pip search [패키지명]
- 검색
- pip uninstall [패키지명]
- 삭제
- pip freeze
- 현재 설치된 패키지와 버전 목록
가상 환경 생성 & 장고 설치
bash shell 기준 명령어
- $ python venv [가상환경 이름]
- 가상 환경 만들기
- $ source [가상환경 이름]/Scripts/activate
- 가상 환경 활성화 for windows
- $ source [가상환경 이름]/bin/activate
- 가상 환경 활성화 for mac OS
- $ deactivate
- 가상 환경 비활성화
- $ pip install django
- Django 설치
- $ django-admin
- 장고의 관리 작업을 위한 명령어
장고 프로젝트 구조
- $ django-admin startproject [프로젝트명] .
- 프로젝트 생성
- .(현재 디렉토리)를 프로젝트 최상위 디렉토리로 지정
- 핵심 파일이 들어있는 Core Project Directory만 생성
- 현재 디렉토리가 루트이므로, Project Root Directory가 따로 생성되지 않음
- Project Root Directory
- 장고 프로젝트의 모든 파일이 들어 있는 최상위 디렉토리
- Core Project Directory
- 프로젝트의 핵심 파일들을 보관하는 디렉토리
- 기본적으로 프로젝트 명과 동일한 이름을 가짐
- 이름을 수정할 수 있으나, 의존하는 일부 코드들도 수정해야 한다
- manage.py
- 장고 프로젝트 관리에 사용되는 파일
- 장고 서버 켜기
- Application 만들기
- 데이터베이스 초기화 및 변경사항 반영(migration)
- init.py
- 패키지 구조를 명시하는 단순 빈 파일
- asgi.py/wsgi.py
- 프로젝트가 웹 서버로서 동작할 수 있도록 해주는 파일
- settings.py
- 장고 프로젝트 환경설정 및 구성을 저장하는 파일
- urls.py
- 각종 URL을 정의하고, 화면과 매핑해주는 파일
- .gitignore
- Git 버전 관리에서 제외할 파일 목록을 지정하는 파일
- settings.py는 다른사람들에게 알려지면 안되는 비밀 키를 포함
- 가상 환경 파일은 크기가 크고, 다른 사람들과 공유하지 않아도 됨
- $ python manage.py runserver
- Django 개발 서버 실행
- 127.0.0.1:8000을 브라우저에 입력하면 확인 가능
- Ctrl + c : 서버 종료
IP주소 127.0.0.1은 로컬 호스트(local host)를 의미하며, loopback address라고도 한다.
자신이 송신한 패킷이 network layer 밑으로 내려가지 않고, 그대로 상위 계층으로 돌아와 자기 자신에게 반환된다.
앱 시작
- $ python manage.py startapp [앱 이름]
- 프로젝트 폴더에서 Django 앱 생성

- 앱을 생성한 후 settings.py의 INSTALLED_APP에 등록해야한다
- ‘앱 이름’을 작성하고 ,(콤마)를 찍어주는 것이 좋다
- admin.py
- 관리자가 접속하면 보이는 화면(관리자 패널)과 관련된 파일
- 127.0.0.1:8000/admin/
- apps.py
- 앱을 등록하는 기능을 하는 파일
- apps.py의 함수 경로로도 앱을 등록할 수 있다
- tests.py
- 테스트를 위한 파일
- models.py
- 데이터베이스와 관련된 파일
- DB 사용 계획, 정의, 연결 등 다양한 설정들을 한다
- views.py
- 앱에서 어떤 기능을 할 지에 대한 메인 로직을 담당하는 파일
View 작성
- view에서 요청(request)를 받고 응답(response)를 보낸다
- controller 역할!

- 출력할 화면을 앱 폴더 내부의 views.py에 작성

- urls.py에 URLPattern 작성
관리자 패널

- 회원 정보 관리, 서버의 데이터 관리 등 관리자 모드를 사용할 수 있는 페이지
- $ python manage.py createsuperuser
- 관리자 계정 생성