GUI와 CLI 차이
MySQL Workbench같은 그래픽으로 보이는 프로그램이 GUI
터미널처럼 글자로만 하는게 CLI
파이썬으로 할 수 없는 일
- 시스템과 밀접한 프로그래밍 영역
- 윈도우라는 운영체제를 만들고 싶다라고 한다면 파이썬은 맞지 않다. 이유는 파이썬이 인터프리터 언어 이기도 하고 고급언어 저급언어로 나뉠수 있는데 고급언어라면 어플리케이션을 만드는 그런 언어이고 저급언어라고 한다면 정말 기계와 밀접한 시스템을 만드는 언어이다. 따라서 파이썬은 고급언어에 가깝다
- 모바일 프로그래밍
- 파이썬은 모바일 앱을 만들더라도 백엔드 즉 서버에서 처리하는것들이 필요할때 그럴때 파이썬을 사용한다. 어플리케이션 화면을 만들때는 적합하지 않다 (javascript - ReactNative, Dart - Flutter)을 주로 사용한다.
brew로 데이터베이스 서버 실행 및 종료 방법
- MySQL
- brew services start mysql
- brew services stop mysql
- mongodb
- brew services start mongodb-community
- brew services stop mongodb-community
파이썬 가상환경 설정하는 두 가지 방법: .venv, poetry
.venv
# venv -> Virtual ENVironment
# .venv 는 관례입니다 실제로 사용시에는 .venv가 아니라 다른 이름을 사용해도 괜찮습니다.
python -m venv .venv # python의 venv라는 모델을 사용해서 .venv라는 이름의 가상환경 폴더를 생성
# .venv/bin/activate 을 기준으로 쉘(터미널)을 실행합니다.
source .venv/bin/activate
# 패키지 설치
pip install django djangorestframework djangorestframework-simplejwt
#장고 프로젝트 생성(config)
django-admin startproject config .
# 장고 앱 생성
python manage.py startapp (해당 앱)
pip install pymysql
pip install flask
pip install faker
# 데이터베이스 변경사항 반영
python manage.py makemigrations # 변경사항 기록
python manage.py migrate # 데이터베이스에 반영
# 관리자(admin) 계정 생성
python manage.py createsuperuser
# Django 서버 실행
python manage.py runserver
poetry
# poetry 초기화
poetry init
# Poetry 가상환경 활성화
poetry shell
# 패키지 설치
pip install django djangorestframework djangorestframework-simplejwt
#장고 프로젝트 생성(config)
django-admin startproject config .
# 장고 앱 생성
python manage.py startapp (해당 앱)
python manage.py makemigrations # 변경사항을 기록
python manage.py migrate # 데이터베이스에 반영
# 관리자(admin) 계정 생성
python manage.py createsuperuser
# Django 서버 실행
python manage.py runserver
필수
# 개발 도구(코드 포맷터, 임포트 정렬, 정적 타입 검사 도구)를 개발 의존성으로 추가
poetry add -D black isort mypy django-stubs
# 전체 코드를 Black으로 포맷팅, isort로 임포트 정렬, mypy로 정적 타입 검사를 수행
black .
isort .
mypy .
black
- Black 소개 & 설치
- black 은 code formatter 다.
- 실전에서는 하나의 프로젝트를 수십 명이서 개발한다. 이때 개발자들끼리 일관된 코드 스타일을 유지하도록 도와주는 친구가 바로 코드 포매터이다. 내가 작성한 코드를 black 코드 스타일에 맞게 자동 수정해 준다.
isort
- isort 소개 & 설치
- isort는 import 순서를 정렬시켜준다.
- https://pycqa.github.io/isort/
isort
Home Read Latest Documentation - Browse GitHub Code Repository isort your imports, so you don't have to. isort is a Python utility / library to sort imports alphabetically, and automatically separated into sections and by type. It provides a command line u
pycqa.github.io
Mypy 설정 변경
- Mypy 소개
- 공식 홈페이지는 조금 딱딱한 느낌이라 짧은 영상을 가져왔다. 이 영상이 간단하고 재밌게 설명해주는 것 같다.
- https://www.youtube.com/watch?v=GClpahJS6Rw
[tool.black]
line-length = 120
[tool.isort]
profile = "black"
[tool.mypy]
plugins = ["mypy_django_plugin.main"]
python_version = "3.13"
strict = true
[[tool.mypy.overrides]]
module = "*.migrations.*"
ignore_errors = true
[[tool.mypy.overrides]]
module = "manage"
ignore_errors = true
[tool.django-stubs]
django_settings_module = "oz_django.settings"
# 깃허브 액션 스크립트 .github/workflows/ci.yml
name: Django CI
on:
push:
jobs:
ci:
runs-on: ubuntu-22.04
env:
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: root
DB_PASSWORD: 1234
DB_DATABASE: oz_django
steps:
- name: Check out the codes
uses: actions/checkout@v2
- name: Setup python environment
id: setup-python
uses: actions/setup-python@v2
with:
python-version: '3.13'
- name: Set timezone to KST
run: |
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# Start Mysql
# https://ovirium.com/blog/how-to-make-mysql-work-in-your-github-actions/
- name: Start Mysql
run: |
sudo systemctl start mysql
mysql -e "use mysql; FLUSH PRIVILEGES; ALTER USER '${{ env.DB_USER }}'@'localhost' IDENTIFIED BY '${{ env.DB_PASSWORD }}';" -uroot -proot
mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }}
- name: Install Poetry
run: |
curl -sSL curl -sSL https://install.python-poetry.org | python3 -
echo "${HOME}/.local/bin" >> $GITHUB_PATH
- name: Install dependencies
run: |
poetry install --no-root
- name: Run black
run: |
poetry run black . --check
- name: Run isort
run: |
poetry run isort . --check --diff
- name: Run Mypy
run: |
poetry run mypy .
- name: Test python project
run: |
poetry run python manage.py test