TAB 2021 겨울방학 학회활동 [슬기로운 코딩생활]
1주차 TIL입니다.
작성자 : 38기_서다원
ref : [파이썬 웹프로그래밍 실전편(저자:김석훈)]
장고 개발의 기본사항
* MVT 개발 방식
웹 프로그래밍 영역을 3가지 개념으로 나눠서 개발하는 방식
- 테이블을 정의하는 모델 : models.py 파일
- 애플리케이션의 제어 흐름 및 처리 로직을 정의하는 뷰 : views.py 파일
- 사용자가 보게 될 화면의 모습을 정의하는 템플릿 : *.html 파일
* MVT 코딩 순서
정해진 순서는 없지만 일반적인건
모델 코딩 -> 뷰와 템플릿 코딩
UI 화면 생각하면서 로직 풀어나가고 싶으면 템플릿 먼저 코딩하고
클래스형 뷰처럼 뷰 코딩이 엄청 간단하면 뷰 먼저 코딩
* settings.py 주요 사항
프로젝트 개발할 때 필수적인 사항만 적어보았다
- 데이터베이스 설정 : 디폴트는 SQLites3
- 애플리케이션 등록
- 템플릿 항목 설정 : TEMPLATES 항목으로 지정한다
- 정적 파일 항목 설정 : STATIC_URL 등 관련 항목 지정
- 타임존 지정 : 디폴트는 세계표준시(UTC)로 설정되어 있어서 한국시간으로 변경해야함
* models.py 주요사항
데이터 베이스 처리는 ORM(Object Relational Mapping)기법을 사용.
테이블을 클래스로 매핑해서 클래스 객체에 대해서 CRUD 기능을 수행하면 장고가 내부적으로 SQL 처리를 하여 데이터베이스에 반영해주는 방식이다.
테이블 신규생성, 테이블 정의 변경 등 models.py에서의 수정사항이 생기면
데이터베이스에 실제로 반영해주어야함 -> 이게 마이그레이션의 개념
* URLconf 주요사항
URL과 뷰를 매핑해주는 urls.py 파일
프로젝트 전체 URL을 정의하는 프로젝트 URL이랑 앱마다 정의하는 앱 URL로 나눠서 코딩하면 좋음.
* views.py 주요사항
뷰 로직 코딩하는 파일
함수형 뷰가 될 수도 있고 클래스형 뷰가 될 수도 있음->클래스형 뷰가 재활용 및 확장성 측면에서는 유리할 듯하다
* templates 주요사항
웹 화면 페이지마다 필요한 템플릿 파일!
* Admin 사이트
테이블 내용 열람 및 수정 기능 제공
SQL 없이도 테이블 내용 확인가능하고
레코드 입력 및 수정도 할 수 있음
Admin 사이트에 테이블 등록하고 싶으면 admin.py 파일에 작업하면 됨.
* 개발용 웹 서버 - runserver
장고에서는 현재의 웹 프로그램 실행해볼 수 있도록 runserver라는 테스트용 웹 서버를 제공.
하지만 실제로 오픈하는 상용화를 고려한다면 Apache 또는 Nginx 등의 상용 웹 서버를 사용해야한다.
runserver는 개발용이라 처리 능력도 떨어지고 보안에도 취약하기 때문..
가상 환경 사용하기 - venv 모듈
독립된 가상환경 필요한 이유?
인터넷에서 다운로드한 파이썬 라이브러리들이 충돌 일으키는걸 방지하기 위함(충돌이 흔하다!)
* 가상환경 vDjBook 을 만들기
파이썬3 패키지에는 venv 모듈로 가상환경을 만들어보기.
cd /home/dwseo/VENV
python -m venv vDjBook
source /home/dwseo/VENV/vDjBook/Scripts/activate
vDjBook 이라는 가상환경을 만들어서 가상환경 안으로 진입하면 다음과 같이
(vDjBook) 이라고 뜨면서 가상환경 안으로 진입했다는 걸 알려준다.

deactivate
가상환경 빠져나올 때에는 위와같은 명령어를 사용.
만약에 다른 시스템이나 다른 디렉터리에 동일한 가상환경을 만들고 싶다면
(myvenv)$ pip3 freeze > pkg_list.txt
(othervenv)$ pip3 install -r pkg_list.txt
myvenv 가상환경에 설치된 패키지 목록을 구하고 othervenv에 설치하면 된다. pkg_list.txt 보단 requirements.txt 를 쓰는편.
* 가상환경에 장고 패키지 및 그 외 패키지, pytz 설치
똑같이 vDjBook 이라는 가상환경으로 진입해서 pip3 install Django 명령어를 통해 장고 최신 버전을 설치해줬다.
6장부터는 외부 라이브러리를 추가해서 사용해야해서 그것들도 미리 설치해뒀다.
패키지 설치 툴 버전이 맞아 에러가 발생할 수도 있어서 설치 툴들을 업그레이드 해주는 과정도 거쳤다.
-> ERROR: Could not install packages due to an OSError: [WinError 5] 액세스가 거부되었습니다
라는 에러가 뜨길래 관리자권한으로 cmd 열어서 해결
* 가상 환경에 설치된 패키지 확인
패키지 목록 파일은 VENV 폴더에 폴더를 따로 만들어서
pip3 freeze > requirements.txt
명령어로 패키지 목록 파일을 생성했다.

* 앱 만들기(Bookmark App)
북마크(즐겨찾기)앱을 만들어보려고 하는데
개발할 때 해야할 전체 과정을 간략하게 정리해보았다.
프로젝트랑 앱 생성해놓고 모델 만들고 url 만들어놓고 뷰랑 템플릿을 작성하면되겠다.
다음에 다른 앱 만들더라도 이와 비슷하게 하면 될 듯하다
| 뼈대만들기 | startproject settings.py migrate createsuperuser startapp settings.py |
mysite 프로젝트 생성 프로젝트 설정 항목 변경 user,group 테이블 만들기 슈퍼유저 만들기 앱 생성 앱 등록 |
| model 코딩 | models.py admin.py makemigrations migrate |
테이블 정의 admin사이트에 등록 모델 변경사항 추출하기 변경사항 데이터베이스에 반영하기 |
| URLconf 코딩 | urls.py | URL 정의하기 |
| view 코딩 | views.py | view 로직짜기 |
| template 코딩 | template directory | template 파일 작성하기 |
프로젝트 루트 디렉터리는ch99
프로젝트 디렉터리는 mysite라고 구분해서 이름을 정했다.
settings.py 의 ALLOWED_HOSTS 를 보자면 운영모드일때에는 여기에 서버의 IP나 도메인을 지정해야하고
개발모드일 때에는 값 지정하지 않아도 localhost나 127.0.0.1로 간주한다.
* 기본 테이블, 슈퍼유저 생성
처음에 기본 테이블 생성을 위해서는 migrate를 명령어를 맨 처음에 해줘야한다.
슈퍼유저까지 생성해줬다.
(vDjBook)$ python manage.py migrate
(vDjBook)$ python manage.py createsuperuser
* app 생성
python manage.py startapp bookmark
북마크 앱을 만들었다.(북마크 앱 디렉터리와 그 하위에 필요한 파일들을 장고가 알아서 생성해줌)
그냥 만들고 끝낼게 아니라 settings.py 에 등록도 해줘야함.
INSTALLED_APPS 부분에 그냥 bookmark 라고 app 모듈명만 써도되지만 app의 설정 클래스로 등록하는게 정확한 방법임.
bookmark 앱의 apps.py파일에 보면 설정 클래스가 BookmarkConfing 라고 되어있는걸 확인했다.
따라서 모듈 경로까지
* 모델 만들기
데이터베이스에 테이블을 생성

admin 사이트에 등록해주기 위해서 admin.py에 코드를 작성.
@admin.register() 데코레이터를 사용했는데 register()함수를 사용하는 방법도 있다(이건 참고)

-> 결론 : 테이블 새로 만들 때에는 mdoels.py랑 admin.py 파일 두 개 같이 수정해주기!
* 데이터베이스에 변경사항 반영하기
$ python manage.py makemigrations bookmark
$ python manage.py migrate
bookmark는 생략해도 된다. 이 명령어 치면 bookmark/migrations 디렉터리 아래에 마이그레이션 파일들이 생긴다.
하다가 bookmark.app을 찾지 못하는 오류가 생겼었는데 settings.py 에 앱 등록할 때 썼던 앱 이름을 그냥 bookmark로 수정해주었더니 해결되었다.
* admin 사이트에 들어가서 테이블 확인

슈퍼유저 생성할 때 계정 로그인하고 들어가면 이렇게 Bookmark 라는 테이블 만들어 놓은 것을 확인할 수 있다.

추가하기 눌렀을 때 내가 만들어 줬던 테이블의 컬럼명들이 보인다.
다음엔 이어서 bookmark 앱의 URLConf 를 코딩하는 것부터 할 예정이다.
양이나 난이도는 시작일 뿐이라 어려운건 아닌데 자꾸 오류를 맞닥뜨려서 좀 더 속도를 내서 해야할 것 같다😥
'21 - 2학기 > 슬기로운 코딩생활' 카테고리의 다른 글
| [TIL]2주차: bookmark앱 만들기_2, Blog 앱 (0) | 2022.01.12 |
|---|---|
| [TIL] 노마드코더 JS 5.0 ~ 6.2 (0) | 2022.01.11 |
| [TIL] 유니티2d로 게임 개발 1주차 (0) | 2022.01.05 |
| [TIL]1주차 모각코_바닐라 JS(1) (0) | 2022.01.05 |
| [TIL] 노마드코더 Javascript 4.0~4.7 (0) | 2022.01.05 |