본문 바로가기

21 - 2학기/슬기로운 코딩생활

[TIL]1주차:장고 개발의 기본사항, bookmark앱 만들기_1

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 라고 되어있는걸 확인했다.

따라서 모듈 경로까지

'bookmark.app.BookmarkConfig'
라고 쓰면 등록.
 

* 모델 만들기

데이터베이스에 테이블을 생성

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 를 코딩하는 것부터 할 예정이다.

양이나 난이도는 시작일 뿐이라 어려운건 아닌데 자꾸 오류를 맞닥뜨려서 좀 더 속도를 내서 해야할 것 같다😥