프로젝트를 만들기 앞서서
이번 2번째 튜토리얼에서는 꽤나 생략되는 부분이 있을 수 있다.
따라서
MVT 패턴에 대한 것과
공식 도큐먼트 튜토리얼 쪽을 먼저 이해한 다음
이 포스팅을 보는 것이 좀 더
직감을 얻어가는데 수월할 것이라 생각된다.
개발 환경 포스팅:
MVC 패턴과 MVT 패턴에 대한 포스팅:
공식 도큐먼트 튜토리얼 포스팅:
또한 여기서 작성한 코드들은 아래 링크에서 확인해볼 수 있다.
프로젝트 생성 하기
그럼 이제 프로젝트를 생성하기 위해
먼저 터미널을 열어 가상 환경으로 들어가자.
개발 환경에 대해서는
공식 도큐먼트의 포스팅과 동일하기에
위의 개발 환경 포스팅을 참고 하기 바란다.
그런 다음 새로운 프로젝트를 생성하고
생성한 디렉토리로 진입한다.
| django-admin startproject locallibrary cd locallibrary | cs |
그런 다음 Atom을 실행해 프로젝트를 불러오자.
불러오기에 성공했다면,
방금 생성했던 locallibrary라는
프로젝트가 추가된 것을 확인할 수 있다.
catalog application(App) 만들기
그렇다면 이 프로젝트 내부에 앱을 하나 만들자.
| python3 manage.py startapp catalog | cs |
성공적으로 앱을 만들었다면
Atom에 자동적으로 갱신될 것이다.
위의 사진과 같이 catalog라는 디렉토리가
생성된 것을 확인 할 수 있다.
catalog Applictaion 등록 하기
단순히 앱을 만들기만 했다면
아무런 의미가 없다.
왜냐하면
서버를 구동한다고 한다하더라도
접속은 불가능하기 때문이다.
따라서 프로젝트를 생성한 다음
자동으로 생성되는
디폴트 디렉토리(locallibrary)에 연결해주어야 한다.
| 'catalog.apps.CatalogConfig', | cs |
이 코드를 입력함으로 써
이제 catalog 앱과 연동될 수 있는데
정확히는
catalog 디렉토리의 apps.py안의
CatalogConfig라는 클래스와 연동된다.
데이터베이스 설정하기
다음은 데이터베이스 설정이다.
이전 공식 도큐먼트 튜토리얼과 마찬가지로
SQLite를 사용할 것이기 때문에 추가적인 코드는 없다.
프로젝트 그 외 설정
settings.py 파일 안에는
DB설정 외에도 많은 설정이 있다.
일단 가장 중요한 TIME_ZONE 변수이다.
이 TIME_ZONE의 지역에 따라서
시간 관련 메소드의 현재 시간이
결정되기 때문에 가장 중요하다.
나는 튜토리얼이기 때문에 따로 수정하지는 않겠다.
그 외에 알아둘 필요가 있는 변수라면
SECRET_KEY 변수와 DEBUG 변수다.
먼저 SECRET_KEY 변수는
Django의 보안 중 하나로 사용되는 비밀 키 이다.
유출되지 않도록 하는것이 좋으며,
개발 과정에서 잘 관리하지 않는다면
제품화 과정에서 다른 방법을 사용해야 할 것이다.
그 다음으로 DEBUG 변수다.
DEBUG 변수는 에러가 발생했을 때
HTTP 상태 코드 응답 대신
디버깅 로그가 표시되도록 한다.
지금은 디폴트 설정으로 True로 되어있지만,
디버깅 정보는 웹사이트를 해킹하려는
해커들에게 매우 유용한 정보가 될 수 있기 때문에
제품화 된 환경에서 개발하고 있다면
False로 설정해야 한다.
URL Mapper 연결 하기
하나의 프로젝트가 새로 생성되면
같은 이름의 디폴트 앱이 자동으로 생성되는데
그 때 URL mapper 파일인 urls.py가 같이 생성 된다.
URL Mapping은 path() 함수의
list 변수인 urlpatterns에 의해 관리된다.
각 path() 함수는 패턴이 일치 할 때 마다
지정된 View에 URL 패턴을 연결하거나,
다른 URL 패턴의 테스트 코드 목록에 연결 하는데
이 경우 패턴은 대상 모듈에서
정의된 패턴의 기본 URL이 된다.
그럼 이제 catalog 앱과 연동해보자.
| # Use include() to add paths from the catalog application from django.conf.urls import include from django.urls import path urlpatterns += [ path('catalog/', include('catalog.urls')), ] | cs |
다음으로 127.0.0.1:8000을
127.0.0.1:8000/catalog/로
리다이렉트 하도록 하기 위한 코드를 추가해보자.
| from django.views.generic import RedirectView urlpatterns += [ path('', RedirectView.as_view(url='/catalog/', permanent=True)), ] | cs |
Django는 기본적으로 CSS, JavaScript 그리고
이미지와 같은 정적 파일을 제공하지 않지만,
웹 개발에 있어서 빠질수 없는 요소이기 때문에
정적 파일들을 제공할 수 있도록 코드를 추가해 보자.
| # Use static() to add url mapping to serve static files during development (only) from django.conf import settings from django.conf.urls.static import static urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) | cs |
위에서 urlpatterns 변수를
계속해서 +=연산으로 추가해줬지만
리스트 안에 넣는 방법도 있다.
사실 대개 리스트 안에 넣지만,
좀 더 명백히 구분하기 위해 +=연산을 사용했다.
따로 따로 분류해놨던 것을
리스트안에 넣는 다면 최종적으로 아래와 같이
될 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from django.contrib import admin from django.urls import path from django.conf.urls import include from django.views.generic import RedirectView from django.conf import settings from django.conf.urls.static import static urlpatterns = [ path('admin/', admin.site.urls), path('catalog/', include('catalog.urls')), path('', RedirectView.as_view(url='/catalog/', permanent=True)), ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) # urlpatterns += [ # path('catalog/', include('catalog.urls')), # ] # # urlpatterns += [ # path('', RedirectView.as_view(url='/catalog/', permanent=True)), # ] # # urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) # | cs |
마지막으로
catalog 디렉토리 안에 urls.py라는 파일을 만들고
아래와 같은 코드를 작성하자.
| from django.urls import path from catalog import views urlpatterns = [ ] | cs |
웹 사이트 뼈대 테스트 하기
여기까지 해서
Django의 기본적인 틀을 잡았다고 할 수 있다.
물론 실질적으로 아무것도
만든 것이 없다고 해도 말이다.
바로 또 다른 앱을 작성하는 것도 좋지만
그전에 서버가 제대로 돌아가야 하는지 확인 해봐야 한다.
처음부터 확인하지 않아
나중에 큰 에러를 야기할지는 아무도 모르기 때문에
가급적 리스크는 줄여주는것이 좋다.
①데이터베이스 마이그레이션(migration) 실행하기
공식 도큐먼트 튜토리얼에서도
언급했던 걸로 기억한다.
Django는 ORM
(Object - Relational - Mapper : 객체 - 관계 - 매퍼)를 사용하여
Django 프로젝트 코드 안에 있는 모델 정의를
데이터베이스에서의 데이터 구조에 매핑한다.
모델의 정의를 바꿀 때 마다,
장고는 변화를 추적해서
데이터베이스 안의 기본 데이터 구조가
모델과 일치하도록
자동적으로 마이그레이트(migrate)하는
스크립트를 생성할 수 있다.
아직 아무런 모델을 만들지는 않았지만
프로젝트를 생성할 때 애플리케이션 관리 앱이
자동적으로 추가되기 때문에
애플리케이션 관리앱 관련 모델들을 정의하기 위해
cmd에 아래와 같이 명령어를 실행해보자.
| python manage.py makemigrations python manage.py migrate | cs |
makemigrations 명령어는
프로젝트에 있는 모든 앱에 대한
migration들을 생성하지만, 적용은 하지 않는다.
migrate 명령어는 migration들을 데이터베이스에 적용한다.
②웹 사이트 실행하기
마이그레이션 명령어를 실행했다면
이제 웹 서버를 실행해보자.
| python manage.py runserver | cs |
웹 서버 가동 후
웹 브라우저에 127.0.0.1:8000의 주소로
접속해보자.
이런 에러가 난다면 지극히 정상이다.
왜냐하면 우리는 아직
Model, View, Template을 작성한 적이 없기 때문이다.
다만 빨간색 박스와 같이
127.0.0.1:8000으로 접속했는데,
127.0.0.1:8000/catalog/로 접속된 이유는
이전에 127.0.0.1:8000으로 접속시
127.0.0.1:8000/catalog/로 리다이렉트 되도록
아래와 같이 urls.py 파일을 코딩을 했기 때문이다.