ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Django - 02 애플리케이션 설계 / 프로젝트 뼈대 만들기
    Django 2021. 3. 29. 23:01

    애플리케이션 설계하기

    프로젝트란 전체 프로그램을 의미하며, 프로젝트를 몇 개의 기능 그룹(프로그램)으로 나누었을 때, 하위 프로그램을 애플리케이션이라고 한다. 이런 개념으로 프로젝트 디렉터리와 애플리케이션 디렉터리를 구분하고, 코딩하는 파일도 프로젝트 파일인지 애플리케이션 파일인지 구분해서 저장해야 한다.

     

    이런 개념에서 중요한 점은 하나의 애플리케이션이 여러 프로젝트에 포함될 수 있기 때문에, 애플리케이션을 한 번만 개발하고, 이를 다른 프로젝트에 재사용해서 개발의 생산성을 높일 수 있다. 또한 애플리케이션 단위로 모아서 프로젝트를 만들고, 프로젝트를 모아서 더 큰 프로젝트를 만드는 방식으로, 계층적인 개발이 가능하다는 장점이 있다.

     

    다음 그림은 설문에 해당하는 질문을 보여준 후 질문에 포함되어 있는 답변 항목에 투표하면 그 결과를 알려주는 로직 예제다. 

    다음은 요구사항에 따라 필요한 테이블을 추출하여 설계한 예시이다.

     

    - Question 테이블 설계

    컬럼명 타입 제약 조건 설명
    id integer NotNull, PK, Autolncrement Primary Key
    question_text varchar(200) NotNull 질문 문장
    pub_date datetime NotNull 질문 생성 시각

    - Choice 테이블 설계

    컬럼명 타입 제약 조건 설명
    id integer NotNull, PK, Autolncrement Primary Key
    choice_text varchar(200) NotNull 답변 항목 문구
    votes integer NotNull 투표 카운트
    question interger NotNull, FK (Question.id), Index Foreign Key
    • Question 테이블 : 질문을 저장하는 테이블이다.
    • Choice 테이블 : 질문별로 선택용 답변 항목을 저장하는 테이블이다.
    • 모든 컬럼은 NotNull로 정의해서, 반드시 컬럼에 값이 있어야 한다.
    • Primary Key는 자동 증가 속성으로 지정한다.
    • Choice 테이블의 question 컬럼은 Question 테이블과 Foreign Key 관계로 연결되도록 했고, 또한 Index를 생성하도록 한다.

    프로젝트 뼈대 만들기

    코딩은 프로젝트 뼈대를 만드는 것에서부터 시작한다. 프로젝트에 필요한 디렉터리 및 파일을 구성하고, 설정 파일을 세팅한다. 그 외에도 기본 테이블을 생성하고, 슈퍼유저를 생성하는 것이 필요하다. 프로젝트가 만들어지면 하위에 애플리케이션 디렉터리 및 파일을 구성한다. 장고는 이런 작업을 위한 장고 쉘 커맨드를 제공한다.

    이 외에도 프로젝트가 완성된 후에는 templates, static, logs 등의 디렉터리가 더 필요하다. 각 디렉터리 및 파일의 용도는 다음과 같다.

    위와 같은 프로젝트 뼈대를 만들기 위해서 다음과 같은 순서로 명령을 실행한다.

    >python-admin startproject mysite      // mysite라는 프로젝트를 생성함 
    >python manage.py startapp polls       // polls라는 애플리케이션을 생성함
    >notepad settings.py                   // 설정 파일을 확인 및 수정함
    >python manage.py migrate              // 데이터베이스에 기본 테이블을 생성함
    >python manage.py runserver            // 현재까지 작업을 개발용 웹 서버로 확인함

    프로젝트 생성

    admin명령어로 mysite라는 프로젝트를 만든다. mysite는 원하는 프로젝트 명칭을 입력하면 된다.

    폴더를 보면 명령 실행시 입력한 mysite라는 디렉토리가 최상위와 그 하위, 두 군데에 생긴 것을 알 수 있다.

    하위 mysite 디렉터리는 프로젝트 디렉터리이고, 상위 mysite는 프로젝트 관련 디렉터리/파일을 모으는 역할을 하는 디렉터리다. 상위 mysite는 특별한 의미를 갖고 있지 않기 때문에 이름을 변경해도 무방하다. (하위 디렉터리와 혼동할 수 있으니 ch라고 변경하겠다.)

     

    애플리케이션 생성

    프로젝트 루트 디렉터리 ch로 이동해서 polls라는 애플리케이션을 만드는 명령을 실행한다.

    (polls 폴더의 파일 이름은 장고에서 지어준 것인데, 모든 애플리케이션 개발에 반드시 필요한 파일은 장고가 알아서 생성해주고, 개발자들은 그 내용을 채워 넣기만 하면 된다. 즉, 개발자들이 어떤 파일을 만들어야 할지 고민할 필요가 없다.

     

    프로젝트 설정 파일 변경

    프로젝트에 필요한 설정값(프로젝트의 전반적인 사항들)은 settings.py 파일에 지정한다. 루트 디렉터리를 포함한 각종 디렉터리 위치, 로그의 형식, 프로젝트에 포함된 애플리케이션 이름 등이 지정되어 있다.

     

    예제 프로젝트를 진행하는 데 필요한 사항, 네 가지만 확인해보자. 프로젝트 설정 파일인 settings.py 파일을 연다.

    첫 번째로 ALLOWED_HOSTS 항목을 적절하게 지정해야 한다. 장고는 DEBUG=True이면 개발 모드로, False면 운영 모드로 인식한다. 운영 모드인 경우 ALLOWD_HOSTS에 서버의 ip나 도메인을 지정해야 하고, 개발 모드인 경우에는 값을 지정하지 않아도 ['localhost', '127.0.0.1']로 간주한다.

    지금은 개발 모드이고 장고의 runserver를 기동할 서버의 ip가 127.0.0.1뿐만 아니라 192.168.56.101일 수도 있다면 다음과 같이 설정한다.

    두 번째로 프로젝트에 포함되는 애플리케이션들은 모두 설정 파일에 등록되어야 한다. 따라서 polls 애플리케이션도 등록해야 한다. 애플리케이션의 모듈 명인 polls만 등록해도 되지만, 애플리케이션의 설정 클래스로 등록하는 것이 더 정확하다.

     

    polls 앱의 설정 클래스는 startapp polls 명령 시에 자동 생성된 app.py 파일에 PollsConfig라고 정의되어 있다. 그래서 장고가 설정 클래스를 찾을 수 있도록 모듈 경로까지 포함하여 'polls.app.PollsConfig'라고 등록한다.

    세 번째로 프로젝트에 사용할 데이터베이스 엔진이다. 장고는 디폴트로 SQLite3 엔진을 사용하도록 설정되어 있다. MySQL이나 Oracle 등 다른 데이터베이스로 변경하고 싶다면 settings.py파일에서 수정하면 된다. (예제에서는 SQLite3 데이터베이스를 사용할 것이므로, 설정을 바꾸지 않는다.)

    네 번째는 타임존 지정이다. 최초에는 세계표준시(UTC)로 되어 있는데. 한국 시간으로 변경한다.

    기본 테이블 생성

    기본 테이블 생성을 위하여 아래 명령을 실행한다. migrate 명령은 데이터베이스에 변경사항이 있을 때 이를 반영해주는 명령이다.

    장고는 모든 웹 프로젝트 개발 시 사용자와 그룹 테이블 등이 필요하다는 가정 하에 설계된다. 그래서 테이블을 만들지 않았더라도, 사용자 및 그룹 테이블 등을 만들어주기 위해서 프로젝트 개발 시작 시점에 이 명령을 실행한다. 명령을 실행하면 migrate 명령에 대한 로그가 보이고, 실행 결과로 SQLite3 데이터베이스 파일인 db.sqlite3 파일이 생성된 것을 확인할 수 있다.

    지금까지 작업 확인하기

    지금까지 프로젝트의 뼈대에 해당하는 프로젝트 디렉터리, 애플리케이션 디렉터리를 비롯해 관련 파일들 그리고 사용자 및 그룹 테이블을 만들었다. 이러한 작업만으로도 장고가 제공해주는 웹 페이지와 테이블을 확인할 수 있다.

     

    확인을 위해 웹 서버를 실행하고, runserver 명령어를 사용해 서버에 접속해보자. (하나의 창에서 작업해도 되지만 runserver용으로 별도의 cmd 창을 열어 사용하는 것이 편리하다.)

    명령 입력 시 자신의 서버에 맞는 IP 주소와 포트번호를 입력하면 된다. 0.0.0.0 IP주소의 의미는 명령을 실행 중인 서버의 IP 주소가 무엇으로 설정되어 있든 무관하게 웹 접속 요청을 받겠다는 의미다. 즉, 웹 브라우저의 주소창에 runserver를 실행 중인 서버의 실제 IP주소를 입력하면 된다.

    NOTE runserver 실행 방법

    > python manage.py runserver
    ip주소와 포트번호를 지정하지 않으면, 디폴트로 127.0.0.1 주소 및 8000번 포트를 사용한다.

    > python manage.py runserver 0.0.0.0:8000 &
    &를 명령 끝에 추가하면, 웹 서버 프로그램이 백그라운드에서 실행된다. 단 유닉스 계열에서만 사용 가능하다.

     

    runserver가 정상적으로 실행된다면, 웹 브라우저를 열고 주소창에 다음과 같이 입력한다.

    http://127.0.0.1:8000

     

    이제 장고에서 기본적으로 제공하는 Admin 사이트에 접속해서 테이블이 생성된 것을 확인해보자. URL 경로만 admin으로 변경하면 된다.

    http://127.0.0.1:8000/admin

     

    로그인하려면 Username, Password를 넣어야 하는데 아직 생성하지 않았다. 그러므로 Admin 사이트에 로그인하기 위한 관리자(슈퍼유저)를 만들어보자.

    생성한 아이디로 로그인하면 다음과 같은 창이 나온다.

    장고에서 만들어준 Users와 Groups 테이블이 생성된 것을 확인할 수 있다. 

     

    이 Admin 사이트에서 앞으로 만들 테이블에 대한 데이터의 입력, 변경, 삭제 등의 작업을 할 수 있다. (Admin 화면에서 기본적으로 Users와 Groups 테이블이 보이는 것은 이미 settings.py 파일에 django.contrib.auth 애플리케이션이 등록되어 있기 때문이다.)

     

    프로젝트 뼈대를 만든 후 디렉터리 모습

    'Django' 카테고리의 다른 글

    Django - 03 Model 코딩  (0) 2021.03.31
    Django - 01 애플리케이션 개발 방식  (0) 2021.03.29
    Django - 장고의 특징  (0) 2021.03.29
    Django - 웹 서버  (0) 2021.03.29
Designed by Tistory.