4-1. 어플리케이션 분석 & 설계
장고(Django) 프레임워크
이번 장에서는 어플리케이션을 개발하기 전에 어떤 웹 사이트를 만들지(분석), 어떻게 만들지에 대해서(설계), 사용자의 요구되는 사항을 정리하고, 제공해야 하는 기능을 도출하고, 화면에 어떤 내용을 표시 할지 및 데이터베이스를 어떻게 정의할지에 대해서 살펴보겠습니다.
4-1-1 설문조사 사이트
이번 장에서는 첫 번째 장고 어플리케이션을 작성하도록 하겠습니다.
간단한 설문조사(Polls) 어플리케이션을 만드는 과정을 따라하면서, 장고 어플리케이션에 구조 대해서 이해할 수 있습니다.
어떤 서비스를 만든다는 것은 전체의 구성을 알고 그에 맞처 다양한 기능을 만들어 가는 과정입니다. 실제 개발을 하기에 앞서 전체 기능등을 살펴보겠습니다.
설문조사 어플리케이션은 두 개의 파트로 구성되어 있습니다.
사람들이 설문 내용을 보고 직접 투표할 수 있는 개방된 사용자 웹 화면 그림4-1-1 설문조사 사용자 화면 예시
관리자가 설문을 추가, 변경, 삭제할 수 있는 관리용 웹 화면 그림4-1-1 설문조사 관리자 화면 예시
4-1-2 설문조사 분석
사용자 화면과 관리자 화면으로 구분된다.
- 사용자 화면
- 전체 설문리스트를 화면에 보여준다.
- 설문리스트에서 한개의 항목을 클릭하면 설문에 해당하는 질문을 보여준다.
- 질문에서 한개를 선택하고, 투표 버튼을 클릭한다.
- 해당 설문에 대한 투표 결과를 보여준다.
- 관리자 화면
- 설문항목에 대해서 추가, 변경, 삭제 할 수 있는 화면을 제공해야 한다.
4-1-3 설문조사 설계
4-1-3-1 사용자 화면 설계
투표목록: 관리자 페이지에서 만든 투표 목록이 나타납니다. 각 투표는 투표 제목이 출력되고 해당 제목을 클릭하면 투표 화면으로 이동 합니다.
그림4-1-3 투표목록
투표화면: 투표 화면에는 투표 제목과 투표 항목 목록이 나타납니다. 라디오(Radio) 버튼과 함께 표시해두고 선택할 수 있도록 만들었습니다. 한 항목을 선택하고 Vote 버튼을 클릭하면 투표 결과 화면으로 이동합니다.
그림4-1-3 투표선택 화면
투표화면: 투표 화면에는 투표 제목과 투표 항목 목록이 나타납니다. 라디오(Radio) 버튼과 함께 표시해두고 선택할 수 있도록 만들었습니다. 한 항목을 선택하고 Vote 버튼을 클릭하면 투표 결과 화면으로 이동합니다.
그림4-1-3 투표결과 화면
4-1-3-2 관리자 화면 설계
투표목록: 관리자 페이지에서 만든 투표 목록이 나타납니다. 각 투표는 투표 제목이 출력되고 해당 제목을 클릭하면 투표 화면으로 이동 합니다. 그림4-1-3 관리자 투표목록
4-1-3-3 데이터베이스 설계
앞의 분석 & 설계 단계에서 정의한 기능에 대해서 데이터베이스를 설계하는 단계입니다. 설문조사에 필요한 테이블은 2개로 구성되어 있으며 아래와 같습니다.
테이블 목록
테이블 상세
테이블명: 설문조사 리스트
Name | 영문명 | 타입 | 클래스변수 | 장고의 필드 클래스 |
---|---|---|---|---|
순번 | Id | integer | (id) | (장고에서 자동생성) |
설문제목 | question_text | varchar(200) | question_text | models.CharField(max_length=200) |
생성일자 | pub_date | datetime | pub_date | models.DateTimeField('date published') |
SQL 테이블 생성 스크립니다.
CREATE TABLE "polls_question" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"question_text" varchar(200) NOT NULL,
"pub_date" datetime NOT NULL
);
- 테이블명: 설문조사 선택항목
Name | 영문명 | 타입 | 클래스변수 | 장고의 필드 클래스 |
---|---|---|---|---|
순번 | Id | integer | (id) | (장고에서 자동생성) |
선택항목 | choice_text | varchar(200) | choice_text | models.CharField(max_length=200) |
건수 | votes | integer | votes | models.Integer(default=0) |
설문조사순번 | question_id | integer | question | models.ForeingKey(Question) |
SQL 테이블 생성 스크립니다.
CREATE TABLE "polls_choice" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"choice_text" varchar(200) NOT NULL,
"votes" integer NOT NULL, "question_id" bigint NOT NULL REFERENCES
"polls_question" ("id") DEFERRABLE INITIALLY DEFERRED
);
CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id");