경희대학교 안기옥 교수님의 모바일/웹서비스프로젝트 수업을 기반으로 정리한 글입니다.
Ch 1. Django란?
Django란 파이썬으로 만들어진 무료 오픈소스 web application framework로,
쉽고 빠르게 웹사이트를 개발할 수 있도록 돕는 구성요소이다.
웹 서버 요청 이후 장고의 역할
1. URL 확인
- 사용자가 웹 요청을 보냄
- e.g., 주소창에 example.com/profile 입력tr
- 요청 받은 주소(URL)를 확인
- urlresolver는 urls.py에 정의된 URL 패턴 목록을 가져와 들어온 URL과 하나씩 비교
2. view 함수로 전달
- URL 패턴과 일치하는 것이 있으면 해당 view 함수로 요청 전달
- view 함수: views.py 안에 개발자가 직접 작성한 함수
3. view 함수에서 처리
- 필요에 따라 데이터베이스 접근하여 요청 내용 처리
- 정보 꺼내기 (조회)
- 정보 수정/삭제 (변경 요청)
- response 생성하여 사용자의 웹 브라우저에 전송
- 결과: 사용자의 브라우저 화면에 결과가 표시됨
Ch 2. Django 설치
1. 장고를 실행 할 폴더에 "git bash" 창을 킴
2. Django 프로젝트를 위한 가상환경(Virtual environment) 생성
- 가상환경 생성 이유: Django에서 제공해주는 많은 패키지들을 다운받아야 하는데, 이때 각 프로젝트마다 고립된 개발환경을 설정해 주기 위해선 가상환경을 사용해야 하기 때문이다.
$ python -m venv myvenv # 가상환경 폴더 만들기
$ source myvenv/Scripts/activate # 가상환경 실행하기
(myvenv) ~$ deactivate # 가상환경 나가기
3. 장고 설치
(myvenv) ~$ python -m pip install --upgrade pip # -m: module / --upgrade: 최신 버전
(myvenv) ~$ pip install django
pip은 파이썬 패키지를 설치하고 관리하는 공식 도구이다.
Ch 3. Django 프로젝트
(myvenv) ~$ django-admin startproject mysite . # .은 현재 디렉토리에 프로젝트를 설치하라는 의미
django-admin.py 스크립트로 프로젝트에 필요한 디렉토리와 파일들을 생성한다.

데이터베이스 생성
(myvenv) ~$ python manage.py migrate
웹서버 시작
(myvenv) ~$ python manage.py runserver

※ 8000번 포트: 기본 포트
Ch 4. Django 모델
Django 모델
먼저, 객체란 속성과 행동의 모음으로, 속성은 객체 속성(properties), 행위는 메서드(methods)로 구현한다.
장고 안의 모델은 이러한 객체의 특별한 종류로, 모델을 저장하면 그 내용이 데이터베이스에 저장된다.
- sqlite: 장고의 기본 DB
블로그 글을 모델로 만들기
- 속성
- 제목, 내용, 작성자
- 작성일, 수정일, 게시 여부
- 메서드
- 게시하기
속성은 DB 테이블에 저장되고, 메서드는 테이블의 데이터를 읽거나 변경하는 역할을 한다.
APP 생성하기
: 어플리케이션의 기능의 단위
(myvenv) ~$ python manage.py startapp blog

앱을 만든 후, 프로젝트 폴더에 생성된 애플리케이션을 등록해야 한다.

Model 생성하기
: 모든 Model 객체는 blog/models.py 파일에 선언하여 모델 생성

DB에 Model을 위한 Table 생성하기
$ python manage.py makemigrations blog # DB에 새 모델 Post 추가
$ python manage.py migrate blog # 추가된 모델을 DB에 반영
Django 관리자


(myvenv) ~$ python manage.py createsuperuser

웹 서버의 슈퍼 사용자(superuser) 생성후,
브라우저의 장고 관리자 페이지에서 superuser로 로그인 한 후 대시보드를 확인하면 위와 같이 나온다.
Ch 5. Git을 이용한 배포
현재 사용하고 있는 "http://127.0.0.1/" 는내 PC의 localhost로, 다른 사람이 이용할 수 없다.
다른 사람도 내가 만든 서비스를 이요할 수 있게 하려면 웹 애플리케이션을 배포해 주어야한다.
- 배포: 웹 애플리케이션을 인터넷에 올려 다른 사람들도 사용 가능하게 하는 것을 말한다.
사용될 서비스
- PythonAnywhere: 방문자가 아주 많지 않은 소규모 애플리케이션을 위한 무료 서비스를 제공
- GitHub: 코드 호스팅 서비스
배포 시나리오
- 로컬 컴퓨터: 개발 및 테스트를 수행하는 곳
- GitHub: 개발이 완료된 프로그램 코드 저장
- PythonAnywhere: GitHub에서 코드를 가져와 실제로 앱을 돌려주는 서버
이때, mysite/settings.py 파일에서 "ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com']" 이렇게 수정하여 설정을 변경해야 pythonanywhere의 호스트 이름과 일치하여 해당 서버로 애플리케이션 배포가 가능하다.
※ 정적 웹사이트 (HTML, CSS, JS만 있는 사이트)는 깃허브만으로 배포가 가능하지만, 서버나 DB가 필요한 동적 웹 애플리케이션의 경우엔 깃허브는 코드 저장소 용도고, 실제 배포는 서버(e.g., PythonAnywhere, AWS)랑 연결을 통해 해주어야 한다.
1. Git 저장소 만들기
1. # Git 저장소 초기화 (처음 한 번만)
$ git init # 자동으로 master 브랜치가 생성되고, 그 브랜치에 체크아웃됨
2. # 사용자 정보 설정 (전역 1회만)
(master) $ git config --global user.name "arsenic"
(master) $ git config --global user.email "so040103@khu.ac.kr"
3. ".gitignore" 파일 만들기
(master) $ touch .gitignore
(master) $ vim .gitignore
*.pyc
*~
__pycache__
venv
db.sqlite3 # PythonAnywhere는 다른 데이터베이스를 사용, 때문에 db.sqlite3는 저장소에 추가될 필요 X
/static
.DS_Store
4. 상태 확인
(master) $ git status
5. 모든 파일 staging
(master) $git add --all .
6. 첫 커밋"
(master) $git commit -m "My Django Blog app, first commit"
※ vim 편집기 사용법: https://arsenic-dev.tistory.com/46
2. GitHub에 코드 배포하기
먼저, "new repository"로 저장소 생성 후, 저장소 복제 URL을 다음과 같은 과정으로 복사한다.

그후, 내 컴퓨터의 Git 저장소에서 "git bash"를 열어 GitHub에 있는 원격 저장소로 연결한다.
$ git remote add origin https://github.com/<your-github-username>/my-first-blog.git # 원격 저장소 이름을 origin으로 설정
$ git push -u origin master
※ -u: --set-upstream의 약자로, 로컬 브랜치가 기본적으로 연결될 원격 브랜치를 설정한다.
3. PythonAnywhere에서 배포 준비하기
- 1) PythonAnywhere에서 무료 계정인 "초보자(Beginner)"로 회원가입 -> 배포 주소 자동 생성
- PythonAnywhere에서 만든 웹앱의 배포 주소(URL): https://<username>.pythonanywhere.com
- 2) PythonAnywhere 사이트에서 로그인 -> Dashboard의 Consoles 페이지 클릭 -> Bash 옵션 선택
- 3) 콘솔을 통해 GitHub에서 코드 가져오기

이후, 이어서 pythonanywhere의 Bash console에 가상환경을 생성하여 세팅한다.
$ cd my-first-blog
(master)$ virtualenv --python=/usr/bin/python3.8 venv
(master)$ source venv/bin/activate
(venv) (master)$ pip install --upgrade django
(venv) (master)$ python manage.py migrate # 데이터베이스 생성
(venv) (master)$ python manage.py createsuperuser # 관리자 계정 생성
서버에서 앱을 처음 배포하면 로컬에서 했던 것처럼 데이터베이스와 관리자 계정을 생성해야 한다.
이렇게까지 완료하면, 웹앱으로 배포할 준비가 완료된 상태이다.
4. PythonAnywhere에서 배포하기
- 1) PythonAnywhere 사이트에서 로그인 -> Dashboard의 Web apps 페이지 클릭
- 2) Add a new web app -> manual configuration(수동설정)에서 python 3.8 선택
- 3) 가상환경 설정하기
- Virtualenv 섹션에서 "Enter the path to a virtualenv" 클릭
- "/home/soyeon/my-first-blog/venv/"로 이동 경로 지정

추가로, 장고는 파이썬을 이용한 웹사이트를 서비스하기 위한 표준인 WSGI protocol을 사용해 작동하기 때문에,
WSGI 파일을 설정해 블로그를 PythonAnywhere에서 인식하게 해야 한다.
- Code 섹션에서 "/var/www/<your-username>_pythonanywhere_com_wsgi.py" 클릭
- 모든 내용 삭제하고 아래 내용 기입 후 Save
activate_this = '/home/soyeon/my-first-blog/venv/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
import os
import sys
path = '/home/soyeon/my-first-blog'
if path not in sys.path:
sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
from django.core.wsgi import get_wsgi_application
from django.contrib.staticfiles.handlers import StaticFilesHandler
application = StaticFilesHandler(get_wsgi_application())

※ 디버깅 팁: 사이트에 접속했을 때 오류가 확인되면, Web 섹션의 log.files 중 error.log에서 디버깅 정보를 확인할 수 있다.
CH 6. URL -> view
1. blog/urls.py

현재는 장고가 찾고 사용하려는 뷰가 아직 없는 상태이다.
2. 뷰(biew) 만들기
- 애플리케이션의 "로직"을 넣는 곳
- 모델에서 필요한 정보를 받아와서 템플릿에 전달하는 역할


현재는 장고가 찾고 사용하려는 템플릿이 아직 없는 상태이다.
CH 7. HTML 시작하기
템플릿
- 서로 다른 정보를 일정한 형태로 표시하기 위해 재사용 가능한 파일
- 장고의 템플릿 양식: HTML
1. 첫 번째 템플릿

2. 맞춤형 템플릿

3. 배포
먼저, 로컬에서 수정한 코드를 Github에 반영(commit, push)한다.
$ git status # 마지막 배포 이후 수정된 파일을 확인
$ git add --all . # git에게 현재 폴더에 있는 모든 변경 내용을 포함
$ git commit -m "Changed the HTML for the site" # github 저장소에 변경 사항을 히스토리에 저장
$ git push # github으로 업로드
그후, PythonAnywhere에서 새 코드를 가져온다.
$ git pull # in my-first-blog
마지막으로, PythonAnywhere의 Web tab에서 웹 앱을 다시 불러오면(Reload) 새 코드가 반영된 모습을 확인할 수 있다.

'CS > 모바일웹서비스프로젝트' 카테고리의 다른 글
| 4. Django, 이미지 블로그와 REST API (0) | 2025.10.11 |
|---|---|
| 3. Debugging Django with VSCODE (0) | 2025.10.09 |
| 1. Git & GitHub (0) | 2025.10.03 |