본문 바로가기

프로그래밍/Django

장고 강좌 :: 04. 게시판 앱 생성하고 서비스하기

프로젝트는 하나의 웹사이트를 의미한다면 앱은 웹사이트에서 제공하는 기능들의 단위라고 생각하시면 편해요.


웹사이트에는 다양한 기능이 제공되곤 하죠? 게시판 기능부터 검색 기능, 방명록 기능까지 말이에요. 이처럼 다양한 기능들을 앱이라는 단위로 쪼갠 후에 프로젝트에 붙여나간다면 개발하기가 더 쉬워지겠죠?




목차

  • 앱 생성하기
  • 뷰 생성하기
  • 앱 서비스하기
  • 확인하기




앱 생성하기


앱을 생성하려면 프로젝트를 생성했을 때와 마찬가지로 manage.py 파일과 상호작용을 해야해요. manage.py 파일이 존재하는 디렉토리로 이동한 후, 'python manage.py startapp bulletin' 명령어를 입력해주세요.


C:\Users\Gamma\mysite> python manage.py startapp bulletin


여러분은 지금 bulletin라는 이름의 앱을 하나 생성했어요. 프로젝트 디렉토리를 살펴보면 bulletin라는 이름의 디렉토리 하나가 생성된 것을 확인할 수 있답니다.


mysite/

manage.py

mysite/

bulletin/


여러분이 생성한 bulletin앱은 여러분의 사이트에 게시판 기능을 담당하게 될거에요. 게시판의 글을 읽고 쓰고 저장하는 것까지 말이죠.




뷰 생성하기


뷰(View)는 블로그의 페이지에 해당해요. 게시판에는 인덱스 페이지, 게시글 리스트 페이지 등등 다양한 페이지가 있겠죠? 장고에서는 그 페이지의 서비스를 담당하는 것이 뷰에요.


bulletin디렉토리에 있는 views.py 파일을 에디터로 열어서 내용을 전부 지운 후, 다음과 같이 작성한 후 저장해주세요.


# mysite\bulletin\views.py


from django.http import HttpResponse


def index(request):

    return HttpResponse("Here is bulletin app's Index page.");


사실 장고에서 뷰는 하나의 함수에 불과해요. 우리는 지금 인덱스 페이지를 서비스하기 위해 index라는 이름의 함수(뷰)를 만들어주었고 이 서비스를 이용하고 싶다는 요청이 들어오면 HttpResponse라는 함수를 통해 http응답을 하고 있는 것이에요.




앱 서비스하기


게시판에 인덱스 페이지를 하나 생성하였으니 이제 인덱스 페이지를 서비스할 수 있도록 url을 설정해볼거에요. 우리의 목표는 브라우저에 'http://도메인주소/bulletin' 주소를 입력했을 때, 블로그의 인덱스 페이지가 뜨는 것입니다. 로컬에서 테스트한다면 'http://127.0.0.1:8000/post' 주소를 입력했을 때가 되겠죠?



첫번째로 프로젝트 디렉토리의 urls.py를 아래와 같이 수정해주어야 해요. 파란 글자가 수정된 부분이에요.


# mysite\mysite\urls.py


from django.contrib import admin

from django.urls import include, path


urlpatterns = [

    path('admin/', admin.site.urls),

    path('post/', include('bulletin.urls')),

]


지금 우리가 추가한 코드는 "'http://도메인주소/post/...' 형태의 url은 bulletin이라는 앱의 urls.py로 보내서 처리해라" 라는 의미를 갖고 있어요.


두번째로 bulletin앱의 디렉토리에 urls.py라는 파이썬 파일 하나를 만들고 아래와 같이 작성해주세요. 앱을 생성하면 기본적으로 urls.py 파일이 존재하지 않기 때문에 새로 만들어주어야 해요.


# mysite\bulletin\urls.py


from django.conf.urls import url

from . import views


urlpatterns = [

    url(r'^$', views.index, name='index'),

]


자 이제 url 설정이 끝났어요. 여기서 잠깐 우리가 작성한 코드에 대해서 설명을 하도록 할게요.



어떤 클라이언트가 웹서버에게 http 요청을 보낼 때, url이라는 것을 같이 보내요. 이 url은 웹서버에게 추가적인 정보를 제공하는 방법 중 하나랍니다. 웹서버는 이 url 정보를 분석해서 클라이언트가 원하는 파일을 제공해야 해요.


path('post/', include('post.urls'))


프로젝트 디렉토리에 있는 urls.py의 path()는 url 정보를 분석하는 역할을 해요. url에 특정한 단어나 형태가 있을 경우 그 http요청을 적절한 앱에 전달해주는 중재자 역할을 하는 것입니다.

 우리가 작성한 path('post/', include('bulletin.urls')) 코드는 url의 도메인 주소 뒤에 bulletin/라는 단어가 있는지 확인하고 만약 있을 경우 그 요청을 bulletin 앱의 urls.py에 연결시켜준답니다.


    url(r'^$', views.index, name='index')


bulletin앱에 전달된 url은 다시한번 bulletin앱의 urls.py에서 분석되요. 이 때 사용하는 것이 url()입니다. 전달된 url을 분석하고, 적절한 view에 요청을 전달해주는 역할을 해요. 여기선 views.index함수에 http 요청을 전달하고 있네요.


결론적으로 과정을 그림으로 표현하면 이렇게 되요.


<그림>


어떤 식으로 http 요청이 특정 view까지 전해지는 지 감이 오시나요? 장고를 다루는 핵심은 url이라는 점 꼭 기억해두세요 !




확인하기


여기까지 잘 따라왔다면 여러분들은 게시판 앱의 인덱스 페이지를 열 수 있어요. manage.py 파일이 있는 디렉토리로 가서 'python manage.py runserver' 명령어를 입력하여 개발자 웹서버를 실행한 후, 브라우저에서 'http://127.0.0.1:8000/post' 주소를 입력해보세요.



정말 인덱스 페이지가 열리는 것을 확인할 수 있어요!