이번 시간에는 간단한 미니 프로젝트를 하나 진행해 볼까 합니다. 바로 게시판 서비스!! 간단하게 게시판 서비스를 구현하고, 이를 REST API와 연동하여 사용하는 방법을 살펴보고자 합니다.
게시판 서비스 구상하기
가장 먼저 저희가 할 일은, 어떤 게시판 서비스를 제공할 것인가? 에 대한 부분 입니다. 일종의 요구 사항을 분석하고, 이를 토대로 설계를 하는 과정이죠. 이번에 만들어볼 게시판은, 정말 일반적이고 흔한 한국형 게시판을 만들어 보려고 합니다. 게시물들을 조회할 수 있고 / 글쓰기를 통해 게시물을 생성할 수 있으며 / 수정…. 은 귀찮으니 일단 빼고 / 삭제도 가능하며 / 댓글…. 도 귀찮으니 나중에 만들어보고… 뭔가 많이 빠진 거 같지만, 기분 탓 입니다. 자, 그럼 간단하게 구상한 이 게시판을 토대로 데이터 모델링을 먼저 해볼까요?
게시판 모델링
일단, 간략하게 개념을 하나 잡아 보겠습니다. 화면을 중심으로 개념을 잡아 볼까요? 대충, 만들고자 하는 게시판을 이미지로 그려보면 이렇게 될 겁니다.
저런 모양이 될 겁니다. 일단, 사각형이 하나의 게시물 이라고 가정해 보자구요. 아, 제일 오른쪽 아래에 있는 건 ‘글쓰기’ 버튼 이네요. 자, 여기서 ‘기능’ 과 ‘데이터’ 를 분리해서 정리를 한번 해보면,
1. 데이터는 ‘게시물’ 하나 에 포함되는 내용으로, ‘순번’, ‘제목’, ‘내용’, ‘작성자’, ‘작성 시간’ 등의 게시물 하나와 연관된 데이터이다.
2. 이 게시판 에서 기능은 ‘게시물’ 하나를 제어하기 위한 내용으로, ‘게시물 작성’, ‘게시물 수정(이런 거 없슴다)‘, ‘게시물 검색(이런 거 도 없슴다)‘, ‘게시물에 댓글 달기(허 거참…)‘, ‘게시물 삭제’ 등을 가진다.
라고 정리해 볼 수 있겠습니다. 먼저, 게시판에 대한 데이터 모델링을 먼저 시작하고, 이를 토대로 기능들을 하나하나 구현해 갈 것 이므로…. 먼저 ‘데이터 모델링’ 을 시작해 보죠.
게시물 데이터 모델링
게시물에 대한 데이터 모델을 만들기 위해, 어떠한 데이터들이 게시물 데이터에 포함되어져야 하는지 다시 한번 정리해 봅시다.
1. 게시물의 고유한 인덱스
2. 게시물의 제목
3. 게시물의 내용
4. 게시물의 작성자
5. 게시물의 작성시간
6. 게시물의 고유 비밀번호
대략 6가지 정도가 필요할 거 같네요. 이 부분은 요구 사항과 필요한 기능에 따라 달라질 겁니다. 저희는 정말 간단한 게시판 서비스를 할 거니… 저 정도면 충분할 거 같네요. 이제 대략적인 데이터 모델링이 끝났으니, Django 프로젝트를 한번 시작해 봅시다.
프로젝트 시작
프로젝트 작성은 다른 포스팅을 참고하시고, ‘board’ 라는 프로젝트를 만들어서 진행해 보겠습니다.
프로젝트를 만들고, 바로 모델링을 시작해 보죠. 일단, 간략하게 다음 구성대로 진행해 보려고 합니다.
– 프로젝트 명 : board
– 앱 : post_service / 게시물 하나하나를 관리하고 다룰 앱.
그럼, 이러한 내용을 토대로 바로 앱을 하나 만들어 봐야겠네요?
자, 이렇게 기본적인 앱 하나를 실행 했습니다. 그럼 이어서 데이터 모델을 Django 에 맞게 설정해 볼 시간이네요?
그리고 이렇게 모델링을 다 했으면, 이제 migrate 명령을 내려줘야겠죠?
뷰 만들기
이제 기본적인 구성은 끝이 났습니다. 여기까지는 정말 ‘기본’ 인 구성이니, 본격적인 작업은 이제부터 시작이죠. 이제 화면을 구성해 봅시다. 일단, Django framework는 MVC 패턴을 가지고 있습니다. 하지만, 실제로 작업을 해보면 알지만… MVC가 아닌 MTV 구조를 지닙니다. 이게 무슨 소리냐면,
M – Model
V – View
C – Controller
의 구조가 아니라,
M – Model
T – TemplateV – View
의 구조를 지닙니다. 기존의 MVC와 구조적으로 큰 차이점이 있는 건 아니지만, 개념적으로 차이점을 지니고 있습니다. 이 부분을 굳이 설명해 보자면, Django FAQ 문서를 인용하여 내용을 펼쳐 보면
우리가 해석한 MVC에서는 “view” 는 ‘사용자에게 제공될 데이터를 보는 것’ 을 의미 합니다. ‘데이터가 어떻게 보이는가?’ 에 대한 것은 필요하지 않으며,’어떤 데이터가 보일 것인가?’ 에 집중합니다. 즉, view는 ‘당신이 보는 데이터’ 를 의미하며, ‘당신이 어떻게 보는지’ 를 의미 하지 않습니다. 매우 미묘한 차이죠.
Django FAQ – ‘Django appears to be a MVC framework, but you call the Controller the “view”, and the View the “template”. How come you don’t use the standard names?‘ 중 일부
즉, Django 는 MVC 패턴의 각 의미를 다시 해석하여, MTV 라는 구조를 만들어 사용 합니다. MVC 패턴과 차이점은, 관점의 차이라 생각 하시면 됩니다. 지극히 개발자 관점에서 V의 의미를 다시 정의 내렸고, 이는 곧 V가 ‘사용자가 보는 데이터’ 가 아닌 ‘개발자가 보는 데이터’ 의 의미로 정착 시켰습니다. 다시 말해 Django 에서 사용되는 View는 ‘사용자에게 보여질 데이터를 가공하는 단계’ 라 보시면 됩니다. 개발자가 View 를 만드는 것을 View 로 정의 내린 셈 입니다.
설명이 길어 졌는데, 이를 토대로 Django 에서 View를 만들어보도록 합시다.
데이터 넘겨서 출력해 보기
이렇게 Template를 만들고, View 를 출력해 봤습니다. 이거만 봐서는 허전하니까…. 그래도 뭔가 좀 더 해볼까요? Hello ‘Python’ World! 로 바꿔서 출력해 봅시다. 아, 물론 ‘Python’ 은 Context로 데이터를 넘겨 보도록 하구요.
마치며…
간단하다면 간단하게, 게시판 서비스를 위한 기본적인 내용들을 진행해 봤습니다. 이제 남은 건 몇 가지 없죠? 사실 이 정도만 해봐도 기본적인 게시판을 만들기 위한 준비는 다 끝난 셈 입니다. Context로 Model 을 넘겨줘서 잘 뿌리기만 해도 끝이니까요. 하지만 그렇게 할 거면 이 포스팅을 시작하지 않았겠죠? 다음번 포스팅 때는,
– Pagination 을 통하여 Paging 손 쉽게 하기
– Template 안에서 Logic 만들기
– 사용자 권한 부여하기
등등의 고급 주제를 가지고 이야기를 진행해 보겠습니다.

