코드이그나이터4 마크다운 블로그 MVP 만들기 - 3 - 데이터 관련 설계
마크다운 블로그 프로토타입 만들기
이번 챕터는 https://github.com/koeunyeon/ci4/tree/blog-data-design에 코드가 있습니다.
게시글 요건 정의하기
블로그는 글을 쓸 수 있는 공간이므로, 게시글이 가장 중요한 기능입니다. 따라서 게시글 기능부터 만들어 보겠습니다.
게시글은 회원이 쓸 수 있는 글입니다.
게시글의 속성은 아래와 같습니다.
- 게시글 제목 : 4 - 100글자
- 게시글 내용 : 10 - 512글자
- 게시글 글쓴이 :
게시글의 권한은 아래와 같습니다.
- 게시글은 누구나 볼 수 있습니다.
- 게시글은 회원만 작성할 수 있습니다.
- 게시글은 작성자만 수정할 수 있습니다.
- 게시글은 작성자만 삭제할 수 있습니다.
- 첫 페이지는 누구나 볼 수 있습니다.
만들고자 하는 기능의 주소는 아래와 같습니다.
- 게시글 작성하기 : /post/create
- 게시글 상세보기 : /post/show/(글번호)
- 게시글 수정하기 : /post/edit/(글번호)
- 게시글 삭제하기 : /post/delete/(글번호)
- 게시글 목록 : /post
데이터베이스 테이블 설계하기
먼저 게시글을 담을 데이터베이스를 설계해 보겠습니다. 대략적인 모습은 아래와 같습니다.
데이터베이스 테이블 이름은 posts
로 짓겠습니다.
보통 테이블 이름을 지을 때 접두어 [tbl_
+ (업무구분)
+ 단수명사
]로 붙이는 방법과 복수형
으로 짓는 방법 둘 중 하나를 선택하는데요. 전자는 비즈니스 로직을 데이터베이스에서 주로 처리하는 경우, 후자는 비즈니스 로직을 프로그램에서 처리하는 경우에 많이 사용합니다.
우리는 가능한 비즈니스 로직을 프로그램에서 처리하는 방향으로 진행해 보기 위해 복수형 테이블 이름을 쓰겠습니다.
주 키 이름인 post_id
로 단수형입니다. 테이블 이름은 복수지만 각 행은 단수이기 때문입니다.
게시글의 속성이 제목, 내용, 글쓴이 세 개이므로 이에 맞춰서 데이터베이스 열이 필요합니다. 각 열의 이름은 title
, content
, author
로 하겠습니다.
추가로 우리는 자동 생성/수정 시간여부와 소프트 딜리트도 사용하겠습니다. 굳이 열 이름을 바꿔야 할 이유가 없으므로 기본 설정값을 사용합니다.
데이터베이스 테이블 만들기
CREATE TABLE IF NOT EXISTS `posts` (
`post_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`content` varchar(512) NOT NULL,
`author` varchar(100) NULL,
`created_at` varchar(25) NOT NULL,
`updated_at` varchar(25) NOT NULL,
`deleted_at` varchar(25) DEFAULT NULL,
PRIMARY KEY (`post_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
author
열이 NULL
임을 볼 수 있습니다. 아직 회원 기능이 없는데 일단 회원 정보를 담는 통만 만들어놓은 셈이므로, 우선 회원 데이터는 입력하지 않을 겁니다. 나중에 회원 기능을 만들면서 채워두겠습니다.
MVP는 데이터베이스 관점에서 보면 "나중에는 어떤 형태로 데이터베이스 테이블이 바뀔지 아직 모르는" 임시 데이터 저장소의 형태를 띕니다. 마이그레이션을 통해 테이블을 만드는 것은 일단 지양하고, 많은 개발자에게 익숙한 "직접 쿼리로 테이블을 생성하는 방법"을 선택합니다.
글 모델 만들기
글 요건에서 정의한 속성에 따라 모델을 만듭니다.
app/Models/PostsModel.php
<?php
namespace App\Models;
use CodeIgniter\Model;
class PostsModel extends Model
{
protected $table = 'posts';
protected $allowedFields = ['title', 'content', 'author'];
protected $primaryKey = "post_id";
protected $useSoftDeletes = true;
protected $useTimestamps = true;
}
모델은 테이블과 매핑되므로 복수형 명사인 Posts
+ Model
입니다.
Author And Source
이 문제에 관하여(코드이그나이터4 마크다운 블로그 MVP 만들기 - 3 - 데이터 관련 설계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@koeunyeon/코드이그나이터4-마크다운-블로그-MVP-만들기-3-데이터-관련-설계저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)