Laravel 게시판 스캐폴딩(Scaffolding) 패키지 입니다.
API 형태로 사용하기 위해 Laravel 9.x / PHP 8.x 기반으로 제작하였습니다. 게시판 게시글, 2 Depth 댓글을 지원하며 회원 정보는 Laravel에서 기본으로 제공하는 users를 이용합니다.
- API 형태로 제작하였기 때문에 view 파일은 존재하지 않습니다.
본 게시판 패키지는 아래의 항목으로 구성되어 있습니다.
항목 | 내용 | 비고 |
---|---|---|
게시판 (board) |
- 게시판 게시글과 댓글 작성시 부여할 포인트 설정 - 페이지당 보여질 게시글 수 / 댓글 수 설정 |
게시판 테이블에서 직접 설정 |
게시글 (post) |
- 게시판별 게시글 목록, 검색, 조회, 추가, 수정, 삭제 - 게시글 제목 / 본문 검색 - 게시글 조회 시 조회수 1 증가 - 게시글 추가 시 게시판에서 설정된 포인트 부여 - 게시글 추가, 수정, 삭제 시 작성자 정보 저장 (Optional) - 게시글 추가, 수정, 삭제 시 작성자 인증 확인 - 게시글에 댓글이 존재할 시 삭제 불가 |
- 게시글 추가 시 검색용으로 Strip tag된 게시글 본문 별도 저장 - 게시글 삭제 시 Soft Delete 적용 |
댓글 (comment) |
- 게시글 댓글 목록, 검색, 조회, 추가, 수정, 삭제 - 댓글 본문 검색 - 댓글 추가 시 게시판에 설정된 포인트 부여 - 댓글 추가, 수정, 삭제 시 작성자 정보 저장 (Optional) - 댓글 추가, 수정, 삭제 시 작성자 인증 확인 - 댓글에 댓글 (대댓글) 존재 시 해당 댓글 삭제 불가 |
- 댓글 추가 시 검색용으로 Strip tag된 게시글 본문 별도 저장 - 댓글 삭제 시 Soft Delete 적용 |
데이터베이스 (database) |
- 게시판, 게시글, 댓글 테이블(migration) - 게시판, 게시글 댓글 테스트 데이터 (factory, seeder) |
- 게시글 200개 (일반글 )+ 5개(공지사항) 생성 - 댓글 100개 + 100개 댓글별 1~8개 사이의 자식 댓글 생성 |
기능 테스트 (Feature Test) |
- 게시글, 댓글 CRUD에 대한 기능 테스트(Feature Test) 정의 | - User Agent 포함한 Test 제외 (추후 추가 예정) |
config/laraboad.php
의 collect_user_info
항목을 true로 설정할 경우 아래의 정보를 게시글 및 댓글 작성 시 같이 저장합니다.
항목 | 내용 | 비고 |
---|---|---|
IP | 접속한 사용자의 IP Address | 암호화 하여 저장 |
User Agent | 접속한 사용자의 User Agent 문자열 | 암호화 하여 저장 |
Device Type | 접속한 사용자가 사용한 기기 형태 | desktop, tablet, mobile, others 중 1 Agent.php 참조 |
OS Name | 접속한 사용자의 OS 이름 | Agent.php 참조 / 확인불가 시 null |
OS Version | 접속한 사용자의 OS 버전 | Agent.php 참조 / 확인불가 시 null |
Browser Name | 접속한 사용자의 Browser 이름 | Agent.php 참조 / 확인불가 시 null |
Browser Version | 접속한 사용자의 Browser 버전 | Agent.php 참조 / 확인불가 시 null |
주의: Laravel의 HTTP 기본 인증은 email:password 문자열을 base64 인코딩하여 사용하기 때문에 보안에 취약하니 본 패키지 사용 시 반드시 변경하여 사용하시는 것을 권장합니다.
본 패키지는 구현의 편의를 위해 HTTP 기본 인증 (Basic Auth)을 이용합니다.
사용자 인증이 적용되는 범위는 아래와 같습니다.
항목 | 인증범위 | 비고 |
---|---|---|
게시글 (post) |
등록(POST), 수정(PUT), 삭제(DELETE) | HTTP 기본 인증 (Basic Auth) 적용 |
댓글 (comment) |
등록(POST), 수정(PUT), 삭제(DELETE) | HTTP 기본 인증 (Basic Auth) 적용 |
게시글, 댓글 본문 저장 시 strip tag (+html special char)를 적용하며 XSS Protection을 적용하였습니다.
허용할 tag는 config/laraboad.php
의 allow_post_content_tags
, allow_comment_content_tags
에서 설정할 수 있습니다.
본 패키지는 아래의 의존성을 가지고 개발되었습니다.
항목 | 패키지 | 버전 | 설명 | 비고 |
---|---|---|---|---|
Framework | Laravel | 9.x | - | - |
Language | PHP | 8.x | - | - |
External Pcakge | jenssegers/agent | 3.0@dev | 사용자 IP Address, User Agent, OS 이름/버전, 접속 Browser 이름/버전 분석 | composer 설치 (본 패키지 설치 시 자동으로 같이 설치) |
패키지 사용 방법은 아래와 같습니다.
아래와 같이 Laravel 9.x가 설치된 프로젝트 디렉터리 내에서 composer
명령어를 이용해 설치합니다.
composer require inium/laraboard
아래 명령어를 이용해 Laraboard의 파일들을 Publish 하고 route를 routes/api.php에 append 합니다
php artisan laraboard:publish
명령어를 실행하면 아래의 경로에 Laraboard 파일들을 생성합니다.
항목 | Path | 설명 | 비고 |
---|---|---|---|
Controller | app\Http\Controllers\Laraboard | Laraboard 컨트롤러 | |
Models | app\Http\Models\Laraboard | Laraboard 모델 | Publish |
Requests | app\Http\Requests\Laraboard | Laraboard Request - Validation 수행 |
Publish |
Config | config/laraboard.php | Laraboard 환경설정 파일 | Publish |
Database Migrations |
database/migrations/laraboard | Laraboard 데이터베이스 테이블 정의 | Publish |
Database Factories |
database\Factories | Laraboard 데이터베이스 팩토리 | Publish |
Database Seeders |
database\Seeders\Laraboard | Laraboard 데이터베이스 Seed | Publish |
Route | routes/laraboard/api.php | Laraboard API route를 routes/api.php 하단에 포함(require)하여 적용 | Publish |
Test | tests/Feature/Laraboard | Laraboard 게시글(Post), 댓글(Comment)에 대한 기능 테스트 | Publish |
- 비고 > Publish: 패키지 내 정의된 Laraboard 코드를 프로젝트에 배포합니다.
아래 명령어를 이용해 Laraboard 테이블 정보를 migration 합니다.
php artisan migrate --path=database/migrations/laraboard
테스트를 위한 데이터가 필요할 경우 아래 명령어를 이용해 테스트 데이터를 Laraboard 테이블에 추가할 수 있습니다.
php artisan db:seed --class="Database\\Seeders\\Laraboard\\LaraboardSeeder"
- 위 명령어 실행 시 많은 데이터를 추가하기 때문에 오랜 시간이 소요됩니다.
아래 명령어를 이용해 기능 테스트를 실행합니다.
php artisan test
본 게시판 패키지의 Timezone은 Laravel 프로젝트의 설정파일인 config/app.php
에 지정된 Timezone을 이용합니다. 기본 Timezone은 UTC 입니다.
본 게시판 패키지는 별도의 파일 업로드 기능이 구현되어 있지 않습니다.
본 게시판 패키지의 관리 페이지는 구현되어 있지 않습니다.
본 패키지의 게시글, 댓글 API에 대한 사용 방법은 아래 내용을 참조 바랍니다.
MIT