From dbea40d845b8361fe237b5947faf895bb60b6342 Mon Sep 17 00:00:00 2001 From: icurfer Date: Sat, 17 Jan 2026 00:04:16 +0900 Subject: [PATCH] =?UTF-8?q?v0.0.10=20|=20README.md=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.5 --- README.md | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- version | 2 +- 2 files changed, 120 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 89ce890..da36145 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,128 @@ # msa-django-blog -## dev run server +마크다운 기반 기술 블로그 서비스입니다. + +## 기술 스택 + +| 분류 | 기술 | +|------|------| +| Framework | Django 4.2.14 | +| API | Django REST Framework 3.16.0 | +| Auth | SimpleJWT 5.5.0 (RS256) | +| Database | MySQL (mysqlclient 2.2.7) | +| Docs | drf-yasg 1.21.10 | +| Server | Gunicorn 20.1.0 | + +## 주요 기능 + +- **포스트 관리**: 마크다운 기반 글 작성/수정/삭제 +- **태그 시스템**: 다중 태그 지원, 태그별 필터링 +- **댓글/대댓글**: 계층형 댓글 구조 +- **작성자 관리**: JWT 기반 작성자 식별 + +## API 엔드포인트 + +### 포스트 + +| Method | Endpoint | 설명 | 권한 | +|--------|----------|------|------| +| GET | `/api/blog/posts/` | 포스트 목록 | 공개 | +| GET | `/api/blog/posts/?tag=tagname` | 태그 필터링 | 공개 | +| GET | `/api/blog/posts//` | 포스트 상세 | 공개 | +| GET | `/api/blog/create/` | 내 포스트 목록 | 인증 | +| POST | `/api/blog/create/` | 포스트 생성 | 인증 | +| PUT/PATCH | `/api/blog/posts//` | 포스트 수정 | 작성자 | +| DELETE | `/api/blog/posts//` | 포스트 삭제 | 작성자 | + +### 댓글 + +| Method | Endpoint | 설명 | 권한 | +|--------|----------|------|------| +| GET | `/api/blog/posts//comments/` | 댓글 목록 | 공개 | +| POST | `/api/blog/posts//comments/` | 댓글 작성 | 인증 | +| PUT | `/api/blog/posts//comments//` | 댓글 수정 | 작성자 | +| DELETE | `/api/blog/posts//comments//` | 댓글 삭제 | 작성자 | + +### 태그 + +| Method | Endpoint | 설명 | +|--------|----------|------| +| GET | `/api/blog/tags/` | 태그 목록 | + +### API 문서 + +- Swagger UI: `/swagger/` + +## 데이터 모델 + +### Post + +| 필드 | 타입 | 설명 | +|------|------|------| +| title | CharField | 제목 | +| content | TextField | 마크다운 본문 | +| tags | ManyToMany | 태그 목록 | +| author_id | CharField | 작성자 ID | +| author_name | CharField | 작성자 이름 | +| created_at | DateTimeField | 생성일 | +| updated_at | DateTimeField | 수정일 | + +### Comment + +| 필드 | 타입 | 설명 | +|------|------|------| +| post | ForeignKey | 포스트 | +| parent | ForeignKey(self) | 부모 댓글 (대댓글용) | +| content | TextField | 댓글 내용 | +| author_id | CharField | 작성자 ID | +| author_name | CharField | 작성자 이름 | + +### Tag + +| 필드 | 타입 | 설명 | +|------|------|------| +| name | CharField | 태그명 (고유) | + +## 환경 변수 + +```env +# Django +DEBUG=1 +SECRET_KEY=your-secret-key + +# Database +SQL_ENGINE=django.db.backends.mysql +SQL_HOST=localhost +SQL_USER=user +SQL_PASSWORD=password +SQL_DATABASE=msa-demo +SQL_PORT=3306 + +# JWT +ISTIO_JWT=1 +``` + +## 실행 방법 + +### 개발 서버 ```bash +python3 -m venv venv +source venv/bin/activate +pip install -r requirements.txt +python3 manage.py migrate python3 manage.py runserver 0.0.0.0:8800 ``` -### blog +### 운영 서버 ```bash -gunicorn auth_prj.wsgi:application --bind 0.0.0.0:8800 --workers 3 -``` \ No newline at end of file +gunicorn blog_prj.wsgi:application --bind 0.0.0.0:8800 --workers 3 +``` + +### Docker + +```bash +docker build -t msa-django-blog . +docker run -p 8000:8000 --env-file .env.dev msa-django-blog +``` diff --git a/version b/version index 6183501..ba00537 100644 --- a/version +++ b/version @@ -1 +1 @@ -v0.0.9 \ No newline at end of file +v0.0.10 \ No newline at end of file