blog_api.py
는 블로그 기능과 관련된 모든 서버 로직을 처리하는 Flask 블루프린트 모듈입니다. 이 파일은 게시물 및 댓글 관리, 사용자 인증, 파일 업로드 등 블로그 운영에 필요한 다양한 기능을 API 엔드포인트 형태로 제공합니다.
url_prefix='/api/blog
' 설정에 따라, 이 파일에 정의된 모든 API 주소는 /api/blog
로 시작합니다. 이는 API 엔드포인트의 일관성과 모듈성을 보장합니다.
blog_api.py
는 다음과 같은 주요 기능들을 위한 RESTful API 엔드포인트를 제공합니다.
POST
ADMIN_PASSWORD
등)에 저장된 비밀번호와 비교하여 일치하면 인증 성공 응답을 반환합니다. 이 과정을 통해 관리자만 접근 가능한 기능(게시물 작성/수정/삭제, 이미지 업로드 등)을 보호합니다.블로그 게시물을 생성, 조회, 수정, 삭제하는 데 사용되는 엔드포인트입니다.
엔드포인트 | HTTP 메서드 | 설명 | 관리자 인증 |
---|---|---|---|
/posts | GET | 모든 게시물을 최신순으로 조회합니다. | 필요 없음 |
/posts/<id> | GET | 특정 ID의 게시물을 조회하고, 조회수를 1 증가시킵니다. | 필요 없음 |
/posts | POST | 새 게시물을 등록합니다. 요청 본문에 게시물 제목, 내용 등을 포함해야 합니다. | 필요 |
/posts/<id> | PUT | 기존 ID의 게시물을 수정합니다. 요청 본문에 수정할 내용을 포함해야 합니다. | 필요 |
/posts/<id> | DELETE | 특정 ID의 게시물을 삭제합니다. | 필요 |
각 게시물에 대한 댓글을 관리하는 엔드포인트입니다.
엔드포인트 | HTTP 메서드 | 설명 | 인증/비밀번호 필요 여부 |
---|---|---|---|
/posts/<id>/comments | POST | 특정 게시물(ID)에 새 댓글을 추가합니다. 댓글 작성 시 입력된 비밀번호는 해시되어 저장됩니다. | 필요 없음 (댓글 비밀번호로 인증) |
/posts/<id>/comments/<comment_id> | PUT | 특정 게시물(ID) 내의 댓글(comment_id)을 수정합니다. 수정 요청 시 올바른 댓글 비밀번호를 제공해야 합니다. | 댓글 비밀번호 필요 |
/posts/<id>/comments/<comment_id> | DELETE | 특정 게시물(ID) 내의 댓글(comment_id)을 삭제합니다. 삭제 요청 시 올바른 댓글 비밀번호를 제공해야 합니다. | 댓글 비밀번호 필요 |
블로그 운영에 필요한 기타 유틸리티성 엔드포인트입니다.
엔드포인트 | HTTP 메서드 | 설명 | 관리자 인증 |
---|---|---|---|
/site-info | GET | 사이트의 총 방문자 수를 반환하고, 동시에 방문자 카운트를 1 증가시킵니다. | 필요 없음 |
/images | POST | 게시물 내용에 포함될 이미지를 서버에 업로드합니다. 업로드된 이미지의 접근 가능한 URL을 반환하여 게시물 내용에 삽입할 수 있도록 합니다. | 필요 |
blog_api.py
는 다음과 같은 보안 메커니즘을 적용하여 블로그 시스템의 안정성과 데이터 무결성을 확보합니다.
bleach
라이브러리를 사용하여 HTML 내용을 필터링(Sanitize)합니다.bleach
는 허용된 HTML 태그(예: `<strong>`, `<em>`, `<a>`)와 속성만을 남기고, 잠재적으로 위험한 스크립트 태그(`<script>`)나 이벤트 핸들러 속성(`onclick`) 등을 제거하여 XSS 공격으로부터 보호합니다.werkzeug.security
모듈의 `generate_password_hash` 함수를 사용하여 단방향 암호화된 해시값으로 변환하여 저장합니다.
이처럼 blog_api.py
는 블로그 기능의 핵심 로직을 체계적으로 구현할 뿐만 아니라, 사용자 데이터 보호와 시스템 보안을 위한 다양한 측면까지 고려하여 설계되었습니다.