====== 1. views/blog_api.py: 블로그 API 로직 ====== ''blog_api.py''는 블로그 기능과 관련된 모든 서버 로직을 처리하는 **Flask 블루프린트** 모듈입니다. 이 파일은 게시물 및 댓글 관리, 사용자 인증, 파일 업로드 등 블로그 운영에 필요한 다양한 기능을 API 엔드포인트 형태로 제공합니다. ''url_prefix='/api/blog''' 설정에 따라, 이 파일에 정의된 모든 API 주소는 ''/api/blog''로 시작합니다. 이는 API 엔드포인트의 일관성과 모듈성을 보장합니다. ---- ===== 주요 기능 및 엔드포인트 ===== ''blog_api.py''는 다음과 같은 주요 기능들을 위한 RESTful API 엔드포인트를 제공합니다. ---- ==== 인증 (%%/auth%%) ==== * **HTTP 메서드**: ''POST'' * **설명**: 관리자 권한을 인증하기 위한 엔드포인트입니다. 요청 본문에 포함된 비밀번호를 서버 환경 변수(''ADMIN_PASSWORD'' 등)에 저장된 비밀번호와 비교하여 일치하면 인증 성공 응답을 반환합니다. 이 과정을 통해 관리자만 접근 가능한 기능(게시물 작성/수정/삭제, 이미지 업로드 등)을 보호합니다. ---- ==== 게시물 (Post) 관리 ==== 블로그 게시물을 생성, 조회, 수정, 삭제하는 데 사용되는 엔드포인트입니다. ^ 엔드포인트 ^ HTTP 메서드 ^ 설명 ^ 관리자 인증 ^ | %%/posts%% | ''GET'' | 모든 게시물을 최신순으로 조회합니다. | 필요 없음 | | %%/posts/%% | ''GET'' | 특정 ID의 게시물을 조회하고, 조회수를 1 증가시킵니다. | 필요 없음 | | %%/posts%% | ''POST'' | 새 게시물을 등록합니다. 요청 본문에 게시물 제목, 내용 등을 포함해야 합니다. | 필요 | | %%/posts/%% | ''PUT'' | 기존 ID의 게시물을 수정합니다. 요청 본문에 수정할 내용을 포함해야 합니다. | 필요 | | %%/posts/%% | ''DELETE'' | 특정 ID의 게시물을 삭제합니다. | 필요 | ---- ==== 댓글 (Comment) 관리 ==== 각 게시물에 대한 댓글을 관리하는 엔드포인트입니다. ^ 엔드포인트 ^ HTTP 메서드 ^ 설명 ^ 인증/비밀번호 필요 여부 ^ | %%/posts//comments%% | ''POST'' | 특정 게시물(ID)에 새 댓글을 추가합니다. 댓글 작성 시 입력된 비밀번호는 해시되어 저장됩니다. | 필요 없음 (댓글 비밀번호로 인증) | | %%/posts//comments/%% | ''PUT'' | 특정 게시물(ID) 내의 댓글(comment_id)을 수정합니다. 수정 요청 시 올바른 댓글 비밀번호를 제공해야 합니다. | 댓글 비밀번호 필요 | | %%/posts//comments/%% | ''DELETE'' | 특정 게시물(ID) 내의 댓글(comment_id)을 삭제합니다. 삭제 요청 시 올바른 댓글 비밀번호를 제공해야 합니다. | 댓글 비밀번호 필요 | ---- ==== 기타 기능 ==== 블로그 운영에 필요한 기타 유틸리티성 엔드포인트입니다. ^ 엔드포인트 ^ HTTP 메서드 ^ 설명 ^ 관리자 인증 ^ | %%/site-info%% | ''GET'' | 사이트의 총 방문자 수를 반환하고, 동시에 방문자 카운트를 1 증가시킵니다. | 필요 없음 | | %%/images%% | ''POST'' | 게시물 내용에 포함될 이미지를 서버에 업로드합니다. 업로드된 이미지의 접근 가능한 URL을 반환하여 게시물 내용에 삽입할 수 있도록 합니다. | 필요 | ---- ==== 보안 처리 ==== ''blog_api.py''는 다음과 같은 보안 메커니즘을 적용하여 블로그 시스템의 안정성과 데이터 무결성을 확보합니다. * **관리자 인증**: - 게시물 작성, 수정, 삭제 및 이미지 업로드와 같은 민감한 작업은 반드시 관리자 인증(`POST /api/blog/auth`를 통해 발급된 세션 또는 토큰)을 거쳐야만 수행할 수 있습니다. - 이는 인가되지 않은 사용자가 블로그 콘텐츠를 무단으로 변경하거나 시스템에 악영향을 미치는 것을 방지합니다. * **XSS (Cross-Site Scripting) 방어**: - 사용자가 입력하는 게시물 내용이나 댓글에는 악의적인 스크립트가 포함될 수 있습니다. 이를 방지하기 위해 ''bleach'' 라이브러리를 사용하여 HTML 내용을 필터링(Sanitize)합니다. - ''bleach''는 허용된 HTML 태그(예: ``, ``, ``)와 속성만을 남기고, 잠재적으로 위험한 스크립트 태그(`%%