이 문서는 Python과 Tornado 웹 프레임워크를 사용하여 간단한 문서 서비스를 구축하는 방법을 소개합니다. 이 서비스는 마크다운 파일과 디렉토리 구조를 기반으로 동적으로 문서 목록과 내용을 제공합니다.
코드 다운로드 및 데모
- 코드 저장소:
https://gitee.com/luhaipinga/LhpDocs(gitee에서 다운로드 가능) - 데모 URL:
http://39.106.34.123:10011/
설치 및 실행 방법
사용 기술 스택
- 백엔드: Python, Tornado, YAML
- 프론트엔드: Vue2, highlight.js, marked (CDN 방식)
Python 설치
Python 3.8+ 버전을 권장하며, Python 3.6+에서도 동작합니다.
의존 라이브러리 설치
pip install -r requirements.txt
Tornado는 Windows와 Linux 모두 지원합니다.
프로젝트 실행
python main.py
서비스 접속
host:10011/
콘텐츠 생성 방법
새 디렉토리 생성
예: 3번째 디렉토리 뒤에 "테스트"라는 이름의 디렉토리를 추가하려면 다음과 같이 파일을 생성합니다.
/md_info/3/- 디렉토리 (숫자는 디렉토리 트리에서의 위치를 의미)/md_info/3/main.yaml- 디렉토리 이름을 저장하는 파일, 내용:name: 테스트
특정 디렉토리에 마크다운 문서 추가
예: 3번째 디렉토리에 "테스트"라는 이름의 문서를 추가하고, 내용은 "# 테스트 문서"로 설정하려면:
/md_info/2/md_files/- 마크다운 파일 저장 디렉토리/md_info/2/md_files/2/- 문서 위치를 나타내는 디렉토리/md_info/2/md_files/2/main.yaml- 문서 이름 설정:name: 테스트/md_info/2/md_files/2/main.md- 문서 내용:# 테스트 문서
백엔드 코드 설명
정적 파일 디렉토리 설정
# static 폴더를 정적 파일 제공 디렉토리로 사용
# URL 패턴: host:port/LhpDocs_static/*
(r"/LhpDocs_static/(.*)", tornado.web.StaticFileHandler, {
"path": os.path.join(os.path.dirname(os.path.abspath(__file__)), "static")
}),
# 이미지 파일 출력을 위한 핸들러
(r"/LhpDocs_img/(.*)", read_img),
메인 페이지 접근
(r"/", MainHandler)
MainHandler 클래스는 templates/index.html 파일을 반환합니다.
동적 문서 정보 제공
(r"/md_file", MarkdownFileHandler),
(r"/md_info", MarkdownInfoHandler),
index.html 페이지는 다음 두 엔드포인트를 통해 실시간으로 문서 정보를 가져옵니다.
/md_info: 요청 시 서버가 디렉토리 구조를 동적으로 탐색하여 반환합니다. (페이지가 새로고침되지 않으면 캐시 유지)/md_file: 마크다운 파일의 내용을 실시간으로 반환합니다. (이미 요청한 문서는 다시 요청하지 않음)
성능 고려사항
이 시스템은 정적 파일을 제공하는 대신, 요청이 들어올 때마다 디렉토리 구조와 파일 내용을 동적으로 읽어옵니다. 따라서 문서 구조의 변경이 즉시 반영되지만, 잦은 요청 시 성능에 영향을 줄 수 있습니다.