Python 기반 경량 문서 서비스 구축하기

이 문서는 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: 마크다운 파일의 내용을 실시간으로 반환합니다. (이미 요청한 문서는 다시 요청하지 않음)

성능 고려사항

이 시스템은 정적 파일을 제공하는 대신, 요청이 들어올 때마다 디렉토리 구조와 파일 내용을 동적으로 읽어옵니다. 따라서 문서 구조의 변경이 즉시 반영되지만, 잦은 요청 시 성능에 영향을 줄 수 있습니다.

태그: python Tornado YAML Vue2 highlight.js

5월 27일 23:52에 게시됨