InfoGrab DocsInfoGrab Docs

Banzai 파이프라인 및 파싱

GitLab Flavored Markdown을 HTML로 파싱하고 렌더링하는 Banzai 파이프라인의 구조와 각 필터 및 캐싱 동작 방식을 설명합니다.

GitLab Flavored Markdown 을 HTML로 파싱하고 렌더링하는 작업에는 여러 컴포넌트가 관여합니다: Banzai 파이프라인과 다양한 필터들 Markdown 파서 백엔드에서 GLFM을 HTML로 변환하는 모든 처리를 담당합니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다: 보안: 알 수 없는 태그, 클래스, id를 제거하는 강력한 새니타이제이션(sanitization)을 수행합니다. 참조: 참조 구문은 이슈 등을 해석하기 위해 데이터베이스에 접근해야 하며, 사용자가 접근 권한이 없는 참조를 삭제하는 작업도 필요합니다. 일관성: 사용자에게 일관된 경험을 제공하고자 하며, 여기에는 GLFM 구문과 스타일링의 완전한 지원이 포함됩니다. 처리가 단일 위치에서 이루어지면 이를 보장할 수 있습니다. 캐싱: 이슈나 머지 리퀘스트 설명, 댓글 등 가능한 경우 HTML을 데이터베이스에 캐시합니다. Quick actions: 전용 파이프라인을 사용하여 quick action을 처리하므로, Markdown 텍스트에서 더 효과적으로 감지할 수 있습니다. 프론트엔드는 다음과 같은 표시 관련 특정 측면을 처리합니다: Math 블록 Mermaid 블록 과도한 수의 math 또는 mermaid 블록과 같은 특정 제한 사항 적용 Banzai 파이프라인 # 하와이의 서핑 리프 브레이크 의 이름을 따서 명명된 Banzai 파이프라인은 Markdown과 HTML이 파이프라인 방식으로 각 단계에서 변환되는 다양한 필터( lib/banzai/filters )로 구성됩니다. 다양한 파이프라인( lib/banzai/pipeline )이 정의되어 있으며, AsciiDocPipeline , EmailPipeline 등 각 파이프라인은 서로 다른 필터 시퀀스를 가집니다. html-pipeline gem이 파이프라인/필터 메커니즘을 구현합니다. 기본 파이프라인은 FullPipeline 이며, 이는 PlainMarkdownPipeline 과 GfmPipeline 의 조합입니다. PlainMarkdownPipeline # 이 파이프라인에는 원시 Markdown을 HTML로 변환하는 필터가 포함되어 있으며, 주로 Filter::MarkdownFilter 가 담당합니다. Filter::MarkdownFilter # 이 필터는 실제 Markdown 파서와 인터페이스합니다. 파서는 comrak Rust 크레이트를 사용하는 gitlab-glfm-markdown Ruby gem을 사용합니다. 텍스트가 이 필터에 전달되면, 지정된 파서 엔진을 호출하여 해당하는 기본 HTML을 생성합니다. GfmPipeline # 이 파이프라인에는 원시 HTML을 렌더링된 GLFM으로 변환하는 추가 필터들이 모두 포함되어 있습니다. Nokogiri 문서가 이 필터들 각각에 전달되며, 다양한 변환을 수행합니다. 예를 들어 EmojiFitler , CommitTrailersFilter , SanitizationFilter 등이 있습니다. 초기 Markdown 파싱에서 처리할 수 없는 모든 것은 이 필터들