Files
sejong-office/packages/frontend/src/views/LicensesView.vue
T
ysj7705andCursor c4ae7495dd
office.sejong.dev/pipeline/head This commit looks good
Add a markdown viewer for .md files and live typed preview.
Render GitHub-flavored markdown in the browser with marked and sanitize HTML with DOMPurify.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 13:55:41 +09:00

384 lines
11 KiB
Vue

<script setup lang="ts">
import AppShell from '@/components/AppShell.vue';
import { APP_DISPLAY_NAME, APP_GIT_URL, APP_NAME } from '@/config/app';
import { usePageTitle } from '@/composables/usePageTitle';
usePageTitle('오픈소스 라이선스');
const thirdParty = [
{ name: 'Vue', license: 'MIT', url: 'https://github.com/vuejs/core' },
{ name: 'Vue Router', license: 'MIT', url: 'https://github.com/vuejs/router' },
{ name: 'Vite', license: 'MIT', url: 'https://github.com/vitejs/vite' },
{ name: 'React', license: 'MIT', url: 'https://github.com/facebook/react' },
{
name: 'Excalidraw',
license: 'MIT',
url: 'https://github.com/excalidraw/excalidraw',
},
{
name: 'Mermaid',
license: 'MIT',
url: 'https://github.com/mermaid-js/mermaid',
},
{
name: 'marked',
license: 'MIT',
url: 'https://github.com/markedjs/marked',
},
{
name: 'DOMPurify',
license: 'MPL-2.0 OR Apache-2.0',
url: 'https://github.com/cure53/DOMPurify',
},
{ name: 'Three.js', license: 'MIT', url: 'https://github.com/mrdoob/three.js' },
{
name: 'Online 3D Viewer',
license: 'MIT',
url: 'https://github.com/kovacsv/Online3DViewer',
},
{
name: 'occt-import-js',
license: 'LGPL-2.1',
url: 'https://github.com/kovacsv/occt-import-js',
},
{
name: 'web-ifc',
license: 'MPL-2.0',
url: 'https://github.com/ThatOpen/engine_web-ifc',
},
{
name: 'rhino3dm',
license: 'MIT',
url: 'https://github.com/mcneel/rhino3dm',
},
{
name: 'Draco',
license: 'Apache-2.0',
url: 'https://github.com/google/draco',
},
{
name: 'fflate',
license: 'MIT',
url: 'https://github.com/101arrowz/fflate',
},
{
name: 'jscanify',
license: 'MIT',
url: 'https://github.com/puffinsoft/jscanify',
},
{
name: 'OpenCV.js',
license: 'Apache-2.0',
url: 'https://opencv.org/',
},
{
name: 'ppu-paddle-ocr',
license: 'MIT',
url: 'https://github.com/PT-Perkasa-Pilar-Utama/ppu-paddle-ocr',
},
{
name: 'ONNX Runtime Web',
license: 'MIT',
url: 'https://github.com/microsoft/onnxruntime',
},
{
name: 'PaddleOCR models (PP-OCRv5)',
license: 'Apache-2.0',
url: 'https://github.com/PaddlePaddle/PaddleOCR',
},
{
name: 'pdf-lib',
license: 'MIT',
url: 'https://github.com/Hopding/pdf-lib',
},
{
name: 'PDF.js',
license: 'Apache-2.0',
url: 'https://github.com/mozilla/pdf.js',
},
{
name: 'Pretendard',
license: 'SIL OFL 1.1',
url: 'https://github.com/orioncactus/pretendard',
},
{
name: 'Noto Sans KR',
license: 'SIL OFL 1.1',
url: 'https://github.com/notofonts/noto-cjk',
},
{ name: 'Express', license: 'MIT', url: 'https://github.com/expressjs/express' },
{ name: 'jsonwebtoken', license: 'MIT', url: 'https://github.com/auth0/node-jsonwebtoken' },
{ name: 'multer', license: 'MIT', url: 'https://github.com/expressjs/multer' },
{ name: 'uuid', license: 'MIT', url: 'https://github.com/uuidjs/uuid' },
];
</script>
<template>
<AppShell>
<main class="licenses">
<header class="licenses__header">
<RouterLink class="back" to="/">← 홈</RouterLink>
<h1>오픈소스 라이선스 · 고지</h1>
<p>
{{ APP_DISPLAY_NAME }}({{ APP_NAME }})에 포함된 주요 소프트웨어의 라이선스와
고지 사항입니다.
</p>
</header>
<section class="card">
<h2>본 앱</h2>
<p>라이선스: <strong>GNU General Public License v3.0 only</strong></p>
<p v-if="APP_GIT_URL">
소스 코드:
<a :href="APP_GIT_URL" target="_blank" rel="noopener noreferrer">{{
APP_GIT_URL
}}</a>
</p>
<p v-else class="muted">
소스 저장소 URL은 <code>APP_GIT_URL</code> 상수에 설정할 수 있습니다.
</p>
<p class="muted">
본 앱의 UI는 Microsoft Office와 유사한 레이아웃을 참고했으나,
Microsoft·Office·Word·Excel·PowerPoint 등 Microsoft 상표와 공식 제휴
관계가 없습니다.
</p>
</section>
<section class="card">
<h2>MLightCAD · LibreDWG</h2>
<p>
CAD 화면과 렌더러는
<a
href="https://github.com/mlightcad/cad-viewer"
target="_blank"
rel="noopener noreferrer"
>MLightCAD CAD Viewer</a
>
(MIT)를 사용합니다.
</p>
<p>
DXF 변환기
<a
href="https://github.com/mlightcad/dxf-json"
target="_blank"
rel="noopener noreferrer"
>@mlightcad/dxf-json-converter</a
>와 DWG Worker에 포함된
<a
href="https://www.gnu.org/software/libredwg/"
target="_blank"
rel="noopener noreferrer"
>GNU LibreDWG</a
>는 <strong>GPL-3.0</strong>입니다. 이에 따라 본 앱도
GPL-3.0-only로 배포됩니다.
</p>
<p class="muted">
상용 AutoCAD 폰트는 포함하지 않습니다. 누락된 한글·라틴 글꼴은 SIL Open
Font License 1.1의 Noto Sans KR로 대체하며, 원본 글꼴과 글자 폭·형태가
다를 수 있습니다.
</p>
</section>
<section class="card">
<h2>Online 3D Viewer</h2>
<p>
3D 뷰어 엔진은
<a
href="https://github.com/kovacsv/Online3DViewer"
target="_blank"
rel="noopener noreferrer"
>Online 3D Viewer</a
>
(MIT)를 사용합니다. Three.js·fflate·Pickr(MIT), Draco(Apache-2.0),
rhino3dm(MIT), web-ifc(MPL-2.0), occt-import-js(LGPL-2.1) 로더는
CDN 없이 <code>/viewer-assets/o3dv/</code>에 자체 호스팅됩니다.
</p>
<p class="muted">
CAD·3D 원본 파일과 보조 파일은 브라우저 메모리에서만 처리하며 앱 서버로
업로드하거나 영구 저장하지 않습니다.
</p>
</section>
<section class="card">
<h2>문서 스캐너</h2>
<p>
문서 코너 검출·퍼스펙티브 보정은
<a
href="https://github.com/puffinsoft/jscanify"
target="_blank"
rel="noopener noreferrer"
>jscanify</a
>
와 OpenCV.js(Apache-2.0)를 사용합니다. OCR은
<a
href="https://github.com/PT-Perkasa-Pilar-Utama/ppu-paddle-ocr"
target="_blank"
rel="noopener noreferrer"
>ppu-paddle-ocr</a
>
(MIT)와 ONNX Runtime Web(MIT)으로 PP-OCRv5 한국어 모델을 브라우저에서
실행하며, PDF 페이지 래스터화는
<a
href="https://github.com/mozilla/pdf.js"
target="_blank"
rel="noopener noreferrer"
>PDF.js</a
>
(Apache-2.0), PDF 생성은 pdf-lib(MIT)입니다. OpenCV·ORT WASM·ONNX
모델·사전·PDF.js worker는
<code>/viewer-assets/scanner/</code>에 자체 호스팅됩니다.
</p>
<p class="muted">
스캔 이미지와 OCR 결과는 브라우저에서만 처리하며 서버로 업로드하지
않습니다. OCR을 켠 PDF에는 검색·복사용 투명 텍스트 레이어가
포함됩니다.
</p>
</section>
<section class="card">
<h2>Euro-Office Document Server</h2>
<p>
<strong>GNU AGPL v3</strong>로 배포됩니다. 서버에 Document Server를
배포·수정하는 경우 AGPL 의무(소스 제공 등)를 확인하세요.
</p>
<ul>
<li>
<a
href="https://github.com/Euro-Office/DocumentServer"
target="_blank"
rel="noopener noreferrer"
>Euro-Office DocumentServer (GitHub)</a
>
</li>
<li>
<a
href="https://github.com/ONLYOFFICE/DocumentServer"
target="_blank"
rel="noopener noreferrer"
>ONLYOFFICE DocumentServer (upstream)</a
>
</li>
</ul>
<p class="muted">
Euro-Office Document Server는 ONLYOFFICE Document Server를 기반으로
합니다. ONLYOFFICE는 Ascensio System SIA의 상표입니다. 본 프로젝트는
Euro-Office·OnlyOffice와 공식 제휴 관계가 없습니다.
</p>
</section>
<section class="card">
<h2>diagrams.net / draw.io</h2>
<p>
라이선스: <strong>Apache License 2.0</strong> —
<a
href="https://github.com/jgraph/drawio"
target="_blank"
rel="noopener noreferrer"
>github.com/jgraph/drawio</a
>
</p>
<p class="muted">
draw.io 편집 화면은 공식 <code>embed.diagrams.net</code> 정적 앱을
네트워크로 불러옵니다. 다이어그램 데이터는 브라우저의
<code>postMessage</code>를 통해 교환하며 본 앱 서버에 저장하지 않습니다.
</p>
</section>
<section class="card">
<h2>rhwp (@rhwp/editor, @rhwp/core)</h2>
<p>라이선스: <strong>MIT</strong></p>
<p>
HWP/HWPX 뷰어·에디터 —
<a
href="https://github.com/edwardkim/rhwp"
target="_blank"
rel="noopener noreferrer"
>github.com/edwardkim/rhwp</a
>
</p>
<p class="muted">
“한글”, “한컴”, “HWP”, “HWPX”는 주식회사 한글과컴퓨터의 등록 상표입니다.
rhwp 및 본 앱은 한글과컴퓨터와 제휴·후원·승인 관계가 없는 독립 프로젝트입니다.
</p>
</section>
<section class="card">
<h2>기타 주요 의존성</h2>
<ul class="deps">
<li v-for="item in thirdParty" :key="item.name">
<a :href="item.url" target="_blank" rel="noopener noreferrer">{{
item.name
}}</a>
— {{ item.license }}
</li>
</ul>
</section>
</main>
</AppShell>
</template>
<style scoped>
.licenses {
flex: 1;
width: min(720px, 100%);
margin: 0 auto;
padding: 2rem 1.25rem 3rem;
}
.licenses__header h1 {
font-family: var(--font-display);
font-size: 1.85rem;
margin: 0.5rem 0 0.5rem;
}
.licenses__header p {
color: var(--muted);
margin: 0 0 1.5rem;
line-height: 1.5;
}
.back {
color: var(--accent);
text-decoration: none;
font-size: 0.9rem;
}
.card {
padding: 1.25rem 0;
border-top: 1px solid var(--border);
}
.card h2 {
font-size: 1.1rem;
margin: 0 0 0.65rem;
}
.card p,
.card li {
font-size: 0.92rem;
line-height: 1.55;
color: var(--ink-soft);
}
.card a {
color: var(--accent);
}
.muted {
color: var(--muted) !important;
font-size: 0.85rem !important;
}
.deps {
padding-left: 1.1rem;
margin: 0;
}
code {
font-size: 0.85em;
background: var(--accent-soft);
padding: 0.1em 0.35em;
border-radius: 3px;
}
</style>