Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
isms-builder — 자체 호스팅 정보보안 관리 시스템 — ISO 27001, NIS2, GDPR/DSGVO, BSI IT-Grundschutz | Kitploit
도구/GitHubGitHub/coolstartnow/isms-builder
Learning & EducationIncident ResponseCurated ResourcesLearning Paths & Courses
GitHubcoolstartnow/isms-builder

isms-builder

자체 호스팅 정보보안 관리 시스템 — ISO 27001, NIS2, GDPR/DSGVO, BSI IT-Grundschutz

저장소 보기
20447381개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트
<!-- © 2026 Claude Hecker — ISMS Builder V 1.40.3 — AGPL-3.0 -->
![ISMS Builder 배너](https://assets.kitploit.com/production/public/readmes/12462/26d3b00b65a4f94cc34514132f1ee5f5c9036e45516880da99fb9501dd79bead.png)
# ISMS Builder

**셀프 호스팅 정보보안 경영시스템 — 오픈 소스, 클라우드 불필요**

[![CI](https://github.com/coolstartnow/isms-builder/actions/workflows/ci.yml/badge.svg)](https://github.com/coolstartnow/isms-builder/actions/workflows/ci.yml)
[![Tests](https://img.shields.io/badge/tests-423%20passing-brightgreen)](https://github.com/coolstartnow/isms-builder/actions)
[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE)
[![Node.js](https://img.shields.io/badge/Node.js-18+-339933?logo=node.js&logoColor=white)](https://nodejs.org)
[![Version](https://raw.githubusercontent.com/coolstartnow/isms-builder/HEAD/docs/badges/version.svg)](CHANGELOG.md)

📖 **[Wiki](https://github.com/coolstartnow/isms-builder/wiki)** — Docker 이미지 사용 &
환경 변수, 아키텍처 & 모듈, FAQ, 기여하기 (DE/EN)

<!-- GDPR NOTE: The four badges above (CI, Tests, License, Node.js) load resources
     from external servers (github.com, shields.io/Cloudflare, img.shields.io).
     When this README is rendered in a browser, these requests transmit the viewer's
     IP address to third parties (incl. US-based servers — GDPR Art. 44 ff.).
     For 100% GDPR-compliant self-hosted documentation, replace these four badge
     lines with their local equivalents from docs/badges/ or remove them entirely. -->

---

> ## ⚠️ 보안 경고: 악성코드를 유포하는 가짜 저장소 및 복제본
> ISMS Builder에는 **패키징된 "릴리스", 설치 프로그램, 다운로드 가능한 ZIP 파일이 없습니다** — 유일한
> 정당한 소스는 이 저장소이며, GitHub에서 일반 소스 코드로 직접 복제하거나 다운로드한 것입니다.
> 이 프로젝트를 사칭하는 **최소 하나의 악성 저장소**를 인지하고 있습니다
> (가짜 README, 스크린샷으로 위장한 ZIP으로 연결되는 가짜 "다운로드" 버튼, Windows 악성코드 로더 포함
> — `.cmd` → `.exe` → Lua-DLL 페이로드 체인). **이 저장소 외의 다른 곳에서 "isms_builder" ZIP/설치 프로그램/exe를
> 다운로드하거나 실행하지 마십시오.**
> 이 프로젝트를 사칭하는 의심스러운 저장소나 사이트를 발견하면
> [이슈](https://github.com/coolstartnow/isms-builder/issues) 또는
> [토론](https://github.com/coolstartnow/isms-builder/discussions)을 열어 알려주시면 신고할 수 있습니다.

---

> **상태: 활발한 개발 중 — 아직 완성된 제품이 아닙니다.**
> 핵심 모듈은 기능하며 사용 중이지만, 일부 기능은 미완성이며
> 플랫폼은 여전히 성장하고 있습니다. 기여, 피드백, 실제 환경에서의
> 테스트를 매우 환영합니다 — 바로 그것이 이 프로젝트가 오픈 소스로 공개된 이유입니다.

---

> 🛡️ **관련 프로젝트: [NIS2 Quick-Check](https://github.com/coolstartnow/nis2-quickcheck)** —
> 무료 독립형 NIS2 자가 점검 (10개 영역 × 5개 질문, 27개 EU 회원국 전체, 24개
> EU 공식 언어 전체). 브라우저에서 완전히 실행되며, 백엔드도 설치도 필요 없습니다. ISMS Builder의
> 일부가 아니며 사용에 필수적이지도 않습니다 — 빠른 첫 방향 설정을 위한 보조 도구일 뿐입니다.

---

## ISMS Builder란 무엇인가?

ISMS Builder는 정보보안 경영시스템(ISMS) 관리를 위한 **셀프 호스팅 웹 플랫폼**입니다.
ISO 27001:2022, NIS2, GDPR/DSGVO, BSI IT-Grundschutz 및 기타 프레임워크에 대해 정책 작성부터 감사 증거까지 전체 컴플라이언스 수명주기를 다룹니다.

**클라우드 없음. SaaS 요금 없음. 데이터는 귀하의 서버에 남습니다.**

> 다섯 자릿수 벤더 계약 없이 실제 ISMS 도구가 필요한 중소기업, IT 팀, 컨설턴트를 위해 설계되었습니다.

---

## 의도된 사용 및 범위

이 프로젝트는 한 명의 ISMS 실무자를 위한 실무 도구로 시작하여 그곳에서 성장했습니다. 이것이
오픈 소스인 이유는 그 작업이 다른 사람들에게 유용할 수 있기 때문이며 — 위장한 상용 제품이기 때문이 아닙니다.
이 점을 명확히 밝히는 것이 이 프로젝트가 귀하의 상황에 맞는지 판단하는 데 도움이 됩니다.

**무엇을 위해 만들어졌는가.** 경영시스템의 문서 — 정책, 위험, 자산,
통제, 증거 — 를 작성하고 유지하는 소규모 ISMS 팀 — 종종 한 명, 때로는 소수 — 입니다.
*계정이 필요한* 사람의 수는 적게 유지될 것으로 예상됩니다.
많은 대상에게 도달하는 것은 계정 없이도 작동합니다: 정책 확인은 토큰 기반 링크로 전송되므로,
수신자는 로그인 없이 문서를 읽고 확인하며, 어떤 사용자 목록에도 나타나지 않습니다.

**귀하에게 기대하는 것.** ISMS Builder는 셀프 호스팅이며, 그로부터 따르는 모든 것은 귀하의 몫입니다:
배포, TLS, 하드닝, 백업, 업데이트, 접근 제어, 그리고 그 안에 저장하는 모든 것에 대한 데이터 보호
의무. 이 프로젝트는 합리적인 기본 구성을 제공하며, 관리형 서비스가 아닙니다.

**무엇이 아닌가.** 호스팅 SaaS 제공, 상용 지원 계약, 서비스 수준
협약은 없습니다. 멀티테넌트 호스팅 제품이 아닙니다. 어떤 표준에 대해서도 귀하를 인증하지 않으며,
법률 자문이 아닙니다 — 작업을 조직하고 증명하는 데 도움을 주지만, 평가는 여전히 귀하와 귀하의 감사자의 몫입니다.

**누가 유지 관리하는가.** 한 사람이 본업과 병행하여 유지 관리합니다. 이슈와 토론은 읽고
답변하며, 보통 며칠 이내입니다; 보안 보고는 우선 처리됩니다. 기능 요청은 환영하며
로드맵을 실제로 형성하지만, 제한된 저녁 시간을 두고 경쟁합니다. 귀하의 조직이
고정된 일정이나 보장된 응답에 의존한다면, 상용 벤더가 정직한 권장 사항입니다 —
그것이 이 프로젝트를 피할 이유가 아니라, 현실적으로 계획할 이유일 뿐입니다.

---

## 스크린샷

| 로그인 | 대시보드 |
|---|---|
| ![Login](https://assets.kitploit.com/production/public/readmes/12462/dad90b27558016928f149aa956d5b5ecef78f7639fe00117fa6e7b6b9c610884.png) | ![Dashboard](https://assets.kitploit.com/production/public/readmes/12462/ad427999a2d247f7b486faff089572c213b6bf809d64946438305c1519e54566.png) |

| 적용 선언서 | 위험 관리 |
|---|---|
| ![SoA](https://assets.kitploit.com/production/public/readmes/12462/19133912a32d643c4db93e977047aa6f93cc85889555a63dc29b986f5290d196.png) | ![Risks](https://assets.kitploit.com/production/public/readmes/12462/19133912a32d643c4db93e977047aa6f93cc85889555a63dc29b986f5290d196.png) |

| GDPR & 데이터 보호 | 자산 관리 |
|---|---|
| ![GDPR](https://assets.kitploit.com/production/public/readmes/12462/453b4e84b6c08241d87e8edd96d803a68b5d56565aee2b317444f30db8d9ffb5.png) | ![Assets](https://assets.kitploit.com/production/public/readmes/12462/053332b35c995bc3a672be7bfd193ca3789f3245e7cdffaa456833fabdec309e.png) |

| 지침 & 문서화 | 보고서 |
|---|---|
| ![Guidance](https://assets.kitploit.com/production/public/readmes/12462/2eb44e0df23e8eba8d70e09a14a18028d1d9dc37e8e734d0c837f2b7fe6ec787.png) | ![Reports](https://assets.kitploit.com/production/public/readmes/12462/765395a2a3cf39ec72a00ad53df464bc79d54a69ca34738bdeb775ff7e1584f3.png) |

> `npm start`를 실행하고 `https://localhost:3000`을 열어 전체 데모 데이터셋을 로컬에서 살펴보십시오.

---

## 기능 개요

| 모듈 | 설명 | 표준 |
|---|---|---|
| **정책 관리** | 템플릿 CRUD, 버전 관리, 수명주기 (초안 → 검토 → 승인 → 보관), 공간 계층, 첨부 파일 | ISO 27001 §5 |
| **적용 선언서** | 8개 프레임워크에 걸친 313개 통제, 인라인 편집, 격차 분석, 교차 매핑 | ISO 27001 A / BSI / NIS2 / EUCS / EUAI / ISO 9001 / CRA |
| **위험 관리** | 위험 등록부, 처리 계획, 감사자 역할 | ISO 27001 §6.1 |
| **보안 목표** | 진행률 표시줄이 있는 KPI 추적, 캘린더 통합 | ISO 27001 §6.2 |
| **GDPR & 개인정보 보호** | VVT, AV 계약, DSFA, TOM, DSAR 대기열, 72시간 타이머, 이메일 알림이 있는 삭제 로그 | DSGVO Art. 13–35 |
| **자산 관리** | 자산 등록부, 편집 가능한 자산 유형, 종속성 상속이 있는 보호 목표 (CIA + 신뢰성), 분류 등급, EoL 추적 | ISO 27001 A.5.9–5.12 |
| **BCM / BCP** | 비즈니스 영향 분석, 연속성 계획, 훈련 | ISO 27001 A.5.29–5.30 / NIS2 |
| **교육 기록** | 교육 카탈로그, 이수 추적, 수료증 업로드 | ISO 27001 A.6.3 |
| **공급업체 관리** | 벤더 등록부, 감사 일정, 위험 평가 | ISO 27001 A.5.19–5.22 |
| **법률 & 계약** | 계약, NDA, 개인정보 처리방침, 만료 캘린더 | |
| **사고 인박스** | CISO 인박스 + **공개 신고 양식** (로그인 불필요) | NIS2 / BSI |
| **거버넌스** | 경영 검토, 조치 추적 | ISO 27001 §9.3 |
| **보고서** | 컴플라이언스 매트릭스 (통제 × 엔터티), 격차 보고서, 검토 주기, CSV 내보내기 | |
| **감사 발견사항** | 발견사항 등록부 (IST→SOLL→위험→권고), 조치 계획, 심각도/상태 추적, FIND-YYYY-NNNN 참조 | ISO 27001 §9.2 |
| **추적성** | 모든 레코드가 SoA 통제 + 정책 문서에 연결 — 양방향 | |
| **시맨틱 검색** | Ollama (nomic-embed-text)를 통한 로컬 AI 검색, 키워드 폴백 포함 | |
| **멀티 엔터티** | 기업 구조 트리, 통제 및 정책에 대한 엔터티별 적용 가능성 | |
| **다국어 UI & 데모 데이터** | 전체 UI 및 데모 콘텐츠가 🇩🇪 DE / 🇬🇧 EN / 🇫🇷 FR / 🇳🇱 NL로 제공; 관리자가 사용 가능 언어 제어 | |

---

### ⚠ 중요: ISO 통제는 관리자가 수동으로 설치해야 합니다

> **ISO 27001:2022, ISO 9000:2015, ISO 9001:2015**는 국제표준화기구
> (ISO, © ISO)가 발행한 저작권 보호 표준입니다. 통제 정의
> (제목, 설명, 요구사항 텍스트)는 이 소프트웨어에 **포함되지 않으며** 유효한 ISO
> 라이선스 없이 **재배포되어서는 안 됩니다**.

**실제로 이것이 의미하는 바:**
ISO 27001, ISO 9000, ISO 9001용 SoA 모듈은 통제 콘텐츠 없이 제공됩니다.
관리자는 이 프레임워크를 사용하기 전에 통제를 **수동으로 가져와야 합니다**:

1. [iso.org](https://www.iso.org/) 또는 공인 국가 기관에서 표준의 라이선스 사본을 취득합니다
2. 통제 정의가 담긴 JSON 파일을 준비합니다 (형식은 `scripts/import-iso-controls.sh`에 문서화됨)
3. 가져오기 스크립트를 실행합니다:   ```bash
   bash scripts/import-iso-controls.sh path/to/iso-controls.json
   ```
4. ISMS Builder 서버를 재시작합니다

> **기본 제공 프레임워크(ISO 라이선스 불필요):**
> BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act, CRA는 공개적으로 이용 가능한
> EU 법률 및 독일 연방 간행물을 기반으로 하며 완전히 사전 설치되어 있습니다.

해당 표준에 대한 유효한 라이선스 없이 ISO 프레임워크 모듈을 운영하는 것은
전적으로 운영자의 책임입니다. ISMS Builder 프로젝트와 그 기여자는 ISO 보호 콘텐츠의
무허가 사용에 대해 어떠한 책임도 지지 않습니다.

---

## 빠른 시작```bash
git clone https://github.com/coolstartnow/isms-builder.git
cd isms-builder
npm install
cp .env.example .env          # set JWT_SECRET to a long random string
npm start                     # http://localhost:3000
```
**`[email protected]` / `adminpass`**로 로그인합니다. 첫 로그인 시 **데모 데이터 언어**(🇩🇪 DE / 🇬🇧 EN / 🇫🇷 FR / 🇳🇱 NL)를 선택하거나 빈 시스템으로 시작하라는 메시지가 표시됩니다. 로그인 후 즉시 admin 비밀번호를 변경하세요.

HTTPS를 사용하는 프로덕션 환경의 경우:```bash
# .env
JWT_SECRET=your-very-long-random-secret
STORAGE_BACKEND=json
SSL_CERT_FILE=/etc/ssl/certs/your.crt
SSL_KEY_FILE=/etc/ssl/private/your.key
```
**데모 데이터로 평가한 후 실제 운영에 들어가시나요?** 새로 설치하는 대신 대화형 프로덕션 준비 도구를 실행하세요 — 이 도구는 데모/테스트 콘텐츠를 모듈별로(또는 한 번에 모두) 지워주므로, 이미 입력한 실제 데이터(예: 위험, 자산)를 다시 입력할 필요가 없습니다:```bash
bash stop.sh
node scripts/prepare-production.js
bash start.sh
```
It always creates a backup (`data.bak.<timestamp>/`, next to your `data/` directory) before
changing anything, and never touches `STORAGE_BACKEND` — unlike the in-app "Demo Reset" admin
action, which is meant for the demo instance and still switches to `sqlite` for historical reasons
(see [Issue #42](https://github.com/coolstartnow/isms-builder/issues/42)).

---

## Docker

Every release is published as a GitHub Package in the GitHub Container Registry, for
`linux/amd64` and `linux/arm64` — tagged `:latest` and `:<version>` (e.g. `:1.37.5.2`):```bash
docker compose up -d
# App runs at http://localhost:3000
```
또는 Compose 없이 (`data/`는 반드시 바인드 마운트여야 합니다 — 데이터는 이미지에 절대 포함되지 않습니다):```bash
docker run -d --name isms-builder -p 3000:3000 \
  -e JWT_SECRET="$(openssl rand -hex 32)" \
  -v "$PWD/data:/app/data" \
  ghcr.io/coolstartnow/isms-builder:latest
```
이것은 기본값으로, 데이터를 `./data`에 일반 JSON 파일로 저장합니다 — 데이터베이스 컨테이너가 전혀 필요하지 않습니다. 소규모 팀에 권장되는 설정이며, 위의 두 명령이 사용하는 방식입니다.

**JSON 대신 PostgreSQL(또는 MariaDB) 사용하기.** 이미지는 이를 기본적으로 지원하지만 — 위의 JSON 설정과 달리 — 실제 데이터베이스인 두 번째 컨테이너와 앱이 데이터베이스에 접근하는 방법을 알려주는 여러 환경 변수가 필요합니다. 이 저장소를 클론하지 않고 이미지만 가져온 경우(`docker pull ghcr.io/coolstartnow/isms-builder`), 해당 변수 이름들은 기본적으로 어디에도 표시되지 않습니다 — 이들이 문서화된 `docker-compose.yml`과 `.env.example`은 이 Git 저장소의 파일이며 이미지의 일부가 아닙니다. 이 섹션은 그 정보가 저장소에만 있는 비밀이 되지 않도록 존재합니다.

`isms-builder` 이미지 자체는 데이터베이스 서버를 절대 포함하지 않습니다 — `postgres:17`(또는 `mariadb:11`)은 이 프로젝트의 테이블에 대해 전혀 알지 못하는, Docker Hub의 완전히 일반적이고 빈 데이터베이스 엔진입니다. 해당 테이블(위험, 자산, SoA 통제 등)은 애플리케이션이 시작되어 빈 데이터베이스를 발견하는 순간 애플리케이션 자체에 의해 자동으로 생성됩니다 — 수동 SQL 가져오기도, 직접 실행해야 하는 별도의 마이그레이션 단계도 없습니다. 전체 메커니즘을 알고 싶다면 아래의 "데이터베이스 스키마는 어떻게 생성되나요?"를 참조하세요.

두 개의 컨테이너, 하나의 공유 Docker 네트워크, 그런 다음 앱에 데이터베이스를 찾을 위치를 알려줍니다:```bash
# 1) An isolated network so the two containers can reach each other by name
docker network create isms-net

# 2) The database — empty until the app first connects and creates its tables
docker run -d --name isms-postgres --network isms-net \
  -e POSTGRES_DB=isms_builder \
  -e POSTGRES_USER=isms \
  -e POSTGRES_PASSWORD="$(openssl rand -hex 16)" \
  -v isms-postgres-data:/var/lib/postgresql/data \
  postgres:17-alpine

# 3) The app, pointed at that database by container name (isms-postgres) via
#    Docker's built-in DNS on the shared network — no host/port juggling needed
docker run -d --name isms-builder --network isms-net -p 3000:3000 \
  -e JWT_SECRET="$(openssl rand -hex 32)" \
  -e STORAGE_BACKEND=postgres \
  -e DB_HOST=isms-postgres \
  -e DB_PORT=5432 \
  -e DB_USER=isms \
  -e DB_PASS="<same password as POSTGRES_PASSWORD above>" \
  -e DB_NAME=isms_builder \
  ghcr.io/coolstartnow/isms-builder:latest
```
각 변수의 의미:

| 변수 | 목적 |
|---|---|
| `STORAGE_BACKEND` | PostgreSQL의 경우 `postgres`(또는 `pg`), MariaDB/MySQL의 경우 `mariadb`. 기본 JSON 설정을 사용하려면 설정하지 않거나 `json`으로 둡니다. |
| `DB_HOST` | 데이터베이스 컨테이너의 호스트 이름. 공유 Docker 네트워크에서는 컨테이너의 `--name`만 지정하면 됩니다 — Docker가 자동으로 해석합니다. |
| `DB_PORT` | PostgreSQL의 경우 `5432`, MariaDB의 경우 `3306`. |
| `DB_USER` / `DB_PASS` / `DB_NAME` | 데이터베이스 컨테이너에서 설정한 값(위의 `POSTGRES_USER`/`POSTGRES_PASSWORD`/`POSTGRES_DB` 또는 MariaDB의 동등한 변수)과 일치해야 합니다. |

MariaDB의 경우 `postgres:17-alpine`을 `mariadb:11`로 바꾸고, 2단계에서 `MARIADB_DATABASE` /
`MARIADB_USER` / `MARIADB_PASSWORD` 변수를 사용하며, 3단계에서 `STORAGE_BACKEND=mariadb` /
`DB_PORT=3306`을 사용합니다. 이 프로젝트가 인식하는 모든 환경 변수의 전체 상호 참조 목록 —
여기서 다루지 않은 것들(SSL, 리버스 프록시 신뢰, SMTP, 2FA 등)을 포함 — 은 이 저장소의
[`.env.example`](https://github.com/coolstartnow/isms-builder/blob/main/.env.example)에 있습니다.

Compose 사용자는 이를 자동으로 얻을 수 있습니다: `docker-compose.yml`에는 이미 `mariadb`와 `postgres`
서비스 프로필이 포함되어 있으며(기본적으로 주석 처리되어 있고, 동등한 환경 변수 설명도 함께 있음) —
`docker compose --profile postgres up -d`를 실행하면 두 컨테이너가 자동으로 연결되어 시작되므로
수동 네트워킹이나 비밀번호 복사-붙여넣기가 필요하지 않습니다.

**데이터베이스 스키마는 어떻게 생성되나요?** `postgres:17`도 `mariadb:11` 이미지도 이 프로젝트에 대해
아무것도 알지 못합니다 — 이들은 Docker Hub에서 가져온 일반적이고 빈 데이터베이스 엔진일 뿐입니다.
가져올 SQL 덤프 파일도 없고 수동으로 실행할 별도의 마이그레이션 명령도 없습니다.
대신 `isms-builder` 컨테이너가 시작되어 빈 데이터베이스에 연결되는 순간, 자체 애플리케이션 코드
(데이터베이스 이미지가 아님)가 필요한 모든 테이블을 즉석에서 생성합니다 — 자세한 내용은
[`server/db/knexDatabase.js`](https://github.com/coolstartnow/isms-builder/blob/main/server/db/knexDatabase.js)를 참조하세요: 테이블 정의 목록이 있으며,
각각 `hasTable()`로 확인하고 없으면 `createTable()`로 생성하며, 이 모든 것이 앱이 HTTP 요청을
받아들이기 전에 이루어집니다. 따라서 이는 멱등적입니다 — 최초 시작 시 아무것도 없는 상태에서 전체
스키마를 구축하고, 동일한 데이터베이스에 대한 이후의 모든 재시작은 테이블이 이미 존재하므로
조용한 무작업(no-op)입니다. 이것은 SQLite, MariaDB 11, PostgreSQL 17에 대해 실제 검증된
(자세한 내용은 [#70](https://github.com/coolstartnow/isms-builder/issues/70) 참조) 수정되지 않은
동일한 메커니즘입니다.

소스에서 빌드하려면 대신 `docker-compose.yml`의 `build:` 블록을 주석 해제하고
`docker compose up -d --build`를 실행하세요.

이미지에는 서명된 빌드 출처 증명(attestation)이 포함되어 있습니다:```bash
gh attestation verify oci://ghcr.io/coolstartnow/isms-builder:latest --owner coolstartnow
```
---

## 요구 사항

- **Node.js 18+** (테스트 완료: 18, 20, 22)
- npm 9+
- (선택 사항) Docker + Docker Compose
- (선택 사항) 로컬 AI 시맨틱 검색을 위한 [Ollama](https://ollama.ai)

---

## 구성 (`.env`)

| 변수 | 기본값 | 설명 |
|---|---|---|
| `JWT_SECRET` | *(필수)* | JWT 서명용 시크릿 — 32자 이상의 무작위 문자 사용 |
| `PORT` | `3000` | HTTP/HTTPS 수신 포트 |
| `STORAGE_BACKEND` | `json` | `json` (개발/데모) 또는 `sqlite` (프로덕션) |
| `SSL_CERT_FILE` | — | TLS 인증서 경로 → HTTPS 활성화 |
| `SSL_KEY_FILE` | — | TLS 개인 키 경로 |
| `DATA_DIR` | `./data` | 데이터 디렉터리 재정의 (Docker 볼륨) |
| `SMTP_HOST` | — | 이메일 알림용 SMTP 서버 |
| `SMTP_PORT` | `587` | SMTP 포트 |
| `SMTP_USER` | — | SMTP 사용자 이름 |
| `SMTP_PASS` | — | SMTP 비밀번호 |
| `SMTP_FROM` | — | 알림 발신자 주소 |

---

## 아키텍처```
server/
  index.js          — Express app setup, router mounts
  auth.js           — JWT auth, RBAC ranks, session
  routes/           — 17 Express route modules (one per domain)
  db/               — Data stores (jsonStore / sqliteStore / orgSettingsStore / …)
  ai/               — Semantic search (embedder, embeddingStore, lexicalSearch)
  reports.js        — Report generation logic
ui/
  index.html        — SPA shell (Atlassian Dark Theme)
  app.js            — All render functions, ~6000 lines vanilla JS
  style.css         — CSS variables, dark theme
data/               — JSON files / SQLite DB (gitignored)
docs/
  ISMS-build-documentation.md  — Full architecture reference
  architecture/                — C4 diagrams, data model, OpenAPI 3.0.3 spec
tests/              — Jest + Supertest (176 tests, --runInBand)
```
- **인증:** JWT 쿠키(`sm_session`), bcrypt 비밀번호, TOTP 2FA(조직 전체에 강제 적용 가능)
- **RBAC:** `reader` → `editor` / `dept_head` → `contentowner` / `auditor` → `admin`
- **영속성:** JSON 파일(기본/데모) 또는 `better-sqlite3`를 통한 SQLite
- **AI:** 선택적 로컬 Ollama(nomic-embed-text), 키워드 검색은 항상 폴백으로 사용 가능
- **감사 로그:** 모든 생성/수정/삭제/로그인 작업이 기록되며, 필터링 및 내보내기 가능

C4 다이어그램, 전체 데이터 모델, OpenAPI 3.0.3 명세(80개 이상의 엔드포인트)는 [`docs/architecture/`](https://github.com/coolstartnow/isms-builder/blob/main/docs/architecture)를 참조하세요.

---

## 테스트 실행

> **참고:** `tests/` 아래의 테스트 스위트는 작성자의 개인 개발 테스트로,
> 프로젝트와 함께 투명성을 위해 제공됩니다. 이는 **애플리케이션 자체의 일부가 아니며**
> 앱을 실행하는 데 **필요하지 않습니다**. 이 테스트는 내부 API 동작을 다루며, 격리된
> 테스트 환경에만 존재하는 하드코딩된 테스트 자격 증명을 사용합니다 — 이는 어떤
> 프로덕션 또는 데모 데이터와도 관련이 없습니다.```bash
npm test                  # runs all 423 tests
npm run preflight         # exactly what CI gates on (tests + pinning + audit)
npm test -- --verbose     # with test names
```
테스트는 격리된 임시 디렉터리를 사용합니다 — 운영 데이터는 전혀 건드리지 않습니다.

---

## 기여하기

기여는 언제나 환영합니다! 다음 내용은 [CONTRIBUTING.md](https://github.com/coolstartnow/isms-builder/blob/main/CONTRIBUTING.md)를 참고하세요:

- 개발 환경 설정 (첫 테스트 실행까지 5분)
- 코드 스타일 및 규칙
- 좋은 이슈 또는 PR을 여는 방법

**보안 문제를 발견하셨나요?** 공개 이슈를 열지 마시고
[비공개 취약점 신고](https://github.com/coolstartnow/isms-builder/security/advisories/new)를 이용해 주세요.
[SECURITY.md](https://github.com/coolstartnow/isms-builder/blob/main/SECURITY.md)에 범위, 안전 항변(safe harbour), 그리고 현실적으로 기대할 수 있는 내용이 설명되어 있습니다.

**Good first issues**는 이슈 트래커에서 [`good first issue`](https://github.com/coolstartnow/isms-builder/issues?q=label%3A%22good+first+issue%22) 라벨이 붙어 있습니다.

---

## 로드맵

| 상태 | 기능 |
|---|---|
| ✅ 완료 | 시맨틱 검색 (Ollama / nomic-embed-text) |
| ✅ 완료 | SQLite 백엔드, Docker, CI/CD |
| ✅ 완료 | GDPR 삭제 로그 이메일 알림 |
| ✅ 완료 | 다국어 데모 번들 (DE / EN / FR / NL) |
| ✅ 완료 | 조치 계획이 포함된 감사 발견사항 모듈 (V 1.37.2.0) |
| ✅ 완료 | FR/NL 지침 번역 + 관리자 언어 구성 (V 1.37.2.0) |
| ✅ 완료 | MariaDB/MySQL 백엔드 (`STORAGE_BACKEND=mariadb`, V 1.37.2.1) |
| ✅ 완료 | 스캐너 → 위험 초안 (Greenbone/OpenVAS XML + PDF 가져오기, V 1.37.2.0) |
| ✅ 완료 | 정책 확인 — 직원이 감사 추적과 함께 정책을 디지털로 확인 (V 1.37.2.0) |
| ✅ 완료 | 지침 CRUD — 자체 문서 생성, 편집 및 업로드 (V 1.37.2.0) |
| ✅ 완료 | 지침 검색 — 발췌문이 포함된 범주 간 전체 텍스트 검색 (V 1.37.2.0) |
| ✅ 완료 | 자산 보호 목표 — CIA + 신뢰성 (1–4), 의존성 및 BSI 최대 원칙 상속 (V 1.37.2.0) |
| ✅ 완료 | NIS2 Art. 21 거버넌스 체크리스트 (30개 항목) 및 자동 알림이 포함된 Art. 23 보고 기한 (V 1.37.2.0) |
| ✅ 완료 | PostgreSQL 백엔드 (`STORAGE_BACKEND=pg`) — MariaDB와 동일한 Knex 저장소 계층, 전체 `docker compose` 경로를 포함하여 실제 PostgreSQL 17 인스턴스에 대해 검증됨 (V 1.37.5) |
| ✅ 완료 | ownCloud / Nextcloud 통합 — 승인된 정책이 WebDAV를 통해 PDF로 자동 게시, 선택적 즐겨찾기/공개 링크 가시성, 실제 NextcloudPi 인스턴스에 대해 실시간 검증됨 (#66, V 1.37.5.1) |
| ✅ 완료 | 모든 릴리스 후 GitHub Container Registry에 게시되는 Docker 이미지 (`ghcr.io/coolstartnow/isms-builder`, `linux/amd64` + `linux/arm64`, 서명된 빌드 출처) — @bucherfa 기여 (#71, V 1.40.0). 유지보수 노력 실험: 예상보다 관리 부담이 크면 다시 제거됩니다. |
| 🔜 다음 | AI 정책 어시스턴트 — Ollama가 제목 + 프레임워크로부터 정책 내용 초안 작성 |
| 🔜 다음 | 예약 보고서 — 이메일로 전달되는 주간/월간 컴플라이언스 보고서 |
| 🔜 다음 | 감사 로그 이상 탐지 (LLM 배치) |
| 🚀 이후 | 정량적 위험 점수 산정 (€-값, FAIR 영감) |
| 🚀 이후 | 감사인 협업 포털 — 감사인을 위한 외부 읽기 전용 접근 |
| 🚀 이후 | 정책 격차 분석 (LLM) |
| 🏁 V 2.x | 구성 가능한 지침 범주 — 관리자가 사용자 정의 범주 정의 (예: 워크플로, 조직 문서) |

---

## 저자 소개

**Claude Hecker**는 35년 이상 IT 분야에서 일해 왔습니다. 약 15년간 CIO로 근무한 후, CISO 및 데이터 보호 책임자(DSO/DSB) 역할로 전환했습니다. 경력 동안 그는 유럽의 대기업을 위해 전사적 IT 인프라와 광역 네트워크 연결(VPN, MPLS)을 설계하고 구현했으며 — 여러 사이트와 관할권에 걸친 안정적이고 안전한 운영을 책임졌습니다.

ISMS Builder는 바로 그 경험에서 직접 탄생했습니다: 실제 감사와 실제 규제 압박 속에서 현실 세계의 컴플라이언스 ISMS를 구축하고 유지하는 것. 이 도구는 실무자가 실제로 필요로 하는 것을 반영합니다 — 제품 관리자가 필요하다고 생각하는 것이 아니라.

**왜 오픈 소스인가?**
중소기업은 다섯 자릿수 라이선스 비용 없이 적절한 ISMS 플랫폼에 접근할 자격이 있습니다. 어떤 도구를 선택하든 온보딩 노력은 실제로 듭니다 — 하지만 그 비용이 벤더 종속이나 자체 인프라를 떠나는 데이터로 인해 더 커져서는 안 됩니다. 이 프로젝트는 소프트웨어 자유와 귀하의 컴플라이언스 데이터는 귀하의 것이라는 원칙을 지지합니다.

---

## 표준 참조 고지

이 소프트웨어는 상호운용성 및 컴플라이언스 관리 목적으로만 공개된 표준의 통제 식별자와 짧은 제목을 참조합니다.

- **ISO/IEC 27001, ISO 9000, ISO 9001**은 국제표준화기구(ISO)가 발행한 표준입니다. 이 표준들의 통제 정의는 이 소프트웨어 배포판에 **포함되지 않습니다** — ISO 저작권은 통제 텍스트의 재배포를 허용하지 않습니다. 사용자는 자체 JSON 파일을 제공해야 합니다 (위 섹션 및 `scripts/import-iso-controls.sh` 참조). 표준은 [ISO](https://www.iso.org/) 또는 공인 국가 배포처에서 구해야 합니다.
- **BSI IT-Grundschutz** 자료는 독일 연방정보보안청(BSI)이 발행하며 [bsi.bund.de](https://www.bsi.bund.de)에서 무료로 이용할 수 있습니다.
- **NIS2, CRA, EUCS, EU AI Act**는 EU 법률이며 [eur-lex.europa.eu](https://eur-lex.europa.eu)를 통해 공개적으로 이용할 수 있습니다.

---

## 라이선스

Copyright (C) 2026 Claude Hecker

이 프로그램은 [GNU Affero General Public License v3.0](https://github.com/coolstartnow/isms-builder/blob/main/LICENSE)에 따라 라이선스가 부여된 자유 소프트웨어입니다.

수정된 버전을 네트워크 서비스로 운영하는 경우, 해당 서비스의 사용자에게 전체 소스 코드를 제공해야 합니다 (AGPL §13).

이 프로젝트는 MIT, BSD-2-Clause 및 Apache-2.0 라이선스의 서드파티 구성 요소를 포함합니다. 전체 저작자 표시 및 라이선스 텍스트는 [THIRD-PARTY-LICENSES.md](https://github.com/coolstartnow/isms-builder/blob/main/THIRD-PARTY-LICENSES.md)를 참조하세요.
도구 다운로드