Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions apps/frontend/src/locales/ko/admin.json
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@
"refresh": "새로 고침"
},
"confirm": {
"cancel": "이 스캔을 취소하시겠습니까? Celery 작업이 revoke 되고 상태가 cancelled로 변경됩니다."
"cancel": "이 스캔을 취소하시겠습니까? Celery 작업이 취소되고 상태가 cancelled로 변경됩니다."
},
"drawer": {
"title": "스캔 {{id}}",
Expand Down Expand Up @@ -348,32 +348,32 @@
}
},
"eol": {
"heading": "endoflife.date 스냅숏",
"heading": "endoflife.date 스냅샷",
"status": {
"ok": "정상",
"stale": "오래됨",
"skipped": "건너뜀",
"disabled": "비활성"
},
"stale_note": "스냅숏이 {{days}}일 지났습니다 — 릴리즈를 업그레이드하거나 scripts/refresh_eol_snapshot.py로 갱신하십시오.",
"stale_note": "스냅샷이 {{days}}일 지났습니다 — 릴리스를 업그레이드하거나 scripts/refresh_eol_snapshot.py로 갱신하십시오.",
"skipped_reason": "마지막 갱신 건너뜀: {{reason}}",
"kpi": {
"snapshot_date": "스냅숏 날짜",
"snapshot_date": "스냅샷 날짜",
"snapshot_age": "{{days}}일 경과",
"flagged_total": "지원 종료 컴포넌트",
"stamped_cleared": "최근 기록 / 해제",
"next_refresh": "다음 실행"
},
"origin": {
"vendored": "릴리즈에 벤더링됨",
"vendored": "릴리스에 포함됨",
"feed": "피드에서 수집됨"
},
"footer": {
"origin": "데이터셋",
"products": "제품 수",
"refresh": "실시간 갱신",
"refresh_on": "켬 ({{host}})",
"refresh_off": "끔 — 벤더 스냅숏만 사용"
"refresh_off": "끔 — 저장소에 포함된 스냅샷만 사용"
}
},
"backup": {
Expand Down Expand Up @@ -408,7 +408,7 @@
"restore": {
"warning": "복원 시 사용자, 프로젝트, 스캔을 포함한 모든 데이터가 덮어써집니다. 되돌릴 수 없습니다.",
"type_to_confirm": "확인하려면 '{{token}}' 을(를) 입력하세요",
"queued_banner": "복원이 큐에 등록되었습니다. 백엔드가 일시 중지됩니다; 30초 후 새로고침하세요."
"queued_banner": "복원이 큐에 등록되었습니다. 백엔드가 일시 중지됩니다. 30초 후 새로 고치세요."
},
"toast": {
"manual_triggered": "수동 백업이 큐에 등록되었습니다.",
Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/src/locales/ko/approvals.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"start_review": "검토 시작",
"approve": "승인",
"reject": "거절",
"refresh": "새로고침",
"refresh": "새로 고침",
"cancel": "취소",
"confirm": "확인",
"previous": "이전",
Expand Down
20 changes: 10 additions & 10 deletions apps/frontend/src/locales/ko/project_detail.json
Original file line number Diff line number Diff line change
Expand Up @@ -134,14 +134,14 @@
"overview": {
"eol_chip": {
"title": "지원 종료된 컴포넌트 {{count}}개",
"body": "지원 종료된 릴리즈에는 업스트림 수정이 제공되지 않아, 이후 발견되는 Critical CVE에 패치가 없습니다.",
"body": "지원 종료된 릴리스에는 업스트림 수정이 제공되지 않아, 이후 발견되는 Critical CVE에 패치가 없습니다.",
"link": "EOL 컴포넌트 보기"
},
"info_card": {
"title": "프로젝트 정보",
"description": "설명",
"no_description": "설명이 설정되지 않았습니다.",
"git_url": "리포지토리",
"git_url": "저장소",
"no_git_url": "git URL이 설정되지 않았습니다.",
"default_branch": "기본 브랜치",
"visibility": "공개 범위",
Expand Down Expand Up @@ -233,7 +233,7 @@
},
"errors": {
"title": "개요를 불러오지 못했습니다.",
"detail": "페이지를 새로고침해 주세요."
"detail": "페이지를 새로 고쳐 주세요."
},
"outdated_chip": {
"title": "최신 패치보다 뒤처진 컴포넌트 {{count}}개",
Expand Down Expand Up @@ -266,27 +266,27 @@
},
"eol": {
"label": "EOL",
"tooltip": "이 릴리즈 사이클은 공표된 지원 종료(endoflife.date)를 지났습니다 — 업스트림 수정이 더 이상 제공되지 않습니다.",
"tooltip": "이 릴리스 사이클은 공표된 지원 종료(endoflife.date)를 지났습니다 — 업스트림 수정이 더 이상 제공되지 않습니다.",
"tooltip_with_date": "{{date}}부터 지원 종료(endoflife.date) — 업스트림 수정이 더 이상 제공되지 않습니다.",
"since": "{{date}}부터",
"state": {
"eol": "지원 종료됨",
"supported": "지원 중 (endoflife.date 추적 대상)",
"unknown": "추적 대상이나 릴리즈 사이클을 판정할 수 없음",
"unknown": "추적 대상이나 릴리스 사이클을 판정할 수 없음",
"untracked": "endoflife.date 추적 대상이 아님"
}
},
"currency": {
"label": "뒤처짐",
"tooltip": "이 릴리즈 라인에 더 새로운 패치가 있습니다 — 이 버전은 최신 패치보다 뒤처져 있습니다.",
"tooltip": "이 릴리스 라인에 더 새로운 패치가 있습니다 — 이 버전은 최신 패치보다 뒤처져 있습니다.",
"tooltip_with_version": "최신 패치 {{version}}이(가) 있습니다 — 이 버전은 그보다 뒤처져 있습니다.",
"latest": "최신 {{version}}",
"latest_with_date": "최신 {{version}} ({{date}})",
"state": {
"current": "릴리즈 라인의 최신 패치 사용 중",
"outdated": "릴리즈 라인의 최신 패치보다 뒤처짐",
"current": "릴리스 라인의 최신 패치 사용 중",
"outdated": "릴리스 라인의 최신 패치보다 뒤처짐",
"unknown": "추적 대상이나 최신 패치를 판정할 수 없음",
"untracked": "이 컴포넌트의 릴리즈 라인 정보가 없음"
"untracked": "이 컴포넌트의 릴리스 라인 정보가 없음"
}
},
"license": {
Expand Down Expand Up @@ -590,7 +590,7 @@
"unknown": "미분석"
},
"sla_label": "SLA",
"sla_any": "전체",
"sla_any": "SLA 상태 전체",
"report_label": "보고서",
"download_pdf": "PDF 보고서 다운로드",
"download_pdf_generating": "생성 중…",
Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/src/locales/ko/projects.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
"description_placeholder": "간단한 설명 (선택사항)",
"git_url_label": "Git URL",
"git_url_placeholder": "https://github.com/org/repo",
"git_url_hint": "선택. 비워 두면 스캔 시 .zip 또는 폴더를 업로드할 수 있습니다. HTTPS·SSH(git@host:…)·git+ssh URL을 지원하며, private 저장소는 URL에 자격증명을 포함해야 합니다.",
"git_url_hint": "선택. 비워 두면 스캔 시 .zip 또는 폴더를 업로드할 수 있습니다. HTTPS·SSH(git@host:…)·git+ssh URL을 지원하며, 비공개 저장소는 URL에 자격증명을 포함해야 합니다.",
"default_branch_label": "기본 브랜치",
"default_branch_placeholder": "main (선택)",
"team_label": "팀",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,26 +51,26 @@ sidebar_position: 3

포털은 `backend`, `worker`, `beat`, `frontend`, `traefik`을 별도 프로브하지 않습니다. 이들의 liveness는 암묵적입니다 — 대시보드가 렌더되면 backend 가동 중, `celery` 행이 `ok`이면 worker(와 worker가 의존하는 broker)도 도달 가능.

### endoflife.date 스냅숏 패널 {#eol-panel}
### endoflife.date 스냅샷 패널 {#eol-panel}

<!-- docs-uat: id=eol-health-api kind=api auth=admin url=/v1/admin/eol/health expect=status:200 tier=nightly -->
Trivy DB·KEV 피드 패널 아래의 **endoflife.date 스냅숏** 패널은 Components 탭
Trivy DB·KEV 피드 패널 아래의 **endoflife.date 스냅샷** 패널은 Components 탭
[EOL 배지](../user-guide/components-and-licenses.md#end-of-life-flagging)의
데이터셋 상태를 보여줍니다.

- **스냅숏 날짜** — 유효 데이터셋의 생성일(릴리즈에 벤더링된 스냅숏과,
`EOL_REFRESH_ENABLED=true` 인 경우 마지막으로 수집한 스냅숏 중 더 최신).
180일이 지나면 주황색 **오래됨** 배지로 격상됩니다 — 릴리즈를
업그레이드하거나 `python3 scripts/refresh_eol_snapshot.py`로 스냅숏을
- **스냅샷 날짜** — 유효 데이터셋의 생성일(릴리스에 포함된 스냅샷과,
`EOL_REFRESH_ENABLED=true` 인 경우 마지막으로 수집한 스냅샷 중 더 최신).
180일이 지나면 주황색 **오래됨** 배지로 격상됩니다 — 릴리스를
업그레이드하거나 `python3 scripts/refresh_eol_snapshot.py`로 스냅샷을
다시 만드십시오.
- **지원 종료 컴포넌트** — 지원 종료를 지난 카탈로그 컴포넌트 버전의 실시간
개수.
- **최근 기록 / 해제** — 주간 beat의 재기록 패스가 마지막 실행에서 한 일.
재기록은 실시간 수집이 꺼져 있어도 실행됩니다 — 순수 로컬 패스로, 더 새
벤더 스냅숏을 기존 행에 반영하고 목록에서 빠진 제품의 기록을 지웁니다.
벤더 스냅샷을 기존 행에 반영하고 목록에서 빠진 제품의 기록을 지웁니다.
- **다음 실행** — 라이브 Celery beat 스케줄에서 유도(기본 일요일 02:15 UTC).

푸터에는 데이터셋 출처(벤더링/피드 수집)와 실시간 갱신 여부가 표시됩니다.
푸터에는 데이터셋 출처(저장소 포함/피드 수집)와 실시간 갱신 여부가 표시됩니다.
실시간 갱신은 **기본 꺼짐**입니다 — [환경변수](../reference/env-variables.md)의
`EOL_REFRESH_ENABLED`를 참고하십시오.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ CI가 지나치게 잦다면, 스캔 단계를 의존성 매니페스트(`packag
| `main`·보호 브랜치 | push마다 스캔 | live 스냅샷을 정확하게 유지합니다. |
| 릴리스 태그 | `release` 레이블로 한 번 스캔 | 배포된 버전의 영구 SBOM. |
| 변동이 적은 장수 서비스 | PR + push만, 예약 없음 | 새 CVE는 beat가 처리하고 소스는 거의 안 움직입니다. |
| 벤더링·외부 도입 | 벤더링 트리 변경 시 스캔 | 패키지 매니저 이벤트가 스스로 발생하지 않습니다. |
| 외부 코드 직접 포함 | 포함한 트리가 바뀔 때 스캔 | 패키지 매니저 이벤트가 스스로 발생하지 않습니다. |

**예약** 스캔이 슬롯 값을 하는 유일한 경우는, 커밋 *없이* 의존성이 흐르는 프로젝트입니다 — 예를 들어 빌드 시점에 유동 버전 범위를 해석하는 빌드입니다. 그런 경우 주간 예약 스캔이 관측된 트리를 다시 고정합니다. 그 외에는 소스 변경 트리거와 재매칭 beat가 더 낫습니다.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ curl -H "Authorization: Bearer $TRUSTEDOSS_API_KEY" \
}
```

대응표 결합은 벤더링된 카탈로그를 상대로 읽기 시점에 수행되므로, 이전 스캔이 저장한 판정도 다시 스캔하지 않고 갱신된 대응 관계를 반영합니다. 실패한 필수 검사는 프레임워크의 `total`에만 셉니다 — 필수 검사 실패는 이미 제출 전체를 fail로 만들었으므로, 대응표가 두 번째 판정이 되지는 않습니다.
대응표 결합은 저장소에 포함된 카탈로그를 상대로 읽기 시점에 수행되므로, 이전 스캔이 저장한 판정도 다시 스캔하지 않고 갱신된 대응 관계를 반영합니다. 실패한 필수 검사는 프레임워크의 `total`에만 셉니다 — 필수 검사 실패는 이미 제출 전체를 fail로 만들었으므로, 대응표가 두 번째 판정이 되지는 않습니다.

:::note 컴플라이언스 판정이 아닙니다
대응표는 **문서화 준비를 돕는 자료**입니다. TRUSCA는 EU 사이버복원력법, EU 인공지능법, AI 기본법을 비롯한 어떤 규제의 준수 여부도 인증하거나 판정하지 않습니다. 대응표는 SBOM이 담을 수 있는 문서화 항목만 다루며, 공정성·편향 평가, 위험관리, 인간 감독처럼 SBOM으로 표현할 수 없는 의무는 범위 밖이라 별도 문서로 이행해야 합니다. 응답에는 이 면책 문구가 그대로 실리며, 롤업을 특정 제품의 법적 의무에 비추어 해석하는 일은 사람이 해야 합니다.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ admin-guide 아래에 있습니다.
...
```

이는 버전별 문서 스냅숏(Docusaurus가 소규모 사이트에는 권하지 않는)의 가벼운
이는 버전별 문서 스냅샷(Docusaurus가 소규모 사이트에는 권하지 않는)의 가벼운
대안입니다. **새** 기능 섹션이 출하될 때 붙이세요 — 기존 트리 전체에 소급할
필요는 없습니다. [릴리스 노트](../release-notes/v0.14.0.md)가 버전별 전체
체인지로그로 남고, 이 표기는 가이드를 읽는 독자가 필요로 하는 "언제부터"를
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ pull해서 실행해봐야만 설치 가능 여부를 증명할 수 있기 때

## 릴리스 절차

1. 벤더링된 endoflife.date 스냅숏을 갱신해 릴리스가 최신 수명 주기 데이터를
1. 저장소에 포함된 endoflife.date 스냅샷을 갱신해 릴리스가 최신 수명 주기 데이터를
담게 합니다(EOL 판정은 이 파일에서 오프라인으로 스탬프됩니다).
`apps/backend`에서 `python3 scripts/refresh_eol_snapshot.py`를 실행하고,
갱신된 스냅숏을 릴리스 준비 변경과 함께 커밋합니다.
갱신된 스냅샷을 릴리스 준비 변경과 함께 커밋합니다.
2. **문서 일괄 점검** — 릴리스는 문서와 함께 나갑니다. 태그 전에:
- `docs-site/docs/release-notes/X.Y.Z.md`에 릴리스 노트를 작성합니다
(EN + KO 미러, `sidebars.ts` 배선 포함). 내용은 `CHANGELOG.md`의
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ def test_normalize_spdx_id(raw: str, expected: list[str]) -> None:

### 회귀망은 의도적으로 두 겹

`tests/verify-specs/`는 검증팀의 결정적 스펙 모듈을 벤더링한 것이고(동봉 `PROVENANCE.md` 참조) nightly(`verify-specs-nightly.yml`)가 신선하게 시드된 스택에 전수 실행합니다. 이 nightly는 우리 내부 회귀망입니다 — 검증팀의 독립 Tier-3 재검증을 대체하지 않으며, 후자의 가치는 오라클이 우리 것이 아니라는 데 있습니다.
`tests/verify-specs/`는 검증팀의 결정적 스펙 모듈을 저장소에 포함한 것이고(동봉 `PROVENANCE.md` 참조) nightly(`verify-specs-nightly.yml`)가 신선하게 시드된 스택에 전수 실행합니다. 이 nightly는 우리 내부 회귀망입니다 — 검증팀의 독립 Tier-3 재검증을 대체하지 않으며, 후자의 가치는 오라클이 우리 것이 아니라는 데 있습니다.

## 디자인 게이트 — 색과 픽셀

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ slug: /quickstart

## 1. 스택 기동

레포지토리를 클론하고 env 파일을 생성합니다.
저장소를 클론하고 env 파일을 생성합니다.

<!-- docs-uat: id=qs-bootstrap kind=shell ctx=host tier=gate waiver=ci-uses-checkout-tree -->
```bash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ TRUSCA는 코드와 그 의존성에 대해 서로 다른 여러 **종류**의

| 분석 | 입력 | 도구 | 산출 | 사용 시점 | 자세히 |
|---|---|---|---|---|---|
| **소스 SBOM 스캔** | Git 레포지토리 (또는 업로드한 소스 아카이브) | `cdxgen` → scancode → `trivy sbom` | CycloneDX SBOM, 법적 tier 분류가 붙은 declared + detected 라이선스, 매칭된 CVE | 기본값. 프로젝트 의존성 트리의 전체 컴포넌트 목록·라이선스·취약점이 필요할 때. | [스캔 → 스캔 종류](../user-guide/scans.md#스캔-종류), [SBOM](../user-guide/sbom.md) |
| **소스 SBOM 스캔** | Git 저장소 (또는 업로드한 소스 아카이브) | `cdxgen` → scancode → `trivy sbom` | CycloneDX SBOM, 법적 tier 분류가 붙은 declared + detected 라이선스, 매칭된 CVE | 기본값. 프로젝트 의존성 트리의 전체 컴포넌트 목록·라이선스·취약점이 필요할 때. | [스캔 → 스캔 종류](../user-guide/scans.md#스캔-종류), [SBOM](../user-guide/sbom.md) |
| **컨테이너 이미지 스캔** | 빌드된 컨테이너 이미지 참조 (`name:tag`) | Trivy | OS 패키지 CVE와 베이스 이미지 OS 지원 종료(EOSL) 판정 | 컨테이너를 배포하며, 애플리케이션 의존성뿐 아니라 OS 계층의 취약점도 알고 싶을 때. | [스캔 → 컨테이너 이미지 스캔](../user-guide/scans.md#컨테이너-이미지-스캔), [컨테이너 OS 지원 종료](../user-guide/scans.md#container-os-eol) |
| **빌드 게이트** | 완료된 스캔의 finding과 라이선스 | 포털 게이트 평가기 | pass/fail 빌드 판정 (CI exit code `0` 또는 `1`) | 금지 라이선스나 임계값 초과 취약점에서 빌드를 자동으로 실패시키고 싶을 때 — CI 집행 지점. | [승인](../user-guide/approvals.md), [라이선스 정책](./license-policies.md), [GitHub Actions](../ci-integration/github-actions.md) |
| **Reachability 분석** | 스캔한 모듈의 보존된 Go 소스 | `govulncheck` (Go) | finding별 reachable / not-reachable / not-analysed 신호 (Go finding에 한함) | 취약 코드가 실제로 호출되는 finding에 우선순위를 매기고 싶을 때. **현재 Go만 지원 — 아래 상태 안내를 확인하세요.** | [비교 → reachability](../comparison.md) |
Expand All @@ -31,7 +31,7 @@ TRUSCA는 코드와 그 의존성에 대해 서로 다른 여러 **종류**의

## 소스 SBOM 스캔 {#source-detail}

소스 스캔은 기본 분석입니다. `cdxgen`(30개 이상 생태계를 커버하는 CycloneDX SBOM 생성기)이 레포지토리를 순회해 의존성 트리의 SBOM을 내며, 각 패키지의 메타데이터에서 읽은 **declared** 라이선스를 함께 담습니다. 이어서 scancode가 팀이 직접 작성한 first-party 소스를 읽어 **detected** 라이선스를 찾습니다(베스트에포트). 마지막으로 `trivy sbom`이 SBOM을 로컬 Trivy DB에 대조해 CVE finding을 내고, 내장 분류기가 각 라이선스에 법적 tier(`permissive` / `conditional` / `forbidden` / `unknown`)를 부여합니다.
소스 스캔은 기본 분석입니다. `cdxgen`(30개 이상 생태계를 커버하는 CycloneDX SBOM 생성기)이 저장소를 순회해 의존성 트리의 SBOM을 내며, 각 패키지의 메타데이터에서 읽은 **declared** 라이선스를 함께 담습니다. 이어서 scancode가 팀이 직접 작성한 first-party 소스를 읽어 **detected** 라이선스를 찾습니다(베스트에포트). 마지막으로 `trivy sbom`이 SBOM을 로컬 Trivy DB에 대조해 CVE finding을 내고, 내장 분류기가 각 라이선스에 법적 tier(`permissive` / `conditional` / `forbidden` / `unknown`)를 부여합니다.

결과는 모든 프로젝트 탭 — Components, Licenses, Vulnerabilities, SBOM — 으로 흘러갑니다. 단계별 흐름은 [아키텍처 → 스캔 파이프라인](./architecture.md#스캔-파이프라인)을, 실행 방법은 [스캔](../user-guide/scans.md)을 참조하세요.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ CRA를 준수하게 되는 것은 아니며, 이 문서는 법률 자문이 아

CRA 프로그램 안에서 TRUSCA를 실용적으로 쓰는 방법이다.

1. 릴리즈마다 SBOM(CycloneDX 또는 SPDX)을 생성해 보관하고, 이를 문서화된
1. 릴리스마다 SBOM(CycloneDX 또는 SPDX)을 생성해 보관하고, 이를 문서화된
구성요소 인벤토리로 삼는다.
2. CI 빌드 게이트를 켜서 Critical CVE·금지 라이선스가 출하되지 못하게 하고,
Trivy DB 갱신과 자동 재매칭을 계속 돌려 출하된 SBOM에 대한 새 CVE가 자동으로
Expand Down
Loading
Loading