본문으로 건너뛰기

평가 실행

컴플라이언스 평가

컴플라이언스 평가(Assessment)는 특정 프레임워크를 기준으로 현재 시스템의 규정 준수 상태를 검사하는 과정입니다. 자동 검사와 수동 검토를 병행하여 종합적인 준수율을 산정합니다.

평가 절차

  1. ⚙ 관리 콘솔 → 접근 제어 & 보안 → 컴플라이언스 메뉴에서 프레임워크 카드를 확인합니다.
  2. 각 프레임워크 카드 우측의 평가 실행 버튼을 클릭합니다.
  3. 평가가 생성되고 자동 검사가 즉시 시작됩니다 (PII 탐지, 보존 정책, 접근 통제 등).
  4. 자동 검사 완료 후 준수율이 대시보드에 반영됩니다.
  5. manual 타입 항목은 관리자가 직접 결과를 입력합니다.
  6. 평가 리포트를 조회하여 감사에 활용합니다.

동작 원리

평가 실행 버튼은 두 개의 API를 순차 호출합니다.

[UI] 평가 실행 클릭

├─① POST /api/v1/compliance/assessments
│ └─ ComplianceAssessment 레코드 1개 생성
│ + 프레임워크의 모든 통제 항목에 대해
│ ComplianceCheckResult(status="not_assessed") 일괄 INSERT

└─② POST /api/v1/compliance/assessments/{id}/run
├─ check_type="auto" 이고 auto_check_key 가 있는 항목만 필터링
├─ asyncio.gather 로 자동 점검 함수 병렬 실행
├─ 각 결과의 status 를 compliant / non_compliant / manual_review 로 갱신
└─ 점수·상태 재계산 후 commit

자동 점검 함수는 gend_api.services.compliance_engine 모듈의 @register("key") 데코레이터로 등록되어 있으며, 각 함수는 DB 상태 또는 settings 값을 조회해 (passed: bool, evidence: dict) 를 반환합니다.

자동 점검 항목 (auto_check_key)

시드 데이터에 등록된 자동 점검 키와 통과 조건입니다. 미등록 키는 manual_review 로 마킹되어 관리자 입력을 기다립니다.

auto_check_key통과 조건검사 대상
pii_masking_appliedPIIColumnRegistryconfirmed=true 인 컬럼이 1개 이상PII 컬럼 식별·확정 여부
access_control_existsAccessPolicy.enabled=true 인 정책이 1개 이상접근 통제 정책 활성화
encryption_enabledsettings.vault_enabled == TrueVault 암호화 활성화
data_retention_policyRetentionPolicy.enabled=true 인 정책이 1개 이상데이터 보존 정책
rbac_configuredsettings.auth_enabled + role 기반 AccessPolicy 1개 이상인증 + 역할 기반 정책
audit_log_retentionsettings.opensearch_url 가 설정됨감사 로그 저장소

자동 점검 함수에서 예외가 발생하면 해당 항목은 non_compliant 로 기록되고 evidence_json.error 에 사유가 남습니다.

평가 결과 상태 (check result status)

상태점수 산식 반영의미
compliant분자(O) / 분모(O)자동/수동 점검 모두 통과
non_compliant분자(X) / 분모(O)점검 실패 — 미준수
not_applicable분자(X) / 분모(X)해당 시스템에 적용되지 않음
manual_review분자(X) / 분모(O)수동 확인 필요 — 자동 점수에서는 미충족으로 집계
not_assessed분자(X) / 분모(O)아직 평가 안 됨 (초기 상태)

점수 산식

assessable = total_items − not_applicable_items
compliance_score (%) = compliant_items / assessable × 100
  • not_applicable 만 분모에서 제외됩니다. manual_reviewnot_assessed 는 분모에 포함되어 점수를 낮춥니다.
  • 따라서 자동 점검만 실행하면 수동 항목 수만큼 점수가 떨어진 채로 표시됩니다. 100% 달성하려면 수동 항목까지 관리자가 결과를 입력해야 합니다 (아래 PATCH 엔드포인트 참조).

Assessment status 판정

평가 전체 상태는 검사 결과의 분포로 결정됩니다.

Assessment status판정 조건UI 라벨 / 배지 색DB 저장
completednot_assessed + manual_review 가 0건완료 / 초록
in_progress일부만 평가됨 (대부분의 자동 점검만 끝난 상태)진행 중 / 파랑
draft평가는 생성됐지만 어떤 점검도 안 끝남초안 / 회색
not_assessed평가 이력 없음 (해당 프레임워크에 ComplianceAssessment row 가 0건)미평가 / 회색❌ — 대시보드에서만 사용하는 합성 상태

마지막 not_assessedComplianceAssessment.status 컬럼에 저장되지 않는 대시보드 표현용 합성 상태입니다. GET /dashboard 응답에서 latest_status="not_assessed" 로 노출됩니다. 실제 DB enum 은 위 3 종 (draft/in_progress/completed) 만 사용합니다.

자주 묻는 질문

왜 점수가 40~50% 에서 멈춰 있나요?

시드된 프레임워크의 통제 항목은 자동 점검(auto) + 수동 점검(manual) 이 섞여 있습니다. 평가 실행 버튼은 auto 항목만 즉시 평가하므로, 수동 항목은 not_assessed 로 남아 점수를 끌어내립니다.

예) 10개 항목 중 자동 4건이 모두 compliant, 수동 6건이 not_assessed 라면:

score = 4 / (10 − 0) × 100 = 40%
status = in_progress (not_assessed > 0 이므로)

이는 화면의 40% / 진행 중 / 4/10 준수 카드와 일치합니다.

100% 만들려면 어떻게 하나요?

수동 항목을 PATCH /api/v1/compliance/assessments/{id}/results/{result_id}compliant (또는 시스템에 무관하면 not_applicable) 로 입력하세요. UI 에서 항목별 입력 화면은 평가 상세 조회 페이지에 있습니다.

"평가 실행" 을 여러 번 누르면 어떻게 되나요?

매번 새로운 ComplianceAssessment 레코드가 생성됩니다 (이력 누적). 대시보드의 카드는 가장 최근 평가 의 점수만 보여 주고, "총 평가 27" 카운터는 전체 이력 개수입니다.

API 엔드포인트

MethodPathDescription
POST/api/v1/compliance/assessments평가 생성 (모든 결과를 not_assessed 로 초기화)
GET/api/v1/compliance/assessments평가 목록 조회
GET/api/v1/compliance/assessments/{id}평가 상세 + 항목별 결과 조회
POST/api/v1/compliance/assessments/{id}/run자동 점검 실행 (asyncio.gather 병렬)
PATCH/api/v1/compliance/assessments/{id}/results/{result_id}수동 결과 입력 — 점수 재계산 트리거
GET/api/v1/compliance/assessments/{id}/report평가 리포트 조회

POST/PATCH 계열은 require_admin 의존성으로 관리자 권한이 필요합니다.

관련 문서