release: 2026-04-17 (11건 커밋) #72
No reviewers
레이블
레이블 없음
마일스톤 없음
담당자 없음
참여자 2명
알림
마감일
마감일이 설정되지 않았습니다.
의존성
No dependencies set.
Reference: gc/kcg-ai-monitoring#72
불러오는 중...
Reference in New Issue
Block a user
No description provided.
Delete Branch "develop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
릴리즈: 2026-04-17 — 프로젝트 뼈대 정비 (iran cleanup + 백엔드 계층 + i18n + 디자인시스템 SSOT)
3단계 리팩토링으로 10여 차례 릴리즈 누적된 구조적 드리프트를 한번에 정리. 총 98개 파일 변경, 기능 변경 없이 표현·구조 정비.
변경 (feat/refactor 중심)
1. 디자인 시스템 SSOT 일괄 준수 (30파일) — PR #C
<button>→<Button variant>/ raw<input>→<Input>/ raw<select>→<Select>/ 커스텀 탭 →<TabBar>+<TabButton>/ raw checkbox →<Checkbox>text-red-400같은 다크 전용 색상을text-red-600 dark:text-red-400쌍으로 라이트 모드 대응color: stringprop →intent: BadgeIntent+INTENT_TEXT_CLASS매핑2. i18n 하드코딩 한글 제거 — PR #B
common.json에aria/error/dialog/success/message네임스페이스 추가 (ko/en 대칭, 54키)alert('실패: ' + msg)11건 +aria-label="역할 코드"등 40+건 →t('aria.*')/t('error.*')/t('dialog.*')일괄 치환title={t('message.switchToEnglish')}+aria-label={t('aria.languageToggle')}정비3. iran 백엔드 프록시 잔재 제거 — PR #A
IranBackendClientdead class 삭제,application.ymliran-backend:블록 +AppProperties.IranBackendinner class 정리iran 백엔드 (분석)→AI 분석 엔진, system-flow manifestexternal.iran_backend노드status: deprecated마킹4. 백엔드 계층 분리 — PR #A
AlertService·MasterDataService·AdminStatsService신규 계층 +@Transactional(readOnly=true)RestClientConfig @Configuration으로predictionRestClient/signalBatchRestClientBean 통합 (@PostConstruct ad-hoc 제거)5. 감사 로그 보강 — PR #A
EnforcementServicecreateRecord/updateRecord/createPlan 에@Auditable(ENFORCEMENT_CREATE/UPDATE/PLAN_CREATE)VesselAnalysisGroupService.resolveParent에PARENT_RESOLVE액션6. alertLevels 카탈로그 확장 — PR #A
isValidAlertLevel/isHighSeverity/getAlertLevelOrder/ALERT_LEVEL_MARKER_OPACITY/ALERT_LEVEL_MARKER_RADIUS/ALERT_LEVEL_TIER_SCORE헬퍼·상수 신설추가
7. performanceStatus 카탈로그 등록 — PR #A
shared/constants/performanceStatus.ts(10종) 를catalogRegistry에 등록커밋 구성 (11건)
검증 체크리스트
npx tsc --noEmit0 errorsnpx eslint . --quiet0 errors./mvnw -pl backend compile성공/api/alerts,/api/master/*,/api/admin/stats/*응답 스키마 변경 없음auth_audit_log에 ENFORCEMENT_*, PARENT_RESOLVE 액션 기록후속 과제
external.iran_backendmanifest 노드 1~2 릴리즈 후 완전 삭제공통 번역 리소스 확장: - common.json 에 aria / error / dialog / success / message 네임스페이스 추가 - ko/en 양쪽 동일 구조 유지 (aria 36 키 + error 7 키 + dialog 4 키 + message 5 키) alert/confirm 11건 → t() 치환: - parent-inference: ParentReview / LabelSession / ParentExclusion - admin: PermissionsPanel / UserRoleAssignDialog / AccessControl aria-label 한글 40+건 → t() 치환: - parent-inference (group_key/sub_cluster/정답 parent MMSI/스코프 필터 등) - admin (역할 코드/이름, 알림 제목/내용, 시작일/종료일, 코드 검색, 대분류 필터, 수신 현황 기준일) - detection (그룹 유형/해역 필터, 관심영역, 필터 설정/초기화, 멤버 수, 미니맵/재생 닫기) - enforcement (확인/선박 상세/단속 등록/오탐 처리) - vessel/statistics/ai-operations (조회 시작/종료 시각, 업로드 패널 닫기, 전송, 예시 URL 복사) - 공통 컴포넌트 (SearchInput, NotificationBanner) MainLayout 언어 토글: - title 삼항분기 → t('message.switchToEnglish'/'switchToKorean') - aria-label="페이지 내 검색" → t('aria.searchInPage') - 토글 버튼 자체에 aria-label={t('aria.languageToggle')} 추가30개 파일 전 영역에 동일한 패턴으로 SSOT 준수: **StatBox 재설계 (2파일)**: - RealGearGroups, RealVesselAnalysis 의 `color: string` prop 제거 - `intent: BadgeIntent` prop + `INTENT_TEXT_CLASS` 매핑 도입 **raw `<button>` → Button 컴포넌트 (다수)**: - `bg-blue-600 hover:bg-blue-500 text-on-vivid ...` → `<Button variant="primary">` - `bg-orange-600 ...` / `bg-green-600 ...` → `<Button variant="primary">` - `bg-red-600 ...` → `<Button variant="destructive">` - 아이콘 전용 → `<Button variant="ghost" aria-label=".." icon={...} />` - detection/enforcement/admin/parent-inference/statistics/ai-operations/auth 전영역 **raw `<input>` → Input 컴포넌트**: - parent-inference (ParentReview, ParentExclusion, LabelSession) - admin (PermissionsPanel, UserRoleAssignDialog) - ai-operations (AIAssistant) - auth (LoginPage) **raw `<select>` → Select 컴포넌트**: - detection (RealGearGroups, RealVesselAnalysis, ChinaFishing) **커스텀 탭 → TabBar/TabButton (segmented/underline)**: - ChinaFishing: 모드 탭 + 선박 탭 + 통계 탭 **raw `<input type="checkbox">` → Checkbox**: - GearDetection FilterCheckGroup **하드코딩 Tailwind 색상 라이트/다크 쌍 변환 (전영역)**: - `text-red-400` → `text-red-600 dark:text-red-400` - `text-green-400` → `text-green-600 dark:text-green-400` - blue/cyan/orange/yellow/purple/amber 동일 패턴 - `text-*-500` 아이콘도 `text-*-600 dark:text-*-500` 로 라이트 모드 대응 - 상태 dot (bg-red-500 animate-pulse 등)은 의도적 시각 구분이므로 유지 **에러 메시지 한글 → t('error.errorPrefix') 통일**: - detection/parent-inference/admin 에서 `에러: {error}` 패턴 → `t('error.errorPrefix', { msg: error })` **결과**: tsc 0 errors / eslint 0 errors (84 warnings 기존)릴리즈 승인 (via /release skill) — 2026-04-17