- API Key 인증: X-API-KEY 헤더 → authKey 쿼리 파라미터 변경
- 일일 요청량 제한 기능 (daily_request_limit, HTTP 429)
- 인증/권한 거부 로그 상태 DENIED 분리 (기존 FAIL에서 분리)
- 에러 응답에 code 필드 추가 (ApiResponse, GatewayController)
- API Key 생성/검토 시 dailyRequestLimit 설정 지원
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 요청 URL 생성 영역 아코디언 형태로 변경
- 샘플 URL 영역 추가 (기본 정보 하단)
- 출력결과 2열 레이아웃 (변수명|의미(단위)) 추가
- 공통 샘플 코드 연동
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SnpSystemConfig 엔티티/레포/서비스/컨트롤러 구현
- GET/PUT /api/config/{configKey} 엔드포인트
- 공통 샘플 코드 관리 admin 페이지 (SampleCodePage)
- 프론트엔드 configService 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- API 명세(Spec) 및 파라미터(Param) CRUD 엔드포인트 추가
- API 관리 상세 편집 페이지(ApiEditPage) 구현
- API 목록 관리 페이지(ApisPage) 구현
- 요청인자/출력결과 편집 + JSON 파싱 기능
- 프론트엔드 타입/서비스 정의 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- API Hub 대시보드 (배너, 인기 API, 최신 API, 서비스 카드)
- 서비스 트리 사이드바 레이아웃 (서비스 > 도메인 > API)
- 서비스별 API 목록 페이지 (도메인별 그룹)
- API 상세 명세 페이지
- 백엔드 카탈로그/최신 API 조회 엔드포인트
- 메인 사이드바에 API Hub 링크 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- JWT 인증 및 LoginPage 제거, SecurityConfig permitAll 전환
- @PreAuthorize 어노테이션 전체 제거 (@EnableMethodSecurity 비활성화)
- ADMIN/MANAGER/USER 역할 토글 버튼 (헤더) + localStorage 연동
- X-User-Id 헤더 기반 사용자 식별 (ApiKeyController, ApiKeyRequestController)
- RoleGuard 컴포넌트로 관리자 전용 페이지 접근 제어
- WebViewController 루트 리다이렉트 수정 (이중 context-path 방지)
closes#35
서비스 API:
- snp_service_api에 apiDomain/apiSection 컬럼 추가
- API 신청 시 서비스 > 도메인 계층형 아코디언+테이블 선택
- 검토 모달 API 권한 편집 가능 (체크박스 토글, API 추가 모달)
API Key 관리:
- KPI 카드 4개 (대기/활성/만료임박/폐기)
- 필터 칩 (상태별) + 검색 + 15건 페이징
- 신청 관리: 사용자 아이콘, 필드 라벨 한글화, 목적 제거
- 키 관리: 소유자(userName) 필드 추가, 필드 순서 변경, maskedKey/생성일 제거
- 검토 모달: 탭(신청정보/API권한), EditableDateCard, 승인확인 변경테이블
- 상세 모달: 검토 모달 readOnly 재사용, 상태별 아이콘 헤더
- 키 상세: 상태별 색상, InfoRow, API Key 보기/숨기기+복사
Closes#31
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
통계 메뉴 (5개 서브페이지):
- 서비스 통계 (요약카드+에러율비교+응답시간분포+시간별추이)
- 사용자 통계 (전체/API Key보유/API요청 사용자+역할분포+Top10)
- API 통계 (호출순위+에러순위+메서드분포+상태코드분포)
- 테넌트 통계 (요약카드+일별추이+API Key현황)
- 사용량 추이 (일별/주별/월별 탭, 요청수+성공률+응답시간+활성사용자)
대시보드 피드백:
- 요약카드 전일대비 소숫점 2자리
- 하트비트 카드형 (프로그레스바 제거, flex 균등분할)
- 테넌트 차트 제거
- 상위 API URL 쿼리파라미터 정규화 (SPLIT_PART)
- Gateway request_url 저장 시 쿼리스트링 제외
- "활성 사용자" → "API 요청 사용자" 라벨 변경
서비스 통계: 요약카드 flex 유동너비, 에러율+응답시간 차트 교체
사용자 통계: API Key 보유 사용자 카드 추가, flex 균등분할
API 통계: 타이틀 변경, 쿼리파라미터 제외 쿼리, 프로그레스바 분리
테넌트 통계: flex 균등분할, 빈 테넌트명 Unknown 처리
Closes#23
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
공통:
- 다크/라이트 모드 (ThemeContext, Tailwind dark variant, 전체 페이지 적용)
- 사이드바 아이콘 링크체인 (#FF2E63), 헤더/사이드바 높이 통일
- 컨텐츠 영역 max-w-7xl 마진 통일 (대시보드 제외)
- 전체 Actions 버튼 bg-color-100 스타일 통일
- date input 달력 아이콘 다크모드 (filter invert)
API Keys:
- Request: 영구 사용 옵션 추가, 프리셋/영구 버튼 다크모드
- My Keys: ADMIN 직접 생성 제거 → Request 페이지 정식 폼으로 통일
- Admin: 키 관리 만료일 컬럼 추가, 권한 편집 제거 (승인 단계에서만 가능)
Gateway:
- API 경로 {변수} 패턴 매칭 지원
Closes#15
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
백엔드:
- AES-256-GCM 암호화 (ApiKey 생성/복호화 조회)
- API Key 직접 생성 (ADMIN) + 신청→승인/반려 워크플로우
- 신청 필드 추가 (사용기간, 서비스IP, 서비스용도, 예상요청량)
- Permission CRUD (bulk delete+recreate, @Modifying JPQL)
- API Key 폐기, expires_at 자동 설정
- ErrorCode 5개 추가
프론트엔드:
- MyKeysPage: 키 목록, 상태 배지, 폐기, raw key 모달
- KeyRequestPage: 기간 프리셋/직접선택 토글, 서비스IP, 용도, 예상요청량, API 체크박스
- KeyAdminPage: 신청 검토(필드 노출+기간 조정) + 키 관리(복호화 조회, 권한 편집)
Closes#8
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
백엔드:
- 테넌트 CRUD API (GET/POST/PUT /api/tenants)
- 사용자 CRUD API (GET/POST/PUT/DELETE /api/users, 역할 기반 접근 제어)
- 서비스 등록/관리 API (GET/POST/PUT /api/services, /api/services/{id}/apis)
- 하트비트 스케줄러 (30초 간격 폴링, WebClient 헬스체크)
- 헬스체크 상태 조회/이력 API (GET/POST /api/heartbeat)
- @EnableMethodSecurity + @PreAuthorize 역할 기반 접근 제어
- WebClientConfig, ErrorCode 7개 추가
프론트엔드:
- 테넌트 관리 페이지 (CRUD 테이블 + 모달)
- 사용자 관리 페이지 (역할 드롭다운, 테넌트 선택)
- 서비스 관리 페이지 (헬스 배지, API 목록 탭)
- API 서비스 모듈 4개 (tenant, user, service, heartbeat)
Closes#7
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>