Skip to content

migrate to Echo framework and add cloud resource management features#69

Merged
MZC-CSC merged 127 commits into
m-cmp:mainfrom
MZC-CSC:develop
Apr 28, 2026
Merged

migrate to Echo framework and add cloud resource management features#69
MZC-CSC merged 127 commits into
m-cmp:mainfrom
MZC-CSC:develop

Conversation

@MZC-CSC
Copy link
Copy Markdown
Member

@MZC-CSC MZC-CSC commented Apr 28, 2026

Summary

This PR brings MZC-CSC's development branch into upstream, covering a full framework migration from Buffalo to Echo and a significant expansion of cloud resource management capabilities.

Framework Migration

  • Migrate both API and Frontend servers from Buffalo/Plush to Echo v4 + Jet v6 template engine
  • Remove all Buffalo artifacts (api_buffalo/, Buffalo configs, Yarn lockfile)
  • Update CI/CD pipeline for Echo-based builds
  • Add Go worktree support (.worktrees/ in .gitignore)

Cloud Resource Management (M4: CLOUD-ADMIN)

  • VPC/VNet: list, create, edit, subnet management, table filter/toolbar, detail panel
  • VNet Templates: template management screen
  • Security Groups: CRUD, VPC-linked create modal, detail panel expansion, import
  • SSH Keys: CRUD + import
  • CSP Accounts: account management page (cloud-overview)
  • Connection Config: switch from deprecated API to GetProviderList / GetConnConfigList
  • CSP Role & Policy: management screens

Resource Sync (RQ-CLOUD-ADMIN-005)

  • New Resource Sync screen (/webconsole/settings/environment/cloudresources/resourcesync)
  • Overview mode: InspectResourcesOverview — single-call full status table
  • Partial mode: parallel InspectResources calls per selected connection × resource type with progress counter
  • Sync execution: RegisterCspNativeResources with option array query params (proxy array serialization support)
  • Region parsing fix: use regionZoneInfo.assignedRegion instead of string-split to avoid zone-suffix mis-parse (e.g. alibaba-us-east-1-us-east-1b)
  • Single-connection response normalization for result table
  • NS Sync tab: detect Namespace ↔ IAM Project mismatches via GetProjectSyncDiff / ApplyProjectSync

CSP Resource Import (RQ-CLOUD-ADMIN-007)

  • CSP resource import UI (FR-007-01~04): list, detail, import action

Onboarding Workflow

  • MCI workload lifecycle action buttons
  • MCI resource recommendation (disklookup handler)
  • Pre-onboarding Setup Status card section (8-card skeleton) + BFF YAML reachability check
  • readyz / init API integration and Cloud Overview health check badging

Platform Proxy & Authentication

  • RegistryCache: dynamic mc-iam-manager service registry caching (TTL-based, BaseURL + ServiceActions)
  • DB session management activation and secure auth endpoint separation
  • Refresh Token handler — support both flat and {"request": {...}} wrapper formats
  • QueryParams array value serialization in proxy handler (?option=a&option=b)

User & Organization Management

  • Signup: registration form, role-based E2E tests
  • Password management: change password feature
  • User status toggle + reset password modal relocation
  • Organization management: org + group CRUD
  • Menu management: role mapping, JSON/YAML export/import

Configuration

  • conf/api.yaml: add GetProjectSyncDiff, ApplyProjectSync, listMenus, InitialMenus, SyncMcmpApis, syncProjects operations; reset test IPs to placeholders
  • conf/selfiammenu.yaml: full rewrite to versioned format including Resource Sync menu entry
  • conf/webconsole_menu_resources.yaml: Resource Sync menu (menunumber: 1580/1595)

Bug Fixes

  • Iframe full-height display in Docker deployment
  • Dockerfile: replace npm ci + package-lock.json with npm install for fresh-clone builds
  • Workspace removeWorkspaceFromProject ID type coercion (number → string)
  • Workspace Members tab query and filter
  • VPC API: remove empty filterKey/filterVal from query params
  • Onboarding: MCI dropdown, confirm modal, lifecycle action button unresponsiveness

dogfootman and others added 30 commits February 2, 2026 16:52
Buffalo에서 Echo 프레임워크로 API 마이그레이션 작업을 진행합니다.

주요 변경사항:
- 기존 Buffalo 코드를 api_buffalo 디렉토리로 백업
- Echo 기반 새로운 API 구조 구현
  - cmd/main.go: Echo 서버 엔트리포인트
  - internal/: 핸들러, 미들웨어, 모델, 서비스, 리포지토리 구조
  - pkg/: 에러 처리 및 JWT 유틸리티
  - conf/: API 설정 및 메뉴 권한 설정
- 마이그레이션 계획 및 스펙 문서 추가 (mc-web-console-spec/)
- go.mod 의존성 업데이트 (Buffalo → Echo)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Major changes:
- Replace Buffalo framework with Echo v4 for better performance and modern Go practices
- Migrate from Plush to Jet v6 template engine
- Add iframe layout detection to automatically use application.iframe.plush.html for iframe pages
- Fix iframe wrapper CSS to properly display embedded services
- Add missing template files for Software Catalog, Workflows, and Data Migrations pages
- Update authentication and session handling for Echo middleware
- Remove Buffalo-specific files (.buffalo.dev.yml, grifts, fixtures)
- Add Dockerfile for containerization

Technical improvements:
- Implement dynamic iframe template layout selection based on template path
- Add common/iframe/iframe.js dependency to all iframe pages
- Maintain backward compatibility with existing API proxy functionality
- Update Go modules to use Echo and Jet dependencies

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Fix iframe full-height display issue in Docker deployment
  - Update application.iframe.plush.html with proper CSS for full viewport
  - Modify iframe initialization scripts (datamanager, softwaremanager, workflowmanager)
  - Resolve iframe sizing problem that caused scrollbars in production
- Restore FRONT_PORT default from 3005 to 3001 (original Buffalo port)
- Remove team-specific DNS (mcmp.dev.cscmzc.com) from API_ADDR default
- Set API_ADDR to localhost for public source code release

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…ole-front

- Change Dockerfile to use Go build instead of Buffalo for application compilation
- Update package.json to reflect new project name and repository
- Modify Webpack configuration comments for clarity on NODE_ENV usage
- Enhance static file serving in app.go to support new asset structure
- Improve error handling in auth.go for API responses and token extraction
…-jsyoo

refactor: Migrate frontend from Buffalo to Echo framework
- Add api/Dockerfile.mcwebconsoleapi for Echo-based API Docker build
- Add .dockerignore to exclude container volumes from build context
- Rewrite auth handler: support MCIAM proxy (MCIAM_USE=true) and local JWT (MCIAM_USE=false)
- Add proxy handler (SubsystemAnyController): Buffalo-compatible /{subsystemName}/{operationId} routing via conf/api.yaml
- Inject config into Echo context middleware for handler access
- Remove legacy Buffalo conf files from api/conf/ (moved to project root conf/)
feat(api): migrate API server from Buffalo to Echo framework
…ole-front

- Replace npm install with npm ci for consistent dependency installation
- Change health check endpoint from /alive to /readyz
- Update middleware to reflect new health check path
- Enhance token extraction logic in auth.go for better response handling
- Modify Dockerfile to improve application deployment structure and copy public assets
refactor: update front server structure and fix login flow for Echo migration
- api/Dockerfile: fix LegacyKeyValueFormat (ENV key=value) and FromAsCasing (AS)
- front/Dockerfile: fix same ENV format and AS casing issues
- front/Dockerfile: restructure to COPY package files before npm ci to fix missing package-lock.json error
- .dockerignore: add front/node_modules/ to prevent build context pollution
- front/package.json: remove deprecated xterm-addon-fit (duplicate of @xterm/addon-fit); upgrade glob ^7 -> ^13
- front/webpack.config.js: migrate from Glob.sync() to globSync() for glob@13 API compatibility
- front/webpack.config.js: fix glob@13 path handling (no ./ prefix) with .map(e => './${e}')
- front/webpack.config.js: add sass-loader silenceDeprecations to suppress Dart Sass warnings
fix: resolve Docker build warnings and errors in front/api
package-lock.json is gitignored, causing Docker build failure on fresh clone.
Replace 'COPY package-lock.json + npm ci' with 'COPY package.json + npm install'.
fix: remove package-lock.json dependency from front Dockerfile
… front Echo migration

- Remove api_buffalo directory (Buffalo API)
- Remove front Buffalo config (buffalo-app.toml, buffalo-plugins.toml, inflections.json)
- Remove front .yarn / .yarnrc.yml (Yarn 제거)
- Update front for Echo: Dockerfile, README, actions (auth, render), logo, util.js, locales, package.json
- Remove ECHO_MIGRATION_PLAN.md (확인 후 삭제)

Made-with: Cursor
[chore] Buffalo cleanup - api_buffalo 제거, front Echo 전환
- Templates: rename *.plush.html to *.html (application, iframe, index)
- render.go: update layout template references to match renamed files
- README: replace buffalo build/dev commands with go build/run equivalents

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[chore]: remove remaining Buffalo framework remnants
build to Echo. 
(as-is : buffalo )
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add 'menus' entry to webconsole_menu_resources.yaml (menunumber: 1250)
- Add menus_api.js with listMenusTree, createMenu, getMenuByID, updateMenu, deleteMenu
- Add menus.js with AppState, MenuManager, UIManager, ModalManager
- Add menus.html with jstree panel, detail panel, and 3 Bootstrap modals
- Route: /webconsole/settings/accountnaccess/organizations/menus

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- middleware: shouldSkipAuth()에 /auth/signup, /api/auth/signup 공개 라우트 추가
- actions/app.go: GET /auth/signup, POST /api/auth/signup 라우트 등록
- actions/auth.go: UserSignup 핸들러 및 SignupProxy 함수 추가
- signup.html: 회원가입 페이지 템플릿 생성 (폼 + 성공 상태 화면)
- signup.js: 클라이언트 유효성 검사, API 호출, 성공/오류 처리 구현
- login.html: "Register Account" 링크를 /auth/signup으로 수정

Closes: FE-004-01, FE-004-02, FE-004-03, FE-004-04, FE-004-05, FE-004-06, FE-004-07

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- conf/api.yaml: mc-iam-manager 서버 주소 설정 (52.79.163.111:5006)
- conf/api.yaml: mc-infra-manager 서버 주소 설정 (52.79.163.111:1323)
- conf/api.yaml: mc-iam-manager Signup operationId 추가 (/api/auth/signup)
- api/handler/auth.go: Signup 핸들러 및 signupViaMCIAM 프록시 함수 추가
- api/cmd/main.go: POST /api/auth/signup 라우트 등록
- scripts: 포트 충돌 없는 기동(3104/3105)/종료 스크립트 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- playwright.config.ts: baseURL=localhost:3104, chromium headless
- tests/e2e/004-user-signup.spec.ts: 14개 TC 자동화
  - TC-001~002: 공개 라우트 접근 및 UI 요소 확인
  - TC-003~008: 클라이언트 유효성 검사 (email/password/name/복수오류)
  - TC-009~010: 정상 가입 성공 플로우 및 로그인 페이지 이동
  - TC-011~012: 로그인↔회원가입 링크 네비게이션
  - TC-013~014: Enter 키 제출 및 오류 초기화

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
사전 정의 5개 역할(admin/operator/viewer/billadmin/billviewer) 각각에 대해:
  - STEP 1: /auth/signup UI로 회원가입 폼 제출 및 성공 메시지 확인
  - STEP 2: 미승인 상태에서 로그인 차단 검증
  - STEP 3: 관리자 API로 승인(PUT /api/users/id/{id}) + platform role 할당
  - STEP 4: 승인 후 로그인 성공 및 홈 리다이렉트 확인
+ 추가: admin 로그인 후 전체 신규 유저 목록 존재 및 enabled 상태 검증

mc-iam-manager API: 52.79.163.111:5006
mc-web-console front: localhost:3104 (MCIAM_USE=true)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
authcookie.js는 {"request": {"refresh_token": "..."}} 형식으로 전송하지만
Refresh 핸들러는 flat 형식만 처리하여 항상 400 오류 발생.
두 형식 모두 지원하도록 수정하여 Access Token 자동 갱신 정상화.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add ChangeMyPassword API route to conf/api.yaml
- Add ResetUserPassword API route to conf/api.yaml
- Add changeMyPassword JS function in navbar change password modal
- Add resetUserPassword JS function in users settings page
- Add Reset Password modal UI in users.html
- Add Change Password modal UI in navbar
- Add E2E tests for password management (TC-001~TC-011, all pass)
- Fix flat-array based tree conversion (parentId === "home" as root)
- Add role checkbox UI in create/edit modals with listRoles() API
- Add CRUD API actions to conf/api.yaml (Listmenustree, Createmenu, etc.)
- Apply page-header pattern (remove duplicate header block from HTML)
- Fix login.js error handling to prevent TypeError on GetAllAvailableMenus failure
- Add Playwright E2E tests (TC-001~007) covering tree view, CRUD, error handling
- Add playwright.config.ts targeting localhost:3001

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix(auth): Refresh Token 자동 갱신 버그 수정
yh-noh and others added 28 commits April 15, 2026 17:15
- Add Export button: opens modal with JSON/YAML format selection and editable filename
- Add Import button: accepts .json/.yaml/.yml files, validates, upserts menus via API
- Add js-yaml dependency for YAML serialization/deserialization
- Add Export modal with format radio buttons and filename input
- Add Import result modal showing created/updated/failed counts
- Implement topological sort to handle parent-before-child ordering on import
feat(fr-007): add JSON/YAML export and import to menu management
- securitygroups: 목록 테이블(Tabulator), 상세 패널(방화벽 규칙 테이블), 생성 모달(동적 규칙 행), 삭제, Import
- sshkeys: 목록 테이블(Tabulator), 상세 패널(Public Key 표시, Private Key 블러 토글), 생성 모달, 삭제, Import
- 두 페이지 모두 networks.js 패턴 적용 (AppState, workspaceProjectInit, Filter, page-header 버튼)
- VPC 텍스트 입력 → getAllVNet(ns) 기반 드롭다운 선택으로 변경
- VPC 선택 시 connectionName 자동 채움 (read-only 표시)
- _loadVNetOptions() 신규 추가, _loadConnectionOptions() Import 모달 전용 유지
- vpc_api.js 스크립트 태그 추가
- Create 모달: VPC 드롭다운 + Connection 자동 채움
- firewallRules 필드명 대소문자 수정 (Port/Protocol/Direction/CIDR)
- Detail 패널: Provider/Region/Zone/CSP Resource Name/UID/Description 추가
- keyValueList CSP 상세 정보 접이식 섹션 추가
- 화면 한글 문구 전체 영문화
- conf/api.yaml 중복 키(GetProviderList) 제거
feat(cloud-admin-003): SecurityGroup 관리 화면 개선
- recommendSpec 400 오류: limit(int), weight(float) 타입 수정 (serverrecommendation.js)
- PostMciDynamicReview 400 오류: subGroupSize, rootDiskSize parseInt 변환 (mci_api.js)
- searchImage nsId system 고정 및 operationId 대소문자 수정 (mci_api.js)
- 스펙 조회 중 로딩 인디케이터 추가 (_serverrecommendation.html, serverrecommendation.js)
- Architecture 필터 필드 추가 (_serverrecommendation.html)
- backend coerce 안전망: RequestCoerce 선언 및 coerceRequestFields 함수 (proxy.go, api_spec.go, api.yaml)
- POST /api/disklookup 핸들러 신규 구현: provider별 root disk type 정적 데이터 반환 (disk.go, main.go)
- application.html에 toast.js 전역 로드 추가 (javascriptTag)
- mci.js changeMciLifeCycle에 currentMciId 유효성 검사 추가
- 원인: toast.js 미로드로 executeWithToast() 진입 시 TypeError
- application.js: tabler.js가 globalThis.bootstrap 설정하므로 중복 Bootstrap 로드 제거
  → 두 인스턴스가 dropdown toggle 이벤트 이중 처리하여 dropdown 미동작 현상 해소
- modal.js: commonModal confirm 핸들러에 modalHide 명시적 호출 추가
  → confirm 클릭 후 모달이 닫히지 않던 현상 해소
- modal.js: modalHide null-safe 처리 (getInstance null 반환 시 TypeError 방어)
fix(onboarding): MCI workload lifecycle action 버튼 수정
…heck 추가

cloudoverview 페이지에 1_setup_auto.sh 7단계 셋업 결과를 검증하는 Setup
Status 섹션을 추가한다. 8개 카드(Setup Sequence / Roles / Menu / API /
Projects / Workspace Mapping / Credentials / loadAssets)가 axios 단위로
독립 호출되어 progressive 렌더링되며, 각 카드는 누락/불일치 시 Re-sync
액션을 제공한다.

주요 변경:
- BFF: /api/admin/setup-yaml-check endpoint 신규. menu/api yaml URL 도달성을
  HEAD(필요 시 GET Range:0-0)로 검사 후 httpStatus/lastModified/etag 회신.
- BFF config: MCWEBCONSOLE_MENUYAML / MCADMINCLI_APIYAML env 추가.
- conf/api.yaml: 신규 operationId 6건 (mc-iam-manager 5건, mc-infra-manager
  GetAssetsSummary 1건). GetCredentialHolderList/GetCredentialHolder/
  LoadAssets는 기존 등록 재사용.
- front: setup_status_api.js / setup_status_section.js 신규. credential은
  cb-tumblebug GetCredentialHolderList(holder/providers/verified-of-total)
  로, loadAssets는 cb-tumblebug v0.12.6+의 GetAssetsSummary(provider별
  spec/image/priced 비율)로 일원화.
- cloudoverview.html: setup-status-section + 8개 카드 div 통합.

검증: GetCredentialHolderList=200(holder=admin/5 providers/254-of-465 verified)
정상. GetAssetsSummary는 배포된 cb-tumblebug 버전이 v0.12.6 미만이라
404가 떨어지며, UI는 UNKNOWN 배너로 graceful degradation. 운영 환경
업그레이드 후 재검증 필요.

Made-with: Cursor
…model.Project tag)

mc-iam-manager의 model.Project는 `json:"nsid"` (소문자/단일어) 태그를 사용한다.
기존 setup_status_section.js는 NsId/nsId/ns_id 만 시도하여 실제 응답 키인 `nsid`를
읽지 못해 모든 project가 Projects/Workspace Mapping 카드에서 "NsId 없음" 으로
표시되는 버그가 있었다.

두 군데 매핑(mergeProjectsCard, mergeWorkspaceMappingCard)에 `p.nsid`를 최우선
fallback으로 추가한다. mc-iam-manager / mc-infra-manager API 변경 없음.

검증:
  - platformAdmin 로그인 후 BFF 경유로 listProjects 호출 → default(nsid=default),
    system(nsid=system) 2건 모두 정상 응답.
  - webpack production 빌드 후 setup_status_section.ff311adb517d2e594fd0.js
    chunk에 `t.nsid → t.NsId → t.nsId → t.ns_id` minified 코드 2개소 포함 확인.
  - front Go 바이너리 재빌드 (public/embed.go 가 chunk를 embed) + 재기동 완료,
    /assets/.../setup_status_section.ff311adb...js 가 새 코드를 서비스 중.

Made-with: Cursor
…ed" count

Two distinct bugs in the Workspace Mapping card of the cloud onboarding Setup Status section:

1) Re-sync Workspace Mapping → HTTP 400 "Workspace ID is required"
   원인: BFF `SubsystemAnyController` 는 CommonRequest 래퍼(`{request:{...}, pathParams,
   queryParams}`)를 풀어서 `commonRequest.Request` 만 backend로 forward한다
   (api/internal/handler/proxy.go:86-89). assignAllProjectsToFirstWorkspace 만 flat
   `{workspaceId, projectIds}` 로 호출해 commonRequest.Request == nil → 빈 body 가
   mc-iam-manager 에 전달 → 400.
   fix: 다른 호출(workspace_api.js 등)과 동일하게 `{request:{...}}` 래퍼 적용.

2) "미매핑 project N건" 으로 잘못 표시
   원인: mergeWsMapping 이 listWorkspaceProjects row 의 workspace id 키로
   `workspace_id/workspaceId/...` 만 시도. 그러나 응답 형태는 [{id, name, projects:[...]}]
   로 workspace 자체의 `id` 가 곧 workspaceId. wid="" 로 모두 skip → mappedProjectIds
   가 항상 비어, 모든 project 가 unmapped 로 분류.
   fix: fallback chain 최상단에 `row.id ?? row.ID` 추가.

검증:
  - mc-iam-manager 직접 호출(BFF 우회) HTTP 200 vs BFF 경유 HTTP 400 비교로 (1) 원인 식별
  - listWorkspaceProjects 실제 응답 ws01(id=1).projects=[default, system], testws01.
    projects=[] 로 (2) 원인 확인 — 실제 미매핑은 0건
  - webpack 재빌드 후 새 chunk 에 `{request:{workspaceId:p,projectIds:f}}` 래퍼와
    workspace id fallback 코드 minified 로 포함 확인
  - BFF 경유 assignWorkspaceProjects 재호출 HTTP 200 + "Assigned project to workspace
    successfully" 응답 확인

참고(별건): mc-iam-manager 의 SyncProjectsWithInfraManager 는 모든 project 가 어떤
workspace 에도 할당되지 않은 경우 DEFAULT_WORKSPACE_NAME(default) workspace 에 자동
할당하고 없으면 자동 생성한다 (project_service.go:359-451). 1_setup_auto.sh 의
map_workspace_projects 정책("첫 번째 workspace 에 일괄 매핑")과 미묘한 차이가 있어,
정책 통일 여부는 별도 의제로 관리.

Made-with: Cursor
…ceProjects alias

Setup Status 카드의 'Re-sync ▶ Workspace Mapping' 버튼과 conf/api.yaml 의
assignWorkspaceProjects operationId 를 제거한다. 미할당 project 의 default
workspace 매핑은 mc-iam-manager 의 SyncProjectsWithInfraManager 가 env
DEFAULT_WORKSPACE_NAME(=ws01) 기준으로 자동 처리하고, 임의 매핑은 운영 ▶
Workspace 페이지(workspaces.js) 가 담당하므로 본 버튼/alias 는 책임 중복.

변경:
- front/.../setup_status_section.js
  - setup-resync-wsmapping-btn 마크업/bindClick/setActionsDisabled 항목 제거
  - 미매핑 안내 banner 를 운영 ▶ Workspace 페이지 링크로 교체
  - 카드 헤더에 운영 페이지 바로가기(read-only) 버튼 배치
- front/.../setup_status_api.js
  - assignAllProjectsToFirstWorkspace 함수 + unwrapArrayFromAxios/synthError
    private helper 제거 (다른 호출자 없음)
- conf/api.yaml
  - mc-iam-manager.assignWorkspaceProjects 블록 제거
  - addProjectToWorkspace(POST /api/workspaces/assign/projects) 는 그대로 유지

검증:
- BFF /api/mc-iam-manager/assignWorkspaceProjects → 404 'action not found'
- BFF /api/mc-iam-manager/addProjectToWorkspace → 운영 페이지 호출 정상(업스트림 처리)
- public/assets 재빌드 chunk 에서 assignWorkspaceProjects /
  assignAllProjectsToFirstWorkspace / setup-resync-wsmapping-btn 토큰 0건

참고:
- mc-admin-cli 의 1_setup_auto.sh Step 7 map_workspace_projects 호출은
  AddProjectToWorkspace 가 association 추가(이미 매핑된 분에 대해 부수효과
  없음) 라서 sync-projects 와 중복 호출되어도 무해. 본 커밋 범위 외 보존.

Made-with: Cursor
… + 헤더 spinner)

기존 renderAllLoading() 은 8개 카드 모두에 동일한 단순 spinner 만 표시했다.
mc-infra-manager(특히 cb-tumblebug GetAssetsSummary, GetCredentialHolderList)
응답이 수십 초 걸리는 환경에서 사용자는 "어떤 항목이 어디에 표시될지"
알 수 없어 체감 대기가 길어졌다.

변경:
- 8개 카드별 skeleton 함수 신규 추가
  (renderSequenceSkeleton/renderRolesSkeleton/renderMenuSkeleton/
   renderApiSkeleton/renderProjectsSkeleton/renderWorkspaceMappingSkeleton/
   renderCredentialsSkeleton/renderLoadAssetsSkeleton)
- 각 카드: 실제 헤더(제목+단계번호) + 헤더 우측 소형 spinner('Fetching…')
  + 메트릭 라벨 + Bootstrap 5 placeholder bar + 표 헤더(있는 경우)
- renderAllLoading() 을 8개 dispatch 로 재작성
- skeletonMetric/placeholderBar/fetchingSpinnerHTML 공통 helper 도입
- 기존 renderLoadingSkeleton(elementId) 은 fallback 으로 보존

데이터 도착 시 기존 render*Card() 가 el.innerHTML 통째 교체로
자연스럽게 sklelton → 실제 카드로 전환된다 (BFF/머지 로직 변경 없음).

Sanity:
- /assets/manifest.json 200
- 신규 chunk setup_status_section.da195e4b35f3d8b9c1d6.js 200
- chunk 내 placeholder-glow 14건 (>=8), Fetching 토큰 8건 (카드당 1)

Made-with: Cursor
- Add resourcesync.html: two-tab layout (overview / result)
  with query condition card, overview table, detail card,
  and sync execution card
- Add resourcesync.js: InspectResourcesOverview (전체 조회) and
  per-connection InspectResources (부분 조회) with provider/
  connection/resource-type filter UI; syncExecute calls
  registerCspNativeResources and renders result tab with
  per-output string parsing (regex: type: id [Status] message)
- Add getResourcesOverview() to cspimport_api.js
- Update registerCspNativeResources signature to provider/region/zone filter
- Update csp.js to use new registerCspNativeResources signature
- Register resourcesync menu entry in webconsole_menu_resources.yaml
- Add InspectResourcesOverview operationId to conf/api.yaml
- Remove unused debug log from api/cmd/main.go
QueryParams map type changed from map[string]string to
map[string]interface{} so JS arrays (e.g. option:["vNet","securityGroup"])
are correctly serialized as repeated query params
(option=vNet&option=securityGroup) when proxying to backend.
- Provider checkboxes always visible, disabled by default (unchecked);
  activated on 부분선택 radio click
- syncExecute extracts provider/region from connection name and sends
  per-(provider,region) API calls; aggregates multi-call results
- QueryParams supports array values (option:[...]) via map[string]interface{}
  and repeated key serialization in proxy handler
Connection, resource type checkboxes in query condition and
sync execution sections now start unchecked
- Add NS 동기화 tab with GetProjectSyncDiff/ApplyProjectSync
- Register GetProjectSyncDiff, ApplyProjectSync in conf/api.yaml (mc-iam-manager)
- Fix getProviderRegion to use regionZoneInfo.assignedRegion instead of string split
- Fix renderResultTab to handle single-connection response format
- Fix loadNsDropdown to use current workspace project nsId list first
[Feature] RQ-CLOUD-ADMIN-005 Resource Sync 화면 구현
@MZC-CSC MZC-CSC merged commit f2c93f2 into m-cmp:main Apr 28, 2026
3 checks passed
MZC-CSC added a commit that referenced this pull request May 11, 2026
migrate to Echo framework and add cloud resource management features
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants