hjjeong
383b837a60
dev *.localhost 테넌트 라우팅 + direnv/Java 21 dev 환경 정비
...
SubdomainResolverFilter.extractSubdomain() 가 2파트 {sub}.localhost 호스트도
첫 파트로 파싱 (RFC 6761). 운영 3파트 경로 무변경. 단위 테스트 8건 추가.
frontend/lib/api/client.ts 에 *.localhost (bare 제외) 직접 호출 분기 1-b 추가.
8081 로 직결해 Host 헤더 보존. subdomain.ts 도 동일 규칙 적용.
application.yml CORS 디폴트에 http://*.localhost:[*] 패턴 추가.
docs/MULTI_TENANCY_ARCHITECTURE.md §4.2 (실행 모드 A/B) + §6 (1-b 분기) 갱신.
.gitignore 에 .envrc/.direnv 추가, .java-version=21 명시 (jenv 호환).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-28 17:52:30 +09:00
hjjeong
e16fb16987
어드민 cross-tenant 집계 (SUPER_ADMIN) + 사용자관리 자체 스크롤
...
SUPER_ADMIN 토큰(company_code=*)이면 등록 회사들 DB 를 순회해 결과를
집계해 돌려주는 CrossTenantAggregator/Controller 추가. 사용자/권한그룹/
배치/다국어 키 4개 도메인의 list API 가 cross-tenant 모드 지원.
UserTable + ResponsiveDataView 에 compact/scrollContainer prop 추가.
페이지 헤더/툴바/페이지네이션은 고정, 테이블만 자체 스크롤.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-28 17:52:30 +09:00
DDD1542
8b8186d1c0
INVYONE Studio Config Panel — 좌측 팔레트 10 컴포넌트 cp 톤 1차 마이그
...
Build & Deploy to K8s / build-and-deploy (push) Successful in 4m7s
신규 / 마이그된 패널:
- 데이터 조회/선택: InvDataConfigPanel (wrapper) + InvRepeaterConfigPanel (V2Repeater 2029줄 폐기 → cp 신규 본체)
- 통합 컴포넌트 7개 in-place cp: button / container / divider / search / stats / table / title
- 옛 v2-* hidden 호환: InvDividerConfigPanel / InvTextConfigPanel / InvButtonConfigPanel
cp 인프라:
- _shared/cp/CPExtras.tsx 신규 — 8 공용 컴포넌트
(Hint / DimText / InlineLoader / SectionLabel / CpChip / ChipPickerBox /
FeatureChipGrid / CPVisualGrid)
- FeatureChipGrid: portal tooltip + Stripe 패턴 group cooldown (500ms delay → 즉시 전환)
- CPVisualGrid: 시각 미리보기 카드 (두께/색/사이즈/시맨틱 등 진짜 의미 preview)
- cp.css 다크 luminance 분리 + 키프레임 / CPPrimitives CPSelect 자동 검색·정렬
옛 V2 패널 4개 삭제:
- V2RepeaterConfigPanel (2029) / V2ButtonConfigPanel (2212) /
V2DividerLineConfigPanel (236) / V2TextDisplayConfigPanel (304)
설계 노트 5개 추가 (notes/gbpark/2026-04-28-*.md):
- cp-panel-standard / cp-panel-day2-html-v4-match / invdata-inventory /
inv-repeater-redesign / inv-naming-consolidation
다음: Inv* 일괄 네이밍 통합 + dead code 정리
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-28 17:21:50 +09:00
gbpark
4b31fe1b27
사용 안 하는 performanceOptimizer 유틸 제거
...
Build & Deploy to K8s / build-and-deploy (push) Successful in 4m7s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-28 01:01:42 +09:00
gbpark
29682e5b63
INVYONE Studio Config Panel — CP 프리미티브 신설 + V2FieldConfigPanel HTML V4 스펙 풀 매칭
...
- _shared/cp 프리미티브 14종 (CPSection/CPRow/CPSelect 커스텀 popover/CPSegment 평면/CPCrumb 통합 팝오버 등)
- V2FieldConfigPanel: 4 kinds × 10 types × format별 옵션 패널로 재작성 (panel-input-new.jsx 매칭)
- resolveTriple/applyTriple 양방향 매핑 — 기존 fieldType/source/autoGeneration 호환
- 미구현(formula/audit/금액 외화/주민·주소·카드/다중 entity) 영역은 Hint 로 명시
- V2PropertiesPanel cp 톤 + 중복 Separator 정리, ScreenDesigner 우측 패널 너비 드래그
- 다크 luminance 분리 / 섹션 헤더 gradient underline / brumb 좌·우 transparent 영역
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-28 01:00:46 +09:00
gbpark
2431451cef
예약 서브도메인에서 dev 제거 — 본섭 테스트 테넌트 용도 허용
...
Build & Deploy to K8s / build-and-deploy (push) Successful in 4m30s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-25 16:11:48 +09:00
gbpark
68f85f3736
회사 관리 기능 확장 + 테넌트/비번 보안 하드닝
...
- 첫 로그인 비번 강제 변경 (RUN_082): FORCE_PASSWORD_CHANGE 컬럼,
ForcePasswordChangeGuardFilter, /auth/change-password API + 페이지
- 테넌트 일관성 가드: TenantConsistencyGuardFilter 로 JWT.company_code
↔ 서브도메인 company_code 대조, CompanyResolver 가 (db_name, company_code)
동시 반환
- 회사 관리 확장 (RUN_083 audit log, RUN_084 lifecycle 컬럼):
CompanyAdmin/Members/Templates/Lifecycle/AuditLog 서비스 +
CompanyMgmtController + SuperAdminGuard
- 회사 관리 UI: CompanyAccordionRow 탭화 + 모달 4종
(AdminInfo/Deactivate/Delete/RecopyTemplates) + AuditLogDrawer + csvExport
- 프로비저닝 마법사: force_password_change 토글 반영
- 프론트 인증: storage 이벤트 멀티탭 동기화, 403 errorCode
(PASSWORD_CHANGE_REQUIRED / CROSS_TENANT_REJECTED / TENANT_NOT_RESOLVED)
전역 리다이렉트
- 기타: StartupSchemaMigrator, OS별 도커 기동 스크립트, CLAUDE.md 트래킹
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-25 00:36:05 +09:00
gbpark
5812925929
테넌트 서브도메인 존재 검증 Guard 추가
...
Build & Deploy to K8s / build-and-deploy (push) Failing after 3m6s
- 백엔드 TenantController: GET /api/tenant/check?subdomain=xxx
(메타 DB 강제 라우팅 + CompanyResolver 로 존재 여부 반환)
- frontend/lib/tenant/subdomain.ts: 호스트 파싱 + 예약어(solution/www/admin 등) 제외
- TenantGuard 클라이언트 컴포넌트: layout.tsx 에서 wrap,
sessionStorage 로 같은 서브도메인 재체크 방지
- /tenant-not-found 페이지: v5 solid+glow 스타일
등록되지 않은 서브도메인 접속 시 즉시 /tenant-not-found 로 리다이렉트.
2026-04-24 19:27:52 +09:00
gbpark
8c861144dc
서브도메인 배포 작업
Build & Deploy to K8s / build-and-deploy (push) Successful in 6s
2026-04-24 17:49:16 +09:00
gbpark
8be7e16e56
서브도메인설정
Build & Deploy to K8s / build-and-deploy (push) Successful in 4m28s
2026-04-24 04:56:40 +09:00
gbpark
94c9b4b602
중간저장
2026-04-24 04:56:30 +09:00
DDD1542
563aef6490
admin 홈 리빌딩 + 폼팝업 전용 렌더러 + 테이블 선택 emit 강화
...
Build & Deploy to K8s / build-and-deploy (push) Successful in 6s
- /admin 홈을 단순 링크 카드 → Welcome/Stats/SystemStatus/회사활동/최근변경/빠른진입 구성의 관리자 대시보드로 교체 (mock 데이터, 실데이터 배선은 후속)
- PopupTemplateRenderer 신규 — 팝업은 canvas 1:1 유지가 필요하므로 반응형 TemplateRenderer 와 경로 분리, absolute 좌표 + transform scale 로 창을 꽉 채움. form-popup 이 templateId 로 자체 fetch 해서 stale views(screenResolutions 누락) 문제 해소
- DashboardCard: 팝업 outer 크기를 canvas + 브라우저 크롬 보정치로 계산, 부모가 template 객체 직접 전달하던 것 제거
- TemplateRenderer: BlockRenderer export, formRow 기반 columnName/value/onChange/onRowSelect 등 바인딩 props 전달 강화
- TableComponent: 행 클릭/체크박스 선택 시 onRowSelect / onSelectedRowsChange emit, 헤더 전체 선택 동작 구현, 싱글/멀티 선택 분기 정리
- AppLayout: 모드 전환 연출 강화(burst ring + particles / 헤더 sweep / breadcrumb swap / glow flash), horizontal nav + 데스크톱에서 햄버거 자동 접힘, 헤더 도구군 래핑 구조 정리
- DashboardEmpty 삭제 → 공통 EmptyDashboard 로 통합
- dashboard.css: ud-htools stagger(오른쪽 → 왼쪽 슬라이드) 애니메이션 적용
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-23 18:02:17 +09:00
DDD1542
4508766d06
수정본 업데이트
Build & Deploy to K8s / build-and-deploy (push) Successful in 4m0s
2026-04-23 09:32:39 +09:00
DDD1542
3eda684787
사용자 대시보드 기능강화 및 인비온 스튜디오 메뉴관리 자잘한수정
Build & Deploy to K8s / build-and-deploy (push) Successful in 4m22s
2026-04-22 18:27:06 +09:00
chpark
2c57dc8cda
부서 권한 그룹 권한 관리
Build & Deploy to K8s / build-and-deploy (push) Successful in 7s
2026-04-22 03:16:38 +09:00
gbpark
c7f00ff2cb
대시보드 캐시 오류 수정완료
2026-04-22 01:29:08 +09:00
gbpark
5153386fce
디자인 수정
Build & Deploy to K8s / build-and-deploy (push) Successful in 3m59s
2026-04-21 22:59:51 +09:00
DDD1542
5fc1e7ede2
자유배치 -> 라인선 레이아웃자유형 반응구현
Build & Deploy to K8s / build-and-deploy (push) Successful in 3m58s
2026-04-20 16:51:33 +09:00
DDD1542
aab894b553
임시저장
2026-04-20 10:00:18 +09:00
gbpark
b3ad787179
대시보드 구현 완료 세세한 오류 수정 진행중
Build & Deploy to K8s / build-and-deploy (push) Successful in 5m4s
2026-04-19 21:15:25 +09:00
gbpark
de7ab9b7e3
중간세이브 - 메뉴수정 - INVYONE 스튜디오 작업
2026-04-16 00:32:19 +09:00
gbpark
1aa48cc0bb
INVYONE 화면 디자이너 개편 + 컴포넌트 86→8 통합
...
## 디자인 개편
- IDE 톤 CSS 오버라이드 (builder-ide.css)
- 컴팩트화 (폰트/간격/패딩 축소)
- INVYONE STUDIO 로고 추가 (SlimToolbar)
- 좌측 수평 탭 → 수직 아코디언 (details/summary)
- 우측 속성 패널 신설 (V2PropertiesPanel 완전 이주)
- 다크모드 지원 (7개 통합 컴포넌트 inline hex → CSS 변수)
## 기반 시스템
- ScreenDefinition.fields/connections 타입 확장
- ComponentDefinition.dataPorts 타입 확장
- FieldConfig adapters (fieldsToColumns/Search/Form)
- DataPortBus + setupConnections runtime
- FieldsPanel (화면 수준 필드 관리 패널)
## 컴포넌트 통합 (Phase A~C)
- divider (3→1): 가로/세로 + 텍스트 구분선
- title (2→1): h1~h6/body/caption variant
- button (3→1): 6 variant × 13 actionType
- search (3→1): inline/stacked 검색 필터
- input (20+→1): FieldConfig.type 10종 내부 분기
- stats (6→1): card/chip/bigNumber 3종 스타일
- table (9→1): table/split/grouped/pivot/card 5종 displayMode
- container (11→1): tabs/section/accordion/repeater/conditional 5종
## 버그 수정 (기존 VEX 코드)
- 드래그 드롭 불가 (defaultSize camelCase 불일치)
- 설정 변경 미반영 (componentConfig vs component_config)
- ConfigPanel 미인식 (config_panel vs configPanel)
- v2- 자동 매핑 함정 (INVYONE_UNIFIED_IDS 화이트리스트)
- LayerManagerPanel 무한 API 호출 (useEffect deps)
- Button size 이름 충돌 (visual size 객체 vs config string)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-12 20:37:23 +09:00
gbpark
a0c9d9a0ab
화면 디자이너 제작
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 19:28:28 +09:00
gbpark
2c0a97f2ba
Phase 1: INVYONE 카드 엔진 토대 정리
...
- components/builder/* 폐기 (12-grid 미완성 빌더 14개 파일)
- components/template-builder/TemplateBuilder.tsx 신규
(자유배치 + 3뷰 + Zustand 스토어 + 드래그/리사이즈/히스토리/격자)
- admin/builder/page.tsx 진입점 전환 (BuilderLayout → TemplateBuilder)
- 타입 정리: FreePosition / TemplateComponent / ViewConfig / Card /
Dashboard / CardConnection 추가, 레거시(GridPosition/TemplateKind/
DEFAULT_COMPONENT_LAYOUTS/CANVAS_KEYWORDS) @deprecated 표기
- v2-* 마이그레이션 1차:
· 완전: v2-table-list (ResizeObserver), v2-table-search-widget (@container)
· 경량: button/input/select/date/text-display/card-display/aggregation-widget
(withContainerQuery HOC)
- 다크 모드 대응: Tailwind dark: variant 21패턴 71곳 치환
- /test-card-responsive PoC 검증 페이지
세션 후반 버그 픽스 (phase1-log §7):
- test-card-responsive (main) 그룹 밖 이동 (AppLayout 탭 시스템 회피)
- useRegistryPalette default_size {width,height}/{w,h} 포맷 정규화
- dark: variant 중복 체인 정리
검증: (A) 반응형 메커니즘, (B) TemplateBuilder UI 통과
(C) 기존 VEX 화면은 마이그레이션 미완 상태라 Phase 2 이후 개별 진행
스펙: notes/gbpark/2026-04-10-card-engine-final-spec.md
로그: notes/gbpark/2026-04-10-card-engine-phase1-log.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-11 03:08:06 +09:00
gbpark
9c36191ebf
중간 세이브
2026-04-10 13:33:37 +09:00
gbpark
06ab990dbd
진행중
2026-04-08 04:55:12 +09:00
gbpark
4603ac7fd6
디자인 수정
2026-04-08 02:27:27 +09:00
gbpark
e3fe7b640f
22
2026-04-07 13:39:14 +09:00
gbpark
de24fb09d5
123
2026-04-06 15:54:31 +09:00
DDD1542
87498b9940
Refactor code structure for improved readability and maintainability
2026-03-31 09:34:54 +09:00
DDD1542
c465141f53
snake_case 통일 작업 중간 저장 - 프론트 완료, 백엔드 쿼리 ID 불일치 수정 전
2026-03-30 12:22:26 +09:00
DDD1542
cbe16aa5e5
[agent-pipeline] pipe-20260330021427-v9fb round-2
2026-03-30 11:35:08 +09:00
DDD1542
b9e3f68fce
[agent-pipeline] pipe-20260330021427-v9fb round-1
2026-03-30 11:25:52 +09:00
DDD1542
4342056de6
[agent-pipeline] pipe-20260330011621-qr5j round-3
2026-03-30 10:45:31 +09:00
DDD1542
312984d3cb
[agent-pipeline] pipe-20260330011621-qr5j round-2
2026-03-30 10:39:17 +09:00
DDD1542
0b26870ac5
[agent-pipeline] pipe-20260330011621-qr5j round-1
2026-03-30 10:24:16 +09:00
DDD1542
a9d3a526af
[agent-pipeline] pipe-20260329160157-3bqb round-2
2026-03-30 02:39:43 +09:00
DDD1542
7529c3ff9e
[agent-pipeline] pipe-20260329160157-3bqb round-1
2026-03-30 02:26:40 +09:00
DDD1542
b9679856d7
[agent-pipeline] pipe-20260329143602-hu6g round-9
2026-03-30 00:38:09 +09:00
DDD1542
5fea071ae8
[agent-pipeline] pipe-20260329143602-hu6g round-2
2026-03-30 00:10:13 +09:00
DDD1542
c24dd533b2
[agent-pipeline] pipe-20260329143602-hu6g round-1
2026-03-30 00:00:35 +09:00
DDD1542
1405a19d1c
[agent-pipeline] pipe-20260329112709-ncml round-2
2026-03-29 23:12:23 +09:00
DDD1542
a5f4cd5ba9
[agent-pipeline] pipe-20260329112709-ncml round-1
2026-03-29 22:56:00 +09:00
DDD1542
0fc2101331
[agent-pipeline] pipe-20260329080516-zyud round-1
2026-03-29 17:48:45 +09:00
DDD1542
9277c93ddc
[agent-pipeline] pipe-20260329072859-n5mz round-1
2026-03-29 16:57:32 +09:00
DDD1542
882f63e744
[agent-pipeline] pipe-20260329071056-9n90 round-1
2026-03-29 16:18:59 +09:00
DDD1542
e9fdfd4348
[agent-pipeline] pipe-20260329052843-hdtq round-2
2026-03-29 14:55:54 +09:00
DDD1542
f01fdfc57c
[agent-pipeline] pipe-20260329052843-hdtq round-1
2026-03-29 14:49:52 +09:00
DDD1542
3bcb0d2c01
[agent-pipeline] pipe-20260329010534-qgv9 round-3
2026-03-29 13:56:36 +09:00
DDD1542
18d237c95e
[agent-pipeline] pipe-20260329010534-qgv9 round-2
2026-03-29 13:32:26 +09:00