- 회원가입 페이지 및 폼 컴포넌트 추가
- 로그인 페이지와 일관된 디자인
- 아이디, 비밀번호, 이름, 차량번호, 휴대폰번호 입력 필드
- 비밀번호 확인 필드 추가
- 유효성 검사 기능 구현
- 차량번호: 한국 차량번호 형식 검증 (12가3456, 123가4567, 서울12가3456 등)
- 휴대폰번호: 하이픈 포함 형식 검증 (010-1234-5678)
- 비밀번호: 최소 6자 이상, 확인 일치 검증
- 사용자ID: 최소 4자 이상
- 이름: 최소 2자 이상
- UI/UX 개선
- 각 필드별 실시간 유효성 검사 및 에러 메시지 표시
- 비밀번호 표시/숨김 토글 버튼
- 자동 설정된 필드에 안내 문구 표시
- 로그인 페이지로 돌아가기 버튼 추가
- 로그인 페이지에 회원가입 링크 추가
- 타입 및 훅 추가
- RegisterFormData, RegisterResponse 타입 정의
- useRegister 훅으로 비즈니스 로직 분리
- auth API mock 함수 (백엔드 연동 준비)
- 사용자 경험 고려
- 입력 필드별 placeholder 예시 제공
- 도움말 텍스트로 입력 형식 안내
- 로딩 상태 표시
- writer 컬럼이 있는 테이블에서 자동으로 user_name 표시
- 백엔드: entityJoinService에서 writer 컬럼 감지 및 user_info 조인
- 프론트엔드: entityJoinApi 항상 사용 및 writer_name 자동 표시
- 디버깅 로그 제거
- 문제: writer 컬럼이 user_name으로 변환되지 않음
- 원인: entityJoinColumns가 없을 때 tableTypeApi 사용 (entity 조인 미지원)
- 해결: 항상 entityJoinApi.getTableDataWithJoins 사용
- 영향:
- writer 컬럼이 있는 모든 테이블에서 자동으로 writer_name 조인
- 기존 additionalJoinColumns도 정상 작동
- 백엔드의 자동 writer 조인 기능 활성화
- 문제: 테이블 리스트에서 writer 컬럼이 user_id로 표시됨
- 해결:
1. 백엔드: entityJoinService에서 writer 컬럼 자동 감지
2. writer 컬럼 발견 시 user_info 테이블과 자동 조인
3. writer_name 별칭으로 user_name 반환
4. 프론트엔드: writer 컬럼일 때 writer_name 우선 표시
- 영향:
- writer 컬럼이 있는 모든 테이블에서 자동으로 작성자명 표시
- 기존 entity 조인 설정과 충돌 없이 작동
- column_labels 설정 불필요
- 문제: 속성 패널에서 너비 입력 시 size.width는 변경되지만 화면에 반영되지 않음
- 원인: RealtimePreviewDynamic의 baseStyle에서 componentStyle을 getWidth() 이후에 스프레드하여 size.width를 덮어씀
- 해결:
1. componentStyle에서 width, height 제거
2. 나머지 스타일만 먼저 적용
3. getWidth(), getHeight()로 size 기반 크기를 마지막에 설정
- 영향:
- 속성 패널에서 입력한 너비/높이가 화면에 즉시 반영됨
- component.style의 width/height는 무시되고 size.width/height만 사용됨
- 디버깅 로그 제거
- 문제: 속성 패널에서 너비를 입력해도 화면에 반영되지 않음
- 원인: updateComponentProperty에서 gridColumns 변경 시 자동으로 너비를 재계산
- 해결:
1. gridColumns 변경 시 updateSizeFromGridColumns 호출 제거
2. gridColumns 변경 시 calculateWidthFromColumns 호출 제거
- 영향:
- 속성 패널에서 입력한 너비가 화면에 즉시 반영됨
- gridColumns는 더 이상 너비를 자동으로 조정하지 않음
- 문제: 너비 입력 시 onChange에서 즉시 업데이트되어 30에서 3을 지우기 어려움
- 해결:
1. localWidth 상태 추가
2. onChange: 로컬 상태만 업데이트 (완전 자유 입력)
3. onBlur/Enter: 실제 업데이트 + 10px 단위 스냅
4. useEffect로 컴포넌트 변경 시 localWidth 동기화
- 영향:
- 30 입력 시 3, 0 모두 자유롭게 지우고 입력 가능
- 포커스 아웃 시에만 10px 단위로 정렬
- 문제: 너비/높이 입력 시 즉시 10px 단위로 스냅되어 자유 입력 불가
- 해결:
1. 너비: onChange에서는 입력값 그대로 반영, onBlur에서 10px 단위로 스냅
2. 높이: 로컬 상태로 자유 입력 허용, onBlur/Enter 시 10px 단위로 스냅
3. step을 10에서 1로 변경하여 자유 입력 가능
- 영향:
- 입력 중에는 원하는 값 입력 가능
- 입력 완료 시(포커스 아웃 또는 Enter) 자동으로 10px 단위로 정렬
- 문제: 속성 패널에서 너비/높이 입력 시 격자 시스템이 자동으로 값을 변경
- 원인: updateComponentProperty에서 size.width/height 변경 시 무조건 격자 스냅 적용
- 해결: 직접 입력 시에는 격자 스냅을 적용하지 않도록 로직 주석 처리
- 영향:
- 속성 패널에서 원하는 크기로 자유롭게 설정 가능
- 드래그/리사이즈 시에는 별도 로직에서 격자 스냅 처리
- 디버깅 로그 제거
- 문제: adjustGridColumnsFromSize 등 gridUtils 함수들이 import되지 않아 런타임 오류 발생
- 해결:
1. gridUtils에서 필요한 함수들 import 추가
2. 3개 파라미터를 받는 snap 함수 호출을 올바른 함수로 변경
- snapSizeTo10px -> snapSizeToGrid
- snapPositionTo10px -> snapToGrid
- 영향: 컴포넌트 크기/위치 조정 시 격자 스냅 기능 정상 작동
- 문제: 버튼 컴포넌트 클릭 시 버튼 동작이 실행되어 선택되지 않음
- 해결:
1. ButtonPrimaryComponent에서 디자인 모드일 때 <button> 대신 <div>로 렌더링
2. ScreenDesigner의 ScreenPreviewProvider에서 isPreviewMode를 false로 설정
3. 디자인 모드에서는 버튼 액션이 실행되지 않고 onClick만 전달되도록 수정
- 영향: button-primary 타입 버튼이 화면 편집기에서 정상적으로 선택 가능
- 드래그 드롭으로 배치되는 인풋 필드 기본 높이 30px로 변경
- 날짜 입력 컴포넌트의 모든 외부 div에 h-full 추가
- 모든 input 요소에 min-h-full 추가하여 부모 높이를 제대로 따르도록 수정
- daterange, year 타입도 동일하게 적용
- 원본 ERP-node 프로젝트의 최신 코드 반영
- NCP Kubernetes 배포를 위한 인프라 파일 추가
- Jenkinsfile: Kaniko 기반 CI/CD 파이프라인
- Dockerfile: 멀티스테이지 빌드 (백엔드 + 프론트엔드)
- values_logistream.yaml: Helm 차트 values 파일
- DEPLOYMENT_GUIDE_KPSLP.md: 배포 가이드 문서
- 불필요한 마이그레이션 계획 문서 36개 정리
- 데이터 조회 API에 회사별 자동 필터링 기능 추가
- GET /api/data/:tableName에 company_code 필터 자동 적용
- GET /api/data/join에 우측 테이블 회사별 필터링 추가
- 최고 관리자(company_code = '*')는 전체 데이터 조회 가능
- 분할 패널 레이아웃 우측 추가 시 조인 컬럼 자동 입력
- 좌측에서 선택한 항목의 조인 키 값을 우측 추가 모달에 자동 설정
- 자동 설정된 필드는 읽기 전용으로 표시 (disabled + 안내 문구)
- 사용자는 나머지 필드만 입력하면 됨
- 데이터 서비스 개선
- getJoinedData 함수에 companyCode 파라미터 추가
- checkColumnExists 함수를 public으로 변경하여 재사용성 향상
- 조인 쿼리에 DISTINCT 추가로 중복 데이터 방지
- 복합키 테이블의 레코드 삭제 지원
- 레코드 생성 시 멀티테넌시 자동 처리
- company_code와 company_name 자동 추가
- 테이블 컬럼 존재 여부 체크 후 자동 설정
- 분할 패널 설정 UI 개선
- 좌측 패널 표시 컬럼 선택 UI 추가
- 추가 폼에 표시할 컬럼 선택 기능 추가
- Primary Key 정보 자동 조회 및 표시
주요 변경사항:
- Dialog/DialogContent를 ResizableDialog/ResizableDialogContent로 변경
- DialogTitle을 ResizableDialogTitle로 변경
- 내부 컨텐츠 컨테이너를 유연한 크기(w-full h-full)로 변경
- minWidth/minHeight 사용으로 최소 크기 보장
참고:
- 컴포넌트 레이아웃이 화면관리에서 설정된 대로 정확히 렌더링됨
- 레이아웃 자체의 문제는 화면관리에서 재설계 필요
파일 변경:
- frontend/components/screen/SaveModal.tsx
주요 변경사항:
- 드래그앤드롭 컬럼의 라벨 숨김 및 placeholder로 라벨명 표시
- 기본 높이 30px로 변경
- 5개 시스템 컬럼(id, created_date, updated_date, writer, company_code) 숨김
- AI-개발자 협업 작업 수칙 문서 작성 및 .cursorrules에 통합
파일 변경:
- frontend/components/screen/ScreenDesigner.tsx
* getDefaultHeight(): 기본 높이를 30px로 변경
* handleDrop(): labelDisplay false, placeholder 추가
- frontend/components/screen/panels/TablesPanel.tsx
* hiddenColumns Set으로 시스템 컬럼 필터링
- .cursor/rules/ai-developer-collaboration-rules.mdc (신규)
* 확인 우선, 한 번에 하나, 철저한 마무리 원칙
* 데이터베이스 검증, 코드 수정, 테스트, 커뮤니케이션 규칙
- .cursorrules
* 필수 확인 규칙 섹션 추가
* 모든 작업 시작/완료 시 협업 규칙 확인 강제화