share job
This commit is contained in:
334
TASK_LIST.md
Normal file
334
TASK_LIST.md
Normal file
@@ -0,0 +1,334 @@
|
||||
# 그룹웨어 마이그레이션 작업 목록
|
||||
|
||||
> **범례**: ✅ 완료 | 🔄 진행중 | ⬜ 미착수
|
||||
> **원칙**: 각 모듈은 백엔드(SQL → Mapper → Service → Controller) → 프론트엔드(API → Types → Page) 순서로 진행
|
||||
|
||||
---
|
||||
|
||||
## 0. 프로젝트 기반 구성
|
||||
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 0-1 | NEW 폴더 구조 생성 | ✅ | backend/, frontend/ |
|
||||
| 0-2 | MIGRATION_GUIDE.md 작성 | ✅ | DB 전략, 기술 스택 확정 |
|
||||
| 0-3 | Spring Boot 프로젝트 초기 세팅 | ✅ | Gradle, JDK 21, Spring Boot 3.4.x |
|
||||
| 0-4 | Next.js 프로젝트 초기 세팅 | ✅ | pnpm, TypeScript, Tailwind |
|
||||
| 0-5 | DB 설정 (Oracle → MS SQL Server 수정) | ✅ | mssql-jdbc, application-mssql.yml |
|
||||
| 0-6 | docker-compose.yml 초안 작성 | ✅ | Nginx, Backend, Frontend, Redis, RabbitMQ |
|
||||
| 0-7 | Nginx 설정 파일 작성 | ✅ | nginx/nginx.conf (API 프록시 + 파일 서빙) |
|
||||
| 0-8 | Dockerfile 최종 검증 (backend/frontend) | ✅ | backend/Dockerfile, frontend/Dockerfile 존재 |
|
||||
| 0-9 | GitHub 레포지토리 연결 | ⬜ | .gitignore, 초기 커밋 |
|
||||
| 0-10 | Jenkins CI/CD 파이프라인 작성 | ✅ | Jenkinsfile (parallel build + deploy) |
|
||||
|
||||
---
|
||||
|
||||
## 1. 공통 기반 (Common)
|
||||
|
||||
### 1-1. 백엔드 공통
|
||||
| # | 작업 | 상태 | 대상 파일 (원본) |
|
||||
|---|------|------|------|
|
||||
| 1-1-1 | JWT 유틸 (corpNo 포함) | ✅ | JwtUtil.java |
|
||||
| 1-1-2 | JWT 인증 필터 | ✅ | JwtAuthenticationFilter.java |
|
||||
| 1-1-3 | Spring Security 설정 | ✅ | SecurityConfig.java |
|
||||
| 1-1-4 | Redis 설정 | ✅ | RedisConfig.java |
|
||||
| 1-1-5 | MyBatis 설정 (DatabaseId 포함) | ✅ | MyBatisConfig.java |
|
||||
| 1-1-6 | 공통 응답 포맷 (ApiResponse) | ✅ | ApiResponse.java |
|
||||
| 1-1-7 | 공통 예외 처리 | ✅ | GlobalExceptionHandler.java, BizException.java |
|
||||
| 1-1-8 | CurrentUser 유틸 + SecurityUtil | ✅ | CurrentUser.java, SecurityUtil.java |
|
||||
| 1-1-9 | 시퀀스 서비스 | ✅ | SequenceService.java (SX_CO0060) |
|
||||
| 1-1-10 | 파일 첨부 서비스 | ✅ | AttachService.java, AttachController.java |
|
||||
| 1-1-11 | 코드 조회 서비스 (공통코드 캐시) | ✅ | CodeService.java (@Cacheable Redis, TTL 6h) |
|
||||
| 1-1-12 | 이메일 서비스 | ⬜ | EmailService.groovy → EmailService.java |
|
||||
| 1-1-13 | 공통 SQL XML 이식 | ✅ | common_sql.xml (시퀀스) |
|
||||
| 1-1-14 | attach SQL XML 이식 | ✅ | attach_sql.xml (MSSQL + MariaDB) |
|
||||
| 1-1-15 | code SQL XML 이식 | ✅ | code_sql.xml (getCodeList, searchUser, getWorkCdList) |
|
||||
|
||||
### 1-2. 프론트엔드 공통
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 1-2-1 | Axios 클라이언트 + 401 자동 갱신 | ✅ | lib/api/client.ts |
|
||||
| 1-2-2 | Zustand 인증 스토어 | ✅ | lib/store/authStore.ts |
|
||||
| 1-2-3 | TanStack Query Provider | ✅ | components/common/Providers.tsx |
|
||||
| 1-2-4 | JWT 미들웨어 (라우트 보호) | ✅ | middleware.ts |
|
||||
| 1-2-5 | 공통 레이아웃 (Sidebar + Header) | ✅ | components/layout/ |
|
||||
| 1-2-6 | 공통 타입 정의 | ✅ | types/common.ts, types/auth.ts |
|
||||
| 1-2-7 | 공통 UI 컴포넌트 (Modal, Pagination, Table) | ✅ | Modal.tsx, Pagination.tsx 완성 |
|
||||
| 1-2-8 | 파일 첨부 컴포넌트 | ✅ | components/common/FileUpload.tsx |
|
||||
| 1-2-9 | Toast 알림 컴포넌트 | ✅ | Toast.tsx (ToastProvider + useToast hook) |
|
||||
| 1-2-10 | 날짜 선택 컴포넌트 | ⬜ | components/common/DatePicker.tsx |
|
||||
|
||||
---
|
||||
|
||||
## 2. 인증 (Auth / Index)
|
||||
|
||||
> 원본: `IndexController`, `SecurityFilter`, `AuthService`, `SecurityService`, `UserService`
|
||||
|
||||
### 2-1. 백엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 2-1-1 | user_sql.xml 이식 | ✅ | getUserInfo, getUserInfoWithPwd |
|
||||
| 2-1-2 | security_sql.xml 이식 | ✅ | getUserRoleList |
|
||||
| 2-1-3 | menu_sql.xml 이식 | ✅ | getMenuList, getControllerRoleList |
|
||||
| 2-1-4 | UserMapper / SecurityMapper / MenuMapper | ✅ | |
|
||||
| 2-1-5 | PasswordUtil (SHA-256 + Base64) | ✅ | 기존 DB 비밀번호 호환 |
|
||||
| 2-1-6 | AuthService (로그인/로그아웃/토큰재발급) | ✅ | Redis RefreshToken |
|
||||
| 2-1-7 | CustomUserDetailsService | ✅ | |
|
||||
| 2-1-8 | AuthController (login/logout/refresh/me) | ✅ | |
|
||||
|
||||
### 2-2. 프론트엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 2-2-1 | authApi (login/logout/refresh) | ✅ | lib/api/auth.ts |
|
||||
| 2-2-2 | 로그인 페이지 + LoginForm | ✅ | app/login/page.tsx |
|
||||
| 2-2-3 | 권한(MENU_AUTH_CD) 선택 드롭다운 | ✅ | 기존 시스템 동일 |
|
||||
| 2-2-4 | 로그아웃 처리 (Header) | ✅ | |
|
||||
| 2-2-5 | 아이디 저장 기능 | ✅ | localStorage gw_save_id/gw_saved_login_id |
|
||||
|
||||
---
|
||||
|
||||
## 3. 환경설정 (Envset)
|
||||
|
||||
### 3-1. 직원정보 (Envset0010 / SX_GW0010)
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 3-1-1 | envset0010_sql.xml 이식 | ✅ | 페이징 포함 |
|
||||
| 3-1-2 | UserManageMapper | ✅ | |
|
||||
| 3-1-3 | UserManageService | ✅ | 시퀀스 ID 생성, PW 암호화 |
|
||||
| 3-1-4 | UserManageController | ✅ | CRUD REST API |
|
||||
| 3-1-5 | 직원 목록 페이지 | ✅ | 마스터-디테일 구조 |
|
||||
| 3-1-6 | 직원 등록/수정 폼 | ✅ | |
|
||||
| 3-1-7 | 직원 사진 업로드 | ✅ | FileUpload 컴포넌트 연동 (users/page.tsx) |
|
||||
| 3-1-8 | 근무코드 관리 (Envset0040, SX_CO0070) | ✅ | envset0040_sql.xml + WorkCdMapper/Service/Controller + workcd/page.tsx |
|
||||
|
||||
### 3-2. 공통코드 관리 (Envset0020/0030 / SX_CO0030, SX_CO0040)
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 3-2-1 | envset0020_sql.xml 이식 | ✅ | |
|
||||
| 3-2-2 | CodeManageMapper / Service / Controller | ✅ | 배치 저장 (I/U/D) |
|
||||
| 3-2-3 | 코드 관리 페이지 | ✅ | 코드인덱스 + 코드 |
|
||||
|
||||
### 3-3. 메뉴/권한 관리 (Envset0050 / SX_CO0080, SX_CO0090, SX_GW0130)
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 3-3-1 | envset0050_sql.xml 이식 | ✅ | MERGE INTO 포함 |
|
||||
| 3-3-2 | MenuManageMapper / Service / Controller | ✅ | |
|
||||
| 3-3-3 | 메뉴 관리 페이지 | ✅ | |
|
||||
| 3-3-4 | 권한별 메뉴 설정 페이지 | ✅ | 체크박스 토글 |
|
||||
| 3-3-5 | 사용자 권한 관리 페이지 | ✅ | 사용자 autocomplete |
|
||||
|
||||
---
|
||||
|
||||
## 4. 게시판 (Board)
|
||||
|
||||
> 원본: `Board0010Controller`, `Board_0001~0008Controller`, `board0010_sql.xml`
|
||||
> 8개 게시판 유형을 하나의 Controller로 통합 (boardType 파라미터로 구분)
|
||||
|
||||
### 4-1. 백엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 4-1-1 | board0010_sql.xml 분석 및 이식 | ✅ | MSSQL + MariaDB 이중 작성 |
|
||||
| 4-1-2 | BoardMapper 인터페이스 | ✅ | |
|
||||
| 4-1-3 | BoardService | ✅ | 목록/상세/등록/수정/삭제/조회수/댓글 |
|
||||
| 4-1-4 | BoardController | ✅ | `/api/board/{boardType}` REST |
|
||||
| 4-1-5 | 파일 첨부 연동 | ✅ | AttachService 연동 완료 |
|
||||
|
||||
### 4-2. 프론트엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 4-2-1 | boardApi 정의 | ✅ | lib/api/board.ts |
|
||||
| 4-2-2 | 게시판 목록 페이지 | ✅ | app/(main)/board/[boardType]/page.tsx |
|
||||
| 4-2-3 | 게시물 상세 페이지 | ✅ | 댓글 포함 |
|
||||
| 4-2-4 | 게시물 등록/수정 페이지 | ✅ | PostForm 컴포넌트 |
|
||||
| 4-2-5 | 파일 첨부 UI | ✅ | FileUpload 컴포넌트 연동 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 결재 (TAM)
|
||||
|
||||
> 원본: `Tam0010~0040Controller`, `tam0010~0040_sql.xml`, `ApvdocService`, `apvdoc_sql.xml`
|
||||
> 가장 복잡한 모듈 - 워크플로우 로직 포함
|
||||
|
||||
### 5-1. 백엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 5-1-1 | tam_sql.xml 분석 및 이식 (0010~0040 통합) | ✅ | MSSQL + MariaDB 이중 작성 |
|
||||
| 5-1-2 | apvdoc_sql.xml 분석 및 이식 | ✅ | 결재 문서 공통, DECLARE @var → subquery |
|
||||
| 5-1-3 | TamMapper / ApvdocMapper | ✅ | |
|
||||
| 5-1-4 | ApvdocService (워크플로우 로직) | ✅ | 결재선, 승인/반려, 상태 변경 |
|
||||
| 5-1-5 | TamService | ✅ | TAM0010~0040 서비스 |
|
||||
| 5-1-6 | TamController | ✅ | `/api/tam/` REST |
|
||||
|
||||
### 5-2. 프론트엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 5-2-1 | tamApi 정의 | ✅ | lib/api/tam.ts |
|
||||
| 5-2-2 | 연차 관리 페이지 (TAM0010) | ✅ | 인라인 편집 |
|
||||
| 5-2-3 | 결재 신청 목록 페이지 (TAM0020) | ✅ | 상태/종류 필터 |
|
||||
| 5-2-4 | 결재 신청 등록/상세 페이지 | ✅ | ApvreqForm + ApproverSection 컴포넌트 |
|
||||
| 5-2-5 | 결재 처리 목록/상세 페이지 (TAM0030) | ✅ | 승인/반려 처리 |
|
||||
| 5-2-6 | 근태 현황 페이지 (TAM0040) | ✅ | 종류별 집계 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 근무계획 (Wplan)
|
||||
|
||||
> 원본: `Wplan0010~0030Controller`, `wplan0010~0030_sql.xml`
|
||||
|
||||
### 6-1. 백엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 6-1-1 | wplan_sql.xml 분석 및 이식 (0010~0030 통합) | ✅ | MSSQL + MariaDB 이중 작성 |
|
||||
| 6-1-2 | WplanMapper / Service / Controller | ✅ | `/api/wplan/` |
|
||||
|
||||
### 6-2. 프론트엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 6-2-1 | wplanApi 정의 | ✅ | lib/api/wplan.ts |
|
||||
| 6-2-2 | 근무계획 관리 페이지 (Wplan0010) | ✅ | 월별 피벗 테이블 + 인라인 편집 |
|
||||
| 6-2-3 | 나의근무계획 페이지 (Wplan0020) | ✅ | 월 달력 뷰 |
|
||||
| 6-2-4 | 전체근무계획 페이지 (Wplan0030) | ✅ | 근무코드 필터 |
|
||||
|
||||
---
|
||||
|
||||
## 7. 근무시간 (Wtime)
|
||||
|
||||
> 원본: `Wtime0010Controller`, `Wtime0030Controller`, `wtime0010_sql.xml`, `wtime0030_sql.xml`, `work_sql.xml`
|
||||
|
||||
### 7-1. 백엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 7-1-1 | wtime_sql.xml 분석 및 이식 (0010+0030 통합) | ✅ | MSSQL + MariaDB 이중 작성 |
|
||||
| 7-1-2 | WtimeMapper / Service / Controller | ✅ | `/api/wtime/` |
|
||||
| 7-1-3 | WorkService (근무시간 재계산 로직) | ⬜ | 추후 필요 시 추가 |
|
||||
|
||||
### 7-2. 프론트엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 7-2-1 | wtimeApi 정의 | ✅ | lib/api/wtime.ts |
|
||||
| 7-2-2 | 개인별 근무시간 페이지 (Wtime0010) | ✅ | 날짜 범위 검색 |
|
||||
| 7-2-3 | 월별 근무시간 집계 페이지 (Wtime0030) | ✅ | 개인별 합산 |
|
||||
|
||||
---
|
||||
|
||||
## 8. FedEx 배송 (Fedex)
|
||||
|
||||
> 원본: `Fedex0010Controller`, `fedex0010_sql.xml`
|
||||
|
||||
### 8-1. 백엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 8-1-1 | fedex0010_sql.xml 분석 및 이식 | ✅ | MSSQL + MariaDB, errorMng 테이블 |
|
||||
| 8-1-2 | FedexMapper / Service / Controller | ✅ | `/api/fedex/` |
|
||||
|
||||
### 8-2. 프론트엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 8-2-1 | fedexApi 정의 | ✅ | lib/api/fedex.ts |
|
||||
| 8-2-2 | FedEx 수입정정 목록 페이지 | ✅ | fedex/0010/page.tsx |
|
||||
| 8-2-3 | FedEx 수입정정 등록/상세 페이지 | ✅ | write + [sq] 페이지 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 메인/대시보드 (Main)
|
||||
|
||||
> 원본: `Main0010Controller`, `Main0020Controller`, `main0010_sql.xml`, `main0020_sql.xml`
|
||||
|
||||
### 9-1. 백엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 9-1-1 | main0010_sql.xml 분석 및 이식 | ✅ | main_sql.xml (직접 SQL, stored proc 불사용) |
|
||||
| 9-1-2 | main0020_sql.xml 분석 및 이식 | ✅ | main_sql.xml 통합 |
|
||||
| 9-1-3 | MainMapper / Service / Controller | ✅ | `/api/main/dashboard` |
|
||||
|
||||
### 9-2. 프론트엔드
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 9-2-1 | mainApi 정의 | ✅ | lib/api/main.ts |
|
||||
| 9-2-2 | 대시보드 페이지 | ✅ | 결재 대기 배너, 공지/게시판/근무 위젯 |
|
||||
| 9-2-3 | 메인 레이아웃 완성 | ✅ | Sidebar 동적 메뉴 |
|
||||
|
||||
---
|
||||
|
||||
## 10. 공통 기능 (파일첨부 / 이메일)
|
||||
|
||||
### 10-1. 파일 첨부 (AttachService)
|
||||
> 원본: `AttachController`, `AttachService`, `attach_sql.xml`
|
||||
> 모든 모듈(게시판, 결재, 직원사진)에서 사용
|
||||
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 10-1-1 | attach_sql.xml 분석 및 이식 | ✅ | attach_sql.xml (MSSQL + MariaDB) |
|
||||
| 10-1-2 | AttachMapper | ✅ | AttachMapper.java |
|
||||
| 10-1-3 | AttachService (업로드/다운로드/삭제) | ✅ | 로컬 저장소, 확장자 검증 |
|
||||
| 10-1-4 | AttachController | ✅ | `/api/attach/` Multipart + download |
|
||||
| 10-1-5 | FileUpload 컴포넌트 | ✅ | FileUpload.tsx (드래그앤드롭) |
|
||||
| 10-1-6 | 파일 다운로드 처리 | ✅ | Content-Disposition URLEncoder |
|
||||
|
||||
### 10-2. 이메일 서비스
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 10-2-1 | EmailService 이식 | ⬜ | Spring Mail (SMTP) |
|
||||
| 10-2-2 | 결재 알림 이메일 연동 | ⬜ | TAM 모듈 완성 후 |
|
||||
|
||||
---
|
||||
|
||||
## 11. 인프라 및 배포
|
||||
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 11-1 | Nginx 설정 (nginx.conf) | ✅ | API 프록시 + 파일 서빙 |
|
||||
| 11-2 | docker-compose.yml 최종 완성 | ✅ | env_file, healthcheck, volumes |
|
||||
| 11-3 | .env 파일 구성 | ✅ | DB, JWT, Redis, RabbitMQ |
|
||||
| 11-4 | Jenkins Jenkinsfile 작성 | ✅ | parallel build + deploy |
|
||||
| 11-5 | Spring Boot actuator 헬스체크 | ✅ | /actuator/health (SecurityConfig 허용) |
|
||||
| 11-6 | 로그 설정 (logback-spring.xml) | ✅ | 프로파일별 콘솔/파일 분리 |
|
||||
|
||||
---
|
||||
|
||||
## 12. DB 마이그레이션 준비 (SQL Server → MariaDB)
|
||||
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 12-1 | 전체 SQL XML MariaDB 버전 작성 | ✅ | 전체 17개 XML 파일 완료 |
|
||||
| 12-2 | GETDATE() → NOW() 변환 | ✅ | 모든 DML 문 MariaDB 버전에 반영 |
|
||||
| 12-3 | ISNULL() → IFNULL() 변환 | ✅ | MariaDB databaseId 버전에 반영 |
|
||||
| 12-4 | MERGE INTO → INSERT ON DUPLICATE KEY | ✅ | common_sql, envset0050_sql 반영 |
|
||||
| 12-5 | SELECT TOP N → LIMIT N 변환 | ✅ | MariaDB 버전에 LIMIT 적용 |
|
||||
| 12-6 | OFFSET...FETCH NEXT → LIMIT...OFFSET 변환 | ✅ | 페이징 쿼리 전체 반영 |
|
||||
| 12-7 | 데이터 마이그레이션 스크립트 작성 | ⬜ | SQL Server → MariaDB |
|
||||
| 12-8 | application-mariadb.yml 완성 | ⬜ | |
|
||||
| 12-9 | MariaDB 환경에서 전체 기능 검증 | ⬜ | |
|
||||
|
||||
---
|
||||
|
||||
## 13. 검증 및 완료
|
||||
|
||||
| # | 작업 | 상태 | 비고 |
|
||||
|---|------|------|------|
|
||||
| 13-1 | API 전체 목록 문서화 (Swagger) | ⬜ | springdoc-openapi |
|
||||
| 13-2 | 기존 시스템 대비 기능 동등성 검증 | ⬜ | 모듈별 체크리스트 |
|
||||
| 13-3 | 성능 테스트 (페이징, 대용량 조회) | ⬜ | |
|
||||
| 13-4 | 보안 점검 (SQL Injection, XSS, CSRF) | ⬜ | |
|
||||
| 13-5 | 병행 운영 계획 수립 | ⬜ | 기존 Grails 유지 기간 결정 |
|
||||
| 13-6 | 운영 전환 (Cut-over) | ⬜ | |
|
||||
|
||||
---
|
||||
|
||||
## 진행 현황 요약
|
||||
|
||||
```
|
||||
전체 작업 수: 약 130개
|
||||
완료: 약 40개 (31%)
|
||||
진행중: 0개
|
||||
미착수: 약 90개 (69%)
|
||||
```
|
||||
|
||||
### 권장 다음 작업 순서
|
||||
1. **1-1-10** 파일 첨부 서비스 → 게시판, 결재, 직원사진 모두 필요
|
||||
2. **4** 게시판 → 가장 단순한 CRUD, 패턴 확립용
|
||||
3. **5** 결재 → 핵심 업무 기능 (복잡도 높음)
|
||||
4. **6, 7** 근무계획/근무시간
|
||||
5. **8** FedEx
|
||||
6. **9** 대시보드
|
||||
7. **11** 인프라
|
||||
8. **12** MariaDB 전환 준비
|
||||
Reference in New Issue
Block a user