# 027 마이그레이션 실행 가이드 ## 개요 `dept_info` 테이블에 `company_code` 컬럼을 추가하는 마이그레이션입니다. ## 실행 방법 ### 방법 1: Docker Compose를 통한 실행 (권장) ```bash # 1. 현재 사용 중인 Docker Compose 파일 확인 cd /Users/kimjuseok/ERP-node # 2. DB 컨테이너 이름 확인 docker ps | grep postgres # 3. 마이그레이션 실행 docker exec -i psql -U postgres -d ilshin < db/migrations/027_add_company_code_to_dept_info.sql # 예시 (컨테이너 이름이 'erp-node-db-1'인 경우): docker exec -i erp-node-db-1 psql -U postgres -d ilshin < db/migrations/027_add_company_code_to_dept_info.sql ``` ### 방법 2: pgAdmin 또는 DBeaver를 통한 실행 1. pgAdmin 또는 DBeaver 실행 2. PostgreSQL 서버 연결: - Host: `39.117.244.52` - Port: `11132` - Database: `plm` - Username: `postgres` - Password: `ph0909!!` 3. `db/migrations/027_add_company_code_to_dept_info.sql` 파일 내용을 복사 4. SQL 쿼리 창에 붙여넣기 5. 실행 (F5 또는 Execute 버튼) ### 방법 3: psql CLI를 통한 직접 연결 ```bash # 1. psql 설치 확인 psql --version # 2. 직접 연결하여 마이그레이션 실행 psql -h 39.117.244.52 -p 11132 -U postgres -d plm -f db/migrations/027_add_company_code_to_dept_info.sql ``` ## 마이그레이션 검증 마이그레이션이 성공적으로 실행되었는지 확인: ```sql -- 1. company_code 컬럼 추가 확인 SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'dept_info' AND column_name = 'company_code'; -- 2. 인덱스 생성 확인 SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'dept_info' AND indexname = 'idx_dept_info_company_code'; -- 3. 데이터 마이그레이션 확인 (company_code가 모두 채워졌는지) SELECT company_code, COUNT(*) as dept_count FROM dept_info GROUP BY company_code ORDER BY company_code; -- 4. NULL 값이 있는지 확인 (없어야 정상) SELECT COUNT(*) as null_count FROM dept_info WHERE company_code IS NULL; ``` ## 롤백 방법 (문제 발생 시) ```sql -- 1. 인덱스 제거 DROP INDEX IF EXISTS idx_dept_info_company_code; -- 2. company_code 컬럼 제거 ALTER TABLE dept_info DROP COLUMN IF EXISTS company_code; ``` ## 주의사항 1. **백업 필수**: 마이그레이션 실행 전 반드시 데이터베이스 백업 2. **운영 환경**: 운영 환경에서는 점검 시간에 실행 권장 3. **트랜잭션**: 마이그레이션은 하나의 트랜잭션으로 실행됨 (실패 시 자동 롤백) 4. **성능**: `dept_info` 테이블 크기에 따라 실행 시간이 다를 수 있음 ## 마이그레이션 내용 요약 1. `company_code` 컬럼 추가 (VARCHAR(20)) 2. `company_code` 인덱스 생성 3. 기존 데이터 마이그레이션 (`hq_name` → `company_code`) 4. `company_code`를 NOT NULL로 변경 5. 기본값 'ILSHIN' 설정 ## 관련 파일 - 마이그레이션 파일: `db/migrations/027_add_company_code_to_dept_info.sql` - 백엔드 API 수정: `backend-node/src/controllers/adminController.ts` - 프론트엔드 API: `frontend/lib/api/user.ts`