# 현재 이슈 및 개선 필요 사항 ## 🔴 긴급 (Critical) ### 1. 보안 취약점 **우선순위**: ⭐⭐⭐⭐⭐ #### 1.1 SQL Injection 재검증 필요 ``` 상태: ⚠️ 점검 필요 위치: 전체 시스템 현재 상황: - addslashes() 사용 중 (구형 방식) - magic_quotes_gpc 의존 - Prepared Statements 미사용 권장 조치: 1. 모든 쿼리 재검토 2. mysqli 또는 PDO로 전환 검토 (PHP 버전 제약) 3. 입력 검증 강화 영향: - 데이터 유출 위험 - 테넌트 간 데이터 접근 가능성 ``` #### 1.2 CSRF 토큰 부재 ``` 상태: ❌ 미구현 위치: 모든 폼 처리 현재 상황: - POST 요청에 CSRF 토큰 없음 - 세션 검증만 의존 권장 조치: 1. CSRF 토큰 생성 함수 작성 2. 모든 폼에 토큰 추가 3. 처리 페이지에서 검증 예시 코드: // common.php에 추가 function generate_csrf_token() { if (!isset($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = md5(uniqid(mt_rand(), true)); } return $_SESSION['csrf_token']; } function verify_csrf_token($token) { return isset($_SESSION['csrf_token']) && $_SESSION['csrf_token'] === $token; } ``` #### 1.3 비밀번호 해싱 방식 확인 필요 ``` 상태: ⚠️ 확인 필요 위치: include/member_check.php, bbs/m/all_login_ok.php 현재 상황: - 해싱 방식 불명확 (MD5/SHA1 사용 추정) - password_hash() 미지원 (PHP 5.3) 권장 조치: 1. 현재 해싱 방식 확인 2. SHA256 + Salt로 업그레이드 3. 또는 password_compat 라이브러리 사용 ``` --- ## 🟠 높음 (High) ### 2. 모바일 백키 에러 **우선순위**: ⭐⭐⭐⭐ ``` 상태: 🐛 버그 확인됨 위치: 일부 페이지 (구체적 위치 파악 필요) 증상: - 모바일에서 뒤로가기 버튼 클릭 시 에러 - 페이지가 정상 로드되지 않음 - 브라우저 캐시 관련 이슈 추정 가능한 원인: 1. 세션 만료 2. ep_code/gp_code 파라미터 누락 3. JavaScript 에러 4. 브라우저 Back/Forward Cache 충돌 조사 필요: 1. 어떤 페이지에서 발생하는지 특정 2. 브라우저 콘솔 에러 로그 확인 3. 세션 상태 확인 4. 히스토리 API 사용 여부 임시 해결: // 페이지 헤더에 추가 header("Cache-Control: no-cache, must-revalidate"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); ``` ### 3. 테넌트 격리 검증 **우선순위**: ⭐⭐⭐⭐ ``` 상태: ⚠️ 전체 검토 필요 위치: 전체 시스템 문제: - 일부 쿼리에 ep_code 필터 누락 가능성 - 크로스 테넌트 공격 가능성 점검 필요 파일: 1. bbs/admin/*.php (304개) 2. bbs/m/*.php (127개) 3. bbs/super/*.php (71개) 검증 방법: # 1. ep_code 없는 SELECT 찾기 grep -r "SELECT.*FROM iw_" --include="*.php" | grep -v "ep_code" # 2. INSERT에 ep_code 누락 찾기 grep -r "INSERT INTO iw_" --include="*.php" | grep -v "ep_code" # 3. UPDATE에 ep_code 조건 없음 grep -r "UPDATE iw_" --include="*.php" | grep -v "WHERE.*ep_code" ``` ### 4. 성능 병목 현상 **우선순위**: ⭐⭐⭐ ``` 상태: ⚠️ 최적화 필요 위치: 대용량 데이터 조회 페이지 증상: - 목록 페이지 로딩 지연 (5초 이상) - 대용량 테이블 조회 시 타임아웃 - N+1 쿼리 문제 확인된 문제: 1. 인덱스 부족 - ep_code, gp_code 복합 인덱스 미적용 - 검색 필드 인덱스 부족 2. 비효율적 쿼리 - 서브쿼리 남용 - LIKE '%keyword%' (전방 일치 권장) - 루프 내 쿼리 실행 3. 페이징 미적용 - 일부 페이지에서 전체 데이터 조회 최적화 계획: # 1. 인덱스 추가 CREATE INDEX idx_ep_gp ON iw_member(ep_code, gp_code); CREATE INDEX idx_datetime ON iw_notice(ep_code, gp_code, nt_datetime); # 2. 쿼리 최적화 - JOIN 사용 (서브쿼리 제거) - LIMIT 적용 - SELECT 필드 명시 (SELECT * 지양) # 3. 캐싱 적용 - 자주 조회되는 데이터 세션 캐싱 - 정적 데이터 파일 캐싱 ``` --- ## 🟡 중간 (Medium) ### 5. UI 일관성 부족 **우선순위**: ⭐⭐⭐ ``` 상태: 🎨 개선 필요 위치: 전체 프론트엔드 문제: - 구형 UI (Bootstrap 3)와 신형 UI (Modern Card) 혼재 - 일부 페이지 디자인 불일치 - 모바일 반응형 일부만 적용 개선 계획: 1. Bootstrap 5 마이그레이션 - 현재: Bootstrap 3.0.0 (2013년) - 목표: Bootstrap 5.3 (2023년) - 호환성 체크 필요 2. Modern Card UI 전체 적용 - design/css/modern-card.css - 카드 기반 레이아웃 - 그라데이션 배경 3. 다크 모드 지원 - CSS 변수 사용 - 사용자 설정 저장 우선 순위: 1단계: 관리자 페이지 2단계: 사용자 페이지 3단계: 모바일 최적화 ``` ### 6. AI 명함 시스템 개선 **우선순위**: ⭐⭐⭐ ``` 상태: 📝 기능 개선 필요 위치: bbs/admin/mcb_*, bbs/m/mcb_* 현재 vs 목표: ┌─────────────────┬──────────────┬─────────────┐ │ 항목 │ 현재 상태 │ 목표 │ ├─────────────────┼──────────────┼─────────────┤ │ UI/UX │ 기본 (2015) │ 모던 (2024) │ │ 모바일 대응 │ 부분적 │ 완전 반응형 │ │ 이미지 처리 │ 수동 │ 자동 최적화 │ │ SEO │ 미흡 │ 완전 적용 │ │ QR 코드 │ 없음 │ 자동 생성 │ │ vCard │ 없음 │ 다운로드 │ └─────────────────┴──────────────┴─────────────┘ 개선 항목: 1. 데이터 모델 확장 - 현재: iw_mcb_data (단일 테이블) - 추가: iw_mcb_career (경력) - 추가: iw_mcb_portfolio (포트폴리오) - 추가: iw_mcb_social (SNS) 2. 기능 추가 - QR 코드 자동 생성 - vCard 다운로드 - 소셜 공유 (OG 태그) - 명함 템플릿 선택 3. SEO 통합 - iw_seo 테이블 연동 - Schema.org Person 마크업 ``` ### 7. jQuery 의존도 감소 **우선순위**: ⭐⭐ ``` 상태: 🔄 점진적 전환 필요 위치: 전체 JavaScript 현재 상황: - jQuery 광범위 사용 - 구버전 사용 (버전 확인 필요) - 바닐라 JS로 대체 가능한 부분 많음 전환 계획: 1. 간단한 DOM 조작 // jQuery $('#element').addClass('active'); // Vanilla JS document.getElementById('element').classList.add('active'); 2. AJAX 요청 // jQuery $.ajax({url: 'api.php', success: fn}); // Vanilla JS fetch('api.php').then(response => response.json()).then(fn); 3. 이벤트 핸들링 // jQuery $('.btn').click(fn); // Vanilla JS document.querySelectorAll('.btn').forEach(el => { el.addEventListener('click', fn); }); 단계적 접근: - Phase 1: 신규 페이지는 바닐라 JS - Phase 2: 기존 페이지 점진적 전환 - Phase 3: jQuery 완전 제거 ``` --- ## 🟢 낮음 (Low) ### 8. 코드 중복 제거 **우선순위**: ⭐⭐ ``` 상태: 🔧 리팩토링 필요 위치: 전체 코드베이스 중복 패턴: 1. 페이징 코드 - 매 페이지마다 동일한 로직 - lib/lib_common.php에 함수화 필요 2. 권한 체크 - if ($iw['level'] != "admin") 반복 - 함수로 추출 3. 파일 업로드 - 유사한 업로드 코드 반복 - 공통 함수화 개선 예시: // lib/lib_common.php에 추가 function check_admin_permission() { global $iw; if ($iw['level'] != "admin") { alert("잘못된 접근입니다!",""); } } // 사용 check_admin_permission(); ``` ### 9. 에러 핸들링 개선 **우선순위**: ⭐⭐ ``` 상태: ⚠️ 개선 필요 위치: 전체 시스템 현재 문제: - 에러 메시지 사용자에게 노출 - 로깅 시스템 부족 - try-catch 미사용 (일부) 개선 계획: 1. 에러 로그 시스템 - logs/ 디렉토리 생성 - error_log() 활용 - 일별 로그 파일 2. 사용자 친화적 메시지 - 기술적 에러 숨김 - 간단한 안내 메시지 - 관리자에게만 상세 정보 3. 에러 핸들러 등록 // common.php에 추가 function custom_error_handler($errno, $errstr, $errfile, $errline) { $log = date('Y-m-d H:i:s') . " [$errno] $errstr in $errfile:$errline\n"; error_log($log, 3, "logs/errors_" . date('Y-m-d') . ".log"); // 사용자에게는 간단한 메시지 if ($errno == E_ERROR || $errno == E_USER_ERROR) { alert("일시적인 오류가 발생했습니다. 잠시 후 다시 시도해주세요."); } } set_error_handler('custom_error_handler'); ``` ### 10. 테스트 자동화 부재 **우선순위**: ⭐ ``` 상태: ❌ 미구현 위치: N/A 현재 상황: - 수동 테스트만 수행 - 회귀 테스트 어려움 - 배포 전 불안 도입 계획: 1. 유닛 테스트 (제한적) - PHPUnit (PHP 5.3 호환 버전) - 핵심 함수 테스트 2. 통합 테스트 - 시나리오 기반 테스트 - Selenium (선택) 3. 테스트 환경 - Docker 기반 격리 환경 - 테스트 데이터베이스 제약사항: - PHP 5.3 호환 테스트 프레임워크 제한적 - 레거시 코드 테스트 어려움 ``` --- ## 📋 개선 로드맵 ### Phase 1: 긴급 (1주일) - [ ] SQL Injection 재검증 - [ ] CSRF 토큰 구현 - [ ] 모바일 백키 에러 수정 - [ ] 테넌트 격리 전체 검증 ### Phase 2: 높음 (1개월) - [ ] 성능 최적화 (인덱스, 쿼리) - [ ] UI 일관성 개선 (Bootstrap 5) - [ ] AI 명함 시스템 개선 ### Phase 3: 중간 (3개월) - [ ] jQuery 의존도 감소 - [ ] 코드 중복 제거 - [ ] 에러 핸들링 개선 ### Phase 4: 낮음 (장기) - [ ] 테스트 자동화 도입 - [ ] Docker 개발 환경 - [ ] PHP 버전 업그레이드 검토 --- ## 📞 이슈 보고 새로운 이슈 발견 시 다음 정보를 포함하여 보고: ```markdown ## 이슈 제목 **우선순위**: ⭐⭐⭐⭐⭐ / ⭐⭐⭐⭐ / ⭐⭐⭐ / ⭐⭐ / ⭐ **상태**: 🔴 긴급 / 🟠 높음 / 🟡 중간 / 🟢 낮음 **위치**: [파일 또는 모듈 경로] ### 증상 [무엇이 잘못되었는지] ### 재현 방법 1. [단계 1] 2. [단계 2] 3. [단계 3] ### 예상 동작 [어떻게 동작해야 하는지] ### 실제 동작 [실제로 어떻게 동작하는지] ### 환경 - PHP: 5.3.29 - 브라우저: [브라우저명 + 버전] - 테넌트: [ep_code] ### 스크린샷 / 로그 [이미지 또는 에러 로그] ``` --- **마지막 업데이트**: 2024-11-05 **관련 문서**: [README.md](README.md), [development.md](../guides/development.md)