# Infoway 개발 가이드
## 개발 환경 설정
### 필수 요구사항
- PHP 5.3.29
- MariaDB/MySQL 5.0+
- Apache 2.x + mod_rewrite
- Git
### 로컬 개발 환경 (Windows)
#### 1. hosts 파일 설정
```
# C:\Windows\System32\drivers\etc\hosts 편집 (관리자 권한)
127.0.0.1 www.dliveletter.kr
127.0.0.1 wizwin.dliveletter.kr
127.0.0.1 parkjonggak.dliveletter.kr
127.0.0.1 test.dliveletter.kr
```
#### 2. Apache VirtualHost 설정
```apache
# httpd-vhosts.conf
ServerName www.dliveletter.kr
ServerAlias *.dliveletter.kr
DocumentRoot "E:/wizwin_stb/DLive/dliveletter.kr/DLIVE-Zinpack-AI/infoway/_infoway"
AllowOverride All
Require all granted
```
#### 3. 데이터베이스 설정
```bash
# MySQL 접속
mysql -u root -p
# 데이터베이스 생성
CREATE DATABASE infoway CHARACTER SET utf8 COLLATE utf8_general_ci;
# SQL 파일 임포트
mysql -u root -p infoway < infoway.sql
```
#### 4. 설정 파일 수정
```php
// include/config.php
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_password = 'your_password';
$mysql_db = 'infoway';
$iw['server_path'] = "E:/wizwin_stb/DLive/dliveletter.kr/DLIVE-Zinpack-AI/infoway/_infoway";
$iw['default_domain'] = "www.dliveletter.kr";
```
## 새 기능 개발 워크플로우
### 1. BBS 모듈 개발
#### 단계별 프로세스
```
1. 요구사항 분석
↓
2. 데이터베이스 테이블 설계
↓
3. 파일 구조 생성 (BBS 패턴)
↓
4. 코드 작성 (PHP 5.3 호환)
↓
5. 테넌트 격리 테스트
↓
6. 보안 검증
↓
7. 배포
```
#### 파일 템플릿
**목록 페이지 (module_list.php)**
```php
| 번호 |
제목 |
등록일 |
관리 |
| =$row['module_no']?> |
=stripslashes($row['module_title'])?> |
=$row['module_datetime']?> |
수정
삭제
|
```
**작성 처리 (module_write_ok.php)**
```php
```
### 2. 데이터베이스 테이블 추가
```sql
-- 새 테이블 생성 템플릿
CREATE TABLE IF NOT EXISTS `iw_module_table` (
`module_no` int(11) NOT NULL AUTO_INCREMENT COMMENT '번호',
`ep_code` varchar(20) NOT NULL COMMENT '테넌트 코드',
`gp_code` varchar(20) NOT NULL COMMENT '그룹 코드',
`mb_code` varchar(20) DEFAULT NULL COMMENT '작성자',
`module_title` varchar(255) NOT NULL COMMENT '제목',
`module_content` text COMMENT '내용',
`module_datetime` datetime DEFAULT NULL COMMENT '등록일',
PRIMARY KEY (`module_no`),
KEY `idx_ep_gp` (`ep_code`,`gp_code`),
KEY `idx_datetime` (`module_datetime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='모듈 테이블';
```
**config.php에 테이블 추가**
```php
// include/config.php
$iw['module_table'] = $iw['table_prefix'] . "module_table";
```
### 3. 프론트엔드 개발
#### Modern Card UI 사용
```html
```
#### jQuery 사용 (제한적)
```javascript
// PHP 5.3 환경에서는 구버전 jQuery 사용
```
#### AJAX 요청
```javascript
$.ajax({
url: 'ajax_process.php',
type: 'POST',
data: {
type: '=$iw['type']?>',
ep: '=$iw['store']?>',
gp: '=$iw['group']?>',
action: 'submit',
data: value
},
success: function(response) {
alert('성공');
},
error: function() {
alert('실패');
}
});
```
## 테스트 가이드
### 1. 테넌트 격리 테스트
```
시나리오:
1. 테넌트 A (wizwin) 로그인
2. 데이터 생성
3. 테넌트 B (parkjonggak) 로그인
4. 테넌트 A의 데이터가 보이지 않는지 확인
확인 항목:
✅ 목록에 다른 테넌트 데이터 없음
✅ 직접 URL 접근 차단 (다른 ep_code)
✅ 파일 업로드 경로 분리
```
### 2. 권한 테스트
```
시나리오:
1. 일반 회원으로 로그인
2. 관리자 페이지 접근 시도
3. "잘못된 접근입니다" 메시지 확인
확인 항목:
✅ member_check.php 권한 체크
✅ URL 직접 입력 차단
✅ POST 요청 권한 검증
```
### 3. 보안 테스트
```
테스트 항목:
1. SQL Injection
- ' OR '1'='1 입력
- addslashes() 확인
2. XSS
- 입력
- htmlspecialchars() 확인
3. 직접 접근
- URL에서 파일 직접 호출
- _INFOWAY_ 상수 체크
```
## 디버깅
### 에러 로그 확인
```php
// 디버그 모드 활성화 (개발 시만)
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 로그 출력
error_log("Debug: " . print_r($variable, true));
```
### 쿼리 디버깅
```php
// 쿼리 출력
echo $sql;
exit;
// 결과 확인
print_r($row);
exit;
```
### 세션 디버깅
```php
// 세션 내용 확인
echo "";
print_r($_SESSION);
echo "
";
exit;
```
## 코드 스타일 가이드
### PHP
```php
// 들여쓰기: 탭
// 중괄호: 같은 줄
if ($condition) {
// 코드
} else {
// 코드
}
// 함수명: snake_case
function get_member_info($mb_code) {
// ...
}
// 변수명: snake_case
$member_info = array();
```
### SQL
```sql
-- 대문자: 키워드
-- 들여쓰기: 가독성 우선
SELECT
column1,
column2
FROM
table_name
WHERE
ep_code = 'value'
AND condition = 'value'
ORDER BY
column1 DESC;
```
### HTML/CSS
```html
```
## Git 워크플로우
### 브랜치 전략
```bash
main (master) # 프로덕션
├─ develop # 개발
│ ├─ feature/module-name # 기능 개발
│ ├─ bugfix/issue-name # 버그 수정
│ └─ hotfix/critical-bug # 긴급 수정
```
### 커밋 메시지
```bash
# 형식
[TYPE] 제목
본문 (선택)
관련 이슈: #123
# TYPE 종류
[FEAT] 새 기능
[FIX] 버그 수정
[DOCS] 문서 수정
[STYLE] 코드 포맷팅
[REFACTOR] 리팩토링
[TEST] 테스트 코드
[CHORE] 기타 작업
# 예시
[FEAT] AI 명함 목록 페이지 추가
- BBS 패턴 적용
- ep_code 테넌트 격리
- Modern Card UI 적용
관련 이슈: #45
PHP 5.3 호환: ✅
테넌트 테스트: ✅
```
## 참고 자료
- [.cursorrules](.cursorrules): 프로젝트 규칙
- [architecture.md](../analysis/architecture.md): 아키텍처
- [multitenant.md](../analysis/multitenant.md): 멀티테넌트
- [php53-constraints.md](../analysis/php53-constraints.md): PHP 5.3 제약
- [troubleshooting.md](troubleshooting.md): 문제 해결
---
**마지막 업데이트**: 2024-11-05
**다음 문서**: [배포 가이드](deployment.md)