docs: add project docs and test updates
This commit is contained in:
27
docs/개발 규칙/00-README.md
Normal file
27
docs/개발 규칙/00-README.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# 개발 규칙 (Development Rules)
|
||||
|
||||
> **AI 코드 생성 시 반드시 참고**: 본 폴더의 규칙을 따라 Auth 프로젝트와 동일한 스타일로 개발한다.
|
||||
|
||||
## 문서 목록
|
||||
|
||||
| 파일 | 내용 |
|
||||
|------|------|
|
||||
| [01-개발스타일.md](01-개발스타일.md) | 전체 개발 스타일·흐름 (Auth 기준) |
|
||||
| [02-코딩컨벤션.md](02-코딩컨벤션.md) | PHP/네이밍/포맷 규칙 |
|
||||
| [03-파일분리구조.md](03-파일분리구조.md) | Controller / Model / Config 분리 구조 |
|
||||
| [04-CSS정리구조.md](04-CSS정리구조.md) | CSS·Tailwind·커스텀 스타일 정리 |
|
||||
| [05-View정리구조.md](05-View정리구조.md) | 뷰 디렉터리·파일·공통 요소 |
|
||||
| [06-데이터베이스정리구조.md](06-데이터베이스정리구조.md) | 테이블·컬럼·Model 매핑 규칙 |
|
||||
| [07-전체구조.md](07-전체구조.md) | 프로젝트 전체 디렉터리·역할 요약 |
|
||||
| [08-디자인규칙.md](08-디자인규칙.md) | **디자인 기준**·레이아웃·색상·버튼·테이블 (기준: `app/Views/bag/daily_inventory.php`) |
|
||||
|
||||
## 참조 구현 (기준 코드)
|
||||
|
||||
- **Controller**: `app/Controllers/Auth.php`
|
||||
- **Model**: `app/Models/MemberModel.php`, `app/Models/MemberLogModel.php`
|
||||
- **View**: `app/Views/auth/login.php`, `app/Views/auth/register.php`
|
||||
- **디자인 기준 뷰**: `app/Views/bag/daily_inventory.php` (일관된 디자인 시 이 파일 참고)
|
||||
- **Route**: `app/Config/Routes.php`
|
||||
- **Config**: `app/Config/Roles.php`
|
||||
|
||||
새 기능 추가 시 위 파일들의 패턴을 따르고, 본 폴더 규칙과 충돌 시 **본 폴더 규칙을 우선**한다.
|
||||
50
docs/개발 규칙/01-개발스타일.md
Normal file
50
docs/개발 규칙/01-개발스타일.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 개발 스타일 (Development Style)
|
||||
|
||||
> Auth 프로젝트(`Auth.php`, `auth/login.php`, `MemberModel`)를 기준으로 한 개발 스타일. AI 생성 코드는 이 스타일을 따른다.
|
||||
|
||||
## 1. 요청 흐름
|
||||
|
||||
- **GET**: 폼 표시 또는 목록 조회 → `view('폴더/파일')` 반환.
|
||||
- **POST**: 유효성 검사 → Model 호출 → 성공 시 `redirect()->to(...)->with('success', ...)`, 실패 시 `redirect()->back()->withInput()->with('error'|'errors', ...)`.
|
||||
|
||||
## 2. 컨트롤러 메서드 패턴
|
||||
|
||||
| 용도 | 메서드명 예시 | 동작 |
|
||||
|------|----------------|------|
|
||||
| 폼 표시 | `showLoginForm()`, `create()`, `edit($id)` | `return view('auth/login');` 등 |
|
||||
| 처리 | `login()`, `store()`, `update($id)`, `delete($id)` | `$this->validate()` → Model → `redirect()` |
|
||||
|
||||
- 폼 표시 메서드는 가능하면 `showXxxForm()` 또는 리소스형 `index`, `create`, `edit` 사용.
|
||||
- 처리 메서드는 동사형(`login`, `store`, `update`, `delete`).
|
||||
|
||||
## 3. 유효성 검사
|
||||
|
||||
- 규칙·메시지는 배열로 정의, 한글 메시지 사용.
|
||||
- 실패 시: `redirect()->back()->withInput()->with('errors', $this->validator->getErrors())`.
|
||||
- 단일 에러 메시지는 `with('error', '메시지')`.
|
||||
|
||||
```php
|
||||
$rules = ['login_id' => 'required|max_length[50]', ...];
|
||||
$messages = ['login_id' => ['required' => '아이디를 입력해 주세요.', ...]];
|
||||
if (! $this->validate($rules, $messages)) {
|
||||
return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
|
||||
}
|
||||
```
|
||||
|
||||
## 4. Model 사용
|
||||
|
||||
- `model(MemberModel::class)` 형태로 로드.
|
||||
- 조회·추가·수정·삭제는 Model 메서드에 위임. 컨트롤러에서 직접 쿼리 빌더 노출 최소화.
|
||||
|
||||
## 5. 리다이렉트
|
||||
|
||||
- 성공: `redirect()->to(site_url('/'))->with('success', '...')` 또는 `redirect()->to('login')->with('success', '...')`.
|
||||
- 실패: `redirect()->back()->withInput()->with('error', '...')` 또는 `with('errors', ...)`.
|
||||
- 내부 URL은 `site_url()` 또는 `base_url()` 사용.
|
||||
|
||||
## 6. 뷰 공통
|
||||
|
||||
- 출력 시 `esc()` 사용. 폼에는 `csrf_field()`, `old('필드명')` 사용.
|
||||
- 플래시: `session()->getFlashdata('success')`, `getFlashdata('error')`, `getFlashdata('errors')` 표시.
|
||||
|
||||
이 스타일을 유지하면 Auth와 동일한 톤으로 확장된다.
|
||||
42
docs/개발 규칙/02-코딩컨벤션.md
Normal file
42
docs/개발 규칙/02-코딩컨벤션.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# 코딩 컨벤션 (Coding Convention)
|
||||
|
||||
> PHP 8.2+, CodeIgniter 4 기준. Auth·MemberModel·MemberLogModel 스타일을 따른다.
|
||||
|
||||
## 1. PHP 기본
|
||||
|
||||
- **네임스페이스**: `App\Controllers`, `App\Models`, `Config` 등 CI4 규칙 준수.
|
||||
- **클래스명**: PascalCase. 컨트롤러는 단수/역할명(`Auth`, `Home`). 모델은 `~Model` 접미사(`MemberModel`).
|
||||
- **메서드명**: camelCase. 동사+명사(`showLoginForm`, `findByLoginId`).
|
||||
- **상수**: 클래스 상수는 `UPPER_SNAKE_CASE` (`MB_STATE_NORMAL`, `LEVEL_SUPER_ADMIN`).
|
||||
- **private/protected**: 비공개 로직은 `private` 메서드로 분리(예: `buildLogData`, `insertMemberLog`).
|
||||
|
||||
## 2. 타입·공백
|
||||
|
||||
- 메서드 인자·반환 타입 선언 권장. 예: `function findByLoginId(string $mbId): ?object`, `function buildLogData(string $mbId, ?int $mbIdx): array`.
|
||||
- 연산자·쉼표 뒤 공백. `if (! $this->validate(...))` 처럼 `!` 뒤 공백.
|
||||
- 배열 키·값 정렬 시 화살표 정렬로 가독성 유지(선택).
|
||||
|
||||
## 3. 네이밍 규칙 요약
|
||||
|
||||
| 구분 | 규칙 | 예시 |
|
||||
|------|------|------|
|
||||
| 컨트롤러 | PascalCase, 단수/역할 | `Auth`, `Home`, `Admin\User` |
|
||||
| 메서드 | camelCase | `showLoginForm`, `login`, `create`, `store` |
|
||||
| 뷰 폴더 | 소문자, 컨트롤러 대응 | `auth/`, `home/`, `admin/user/` |
|
||||
| 뷰 파일 | 소문자, 언더스코어 가능 | `login.php`, `register.php`, `daily_inventory.php` |
|
||||
| 라우트 URI | 소문자, 케밥 또는 경로 | `login`, `logout`, `admin/users` |
|
||||
| 모델 | PascalCase + Model | `MemberModel`, `MemberLogModel` |
|
||||
| 테이블 | 소문자, 언더스코어 | `member`, `member_log` |
|
||||
| 테이블 PK | 테이블 약어_idx | `mb_idx`, `mll_idx` |
|
||||
| 테이블 컬럼 | 테이블 약어_컬럼명 | `mb_id`, `mb_name`, `mll_regdate` |
|
||||
|
||||
## 4. 주석
|
||||
|
||||
- 클래스 상단·복잡한 비즈니스 로직에 한글 주석 허용. 예: `/** mb_state: 1=정상, 2=정지, 0=탈퇴 */`.
|
||||
- PHPDoc: `@param`, `@return`, `@var` 등 필요 시 사용.
|
||||
|
||||
## 5. Config 참조
|
||||
|
||||
- 설정은 `config('Roles')`, `config('App')` 등으로 접근. `config('Roles')->getLevelName($level)` 형태 사용.
|
||||
|
||||
이 컨벤션을 지키면 Auth와 동일한 코드 스타일로 유지된다.
|
||||
57
docs/개발 규칙/03-파일분리구조.md
Normal file
57
docs/개발 규칙/03-파일분리구조.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# 파일 분리 구조 (File Separation Structure)
|
||||
|
||||
> Auth·Home·Member·MemberLog 기준. 컨트롤러/모델/설정 역할별 분리 규칙.
|
||||
|
||||
## 1. 컨트롤러 (Controllers)
|
||||
|
||||
- **위치**: `app/Controllers/`
|
||||
- **네임스페이스**: `App\Controllers` 또는 서브(예: `App\Controllers\Admin`).
|
||||
- **기준**: `Auth.php` — 로그인/로그아웃/회원가입 등 한 도메인당 한 컨트롤러.
|
||||
- **상속**: `extends BaseController`.
|
||||
- **역할**: 요청 수신 → 유효성 → Model 호출 → view() 또는 redirect(). 비즈니스 로직은 Model·별도 클래스로 분리.
|
||||
|
||||
```
|
||||
app/Controllers/
|
||||
├── BaseController.php # 공통 상속
|
||||
├── Auth.php # 로그인/로그아웃/회원가입
|
||||
├── Home.php # 홈/대시보드
|
||||
└── Admin/ # 관리자단(선택)
|
||||
├── Dashboard.php
|
||||
├── User.php
|
||||
└── ...
|
||||
```
|
||||
|
||||
## 2. 모델 (Models)
|
||||
|
||||
- **위치**: `app/Models/`
|
||||
- **네임스페이스**: `App\Models`
|
||||
- **기준**: `MemberModel.php`, `MemberLogModel.php` — 테이블 1:1, `$table`, `$primaryKey`, `$allowedFields` 정의.
|
||||
- **역할**: DB 접근·조회/추가/수정/삭제. 컨트롤러는 Model 메서드만 호출.
|
||||
|
||||
```
|
||||
app/Models/
|
||||
├── MemberModel.php # member 테이블
|
||||
└── MemberLogModel.php # member_log 테이블
|
||||
```
|
||||
|
||||
## 3. 설정 (Config)
|
||||
|
||||
- **위치**: `app/Config/`
|
||||
- **기준**: `Routes.php`, `Roles.php` — 라우트·역할 등 앱 전역 설정.
|
||||
- **역할**: URL 라우팅, 역할 코드·한글명 매핑 등. 비즈니스 로직은 넣지 않는다.
|
||||
|
||||
```
|
||||
app/Config/
|
||||
├── Routes.php # 라우트 정의
|
||||
├── Roles.php # mb_level 상수·levelNames
|
||||
├── App.php
|
||||
├── Database.php
|
||||
└── ...
|
||||
```
|
||||
|
||||
## 4. 라우트 규칙
|
||||
|
||||
- **GET** = 폼/목록, **POST** = 처리. 같은 URI를 GET/POST로 나누는 패턴 사용(예: `get('login')`, `post('login')`).
|
||||
- 그룹 필요 시 `$routes->group('admin', ['filter' => 'adminAuth'], function ($routes) { ... });` 형태.
|
||||
|
||||
새 기능 추가 시 위 구조에 맞춰 Controller/Model/Config를 분리하고, Auth·Member와 동일한 패턴을 따른다.
|
||||
42
docs/개발 규칙/04-CSS정리구조.md
Normal file
42
docs/개발 규칙/04-CSS정리구조.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# CSS 정리 구조 (CSS Organization)
|
||||
|
||||
> Auth·일일봉투 수불현황 뷰 기준. Tailwind + 페이지 단위 커스텀 스타일.
|
||||
|
||||
## 1. 기본 원칙
|
||||
|
||||
- **Tailwind CSS**를 메인으로 사용. CDN: `https://cdn.tailwindcss.com?plugins=forms,container-queries`.
|
||||
- **페이지/화면 단위**로 필요한 경우에만 `tailwind.config` 확장(colors, fontFamily 등)과 `<style>` 블록 사용.
|
||||
- 프로젝트 공통 스타일이 있으면 한 곳에 모아서 참조(예: 레이아웃·버튼 클래스).
|
||||
|
||||
## 2. Tailwind 설정 (페이지 내)
|
||||
|
||||
- 뷰 파일 `<head>` 안 `<script>` 에서 `tailwind.config.theme.extend` 로 커스텀 색·폰트 정의.
|
||||
- **Auth(로그인) 예**: `page-bg`, `brand-blue`, `brand-blue-hover`, `text-primary`, `text-secondary`, `input-border`, `fontFamily.sans`, `boxShadow.soft`.
|
||||
- **업무 화면(일일봉투 등) 예**: `system-header`, `title-bar`, `control-panel`, `btn-search`, `btn-excel-border`, `btn-excel-text`, `btn-print-border`, `btn-exit`, `fontSize.xxs`.
|
||||
|
||||
## 3. 커스텀 CSS 블록
|
||||
|
||||
- **용도**: 테이블, 스크롤, 레이아웃 등 Tailwind만으로 표현하기 어려운 부분.
|
||||
- **위치**: 같은 뷰 파일 내 `<style data-purpose="...">` 로 구분. 예: `data-purpose="typography"`, `data-purpose="table-layout"`.
|
||||
- **네이밍**: 클래스명은 소문자·하이픈. 예: `.data-table`, `.main-content-area`. 페이지 특화 클래스는 해당 뷰에만 두기.
|
||||
|
||||
## 4. 폰트
|
||||
|
||||
- **로그인/간단 폼**: Inter 등 (예: Google Fonts `Inter`).
|
||||
- **업무 화면**: `Malgun Gothic`, `Noto Sans KR` 등 (예: `fontFamily.sans` 에 배열로 지정).
|
||||
|
||||
## 5. 반응형·접근성
|
||||
|
||||
- `min-h-screen`, `max-w-[420px]` 등 유틸리티로 레이아웃. 필요 시 `md:` 브레이크포인트 사용.
|
||||
- 포커스 링 등은 Tailwind `focus:`, `focus-visible:` 로 통일.
|
||||
|
||||
## 6. 정리
|
||||
|
||||
| 구분 | 사용처 | 비고 |
|
||||
|------|--------|------|
|
||||
| Tailwind 유틸리티 | 전체 | 기본 스타일 |
|
||||
| tailwind.config.extend | 뷰별 | 색, 폰트, 그림자 등 |
|
||||
| <style> 블록 | 뷰별 | 테이블, 스크롤, 레이아웃 |
|
||||
| data-purpose | <style> | 블록 용도 구분 |
|
||||
|
||||
새 화면 추가 시 기존 Auth·일일봉투 수불현황 뷰의 Tailwind·config·style 구조를 참고해 동일한 방식으로 정리한다. **디자인 일관성**(레이아웃·색상·버튼·테이블)은 [08-디자인규칙.md](08-디자인규칙.md)를 따른다.
|
||||
67
docs/개발 규칙/05-View정리구조.md
Normal file
67
docs/개발 규칙/05-View정리구조.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# View 정리 구조 (View Organization)
|
||||
|
||||
> Auth·Home·bag 뷰 기준. 디렉터리·파일명·공통 요소 규칙.
|
||||
|
||||
## 1. 디렉터리 구조
|
||||
|
||||
- **컨트롤러와 1:1 대응**하는 폴더. 컨트롤러명 소문자 = 뷰 폴더명.
|
||||
- **한글/공백 없음**. 소문자·언더스코어 사용.
|
||||
|
||||
```
|
||||
app/Views/
|
||||
├── auth/ # Auth 컨트롤러
|
||||
│ ├── login.php
|
||||
│ └── register.php
|
||||
├── home/ # Home 컨트롤러
|
||||
│ └── dashboard.php
|
||||
├── bag/ # 업무 화면(뷰만 있을 수 있음)
|
||||
│ └── daily_inventory.php
|
||||
├── admin/ # 관리자단(선택)
|
||||
│ ├── user/
|
||||
│ │ ├── index.php
|
||||
│ │ ├── create.php
|
||||
│ │ └── edit.php
|
||||
│ └── ...
|
||||
└── errors/ # CI4 기본 에러 뷰
|
||||
```
|
||||
|
||||
## 2. 파일명 규칙
|
||||
|
||||
- **소문자**, 단어 구분은 **언더스코어** 가능. 예: `login.php`, `register.php`, `daily_inventory.php`.
|
||||
- **목록**: `index.php`. **폼**: `create.php`(등록), `edit.php`(수정). **기능별**: `login.php`, `login_history.php` 등.
|
||||
|
||||
## 3. 뷰 호출 (컨트롤러)
|
||||
|
||||
- `return view('auth/login');` — 확장자 없음, 경로는 `Views/` 기준 상대 경로.
|
||||
- 서브폴더: `view('admin/user/create')`.
|
||||
|
||||
## 4. 공통 요소 (필수·권장)
|
||||
|
||||
- **출력 이스케이프**: `<?= esc($변수) ?>`, `<?= esc(session()->getFlashdata('success')) ?>`.
|
||||
- **폼**: `action="<?= base_url('login') ?>"`, `method="POST"`, `<?= csrf_field() ?>`.
|
||||
- **입력값 복원**: `value="<?= esc(old('login_id')) ?>"`.
|
||||
- **플래시 메시지**: `success`, `error`, `errors` 표시.
|
||||
|
||||
```php
|
||||
<?php if (session()->getFlashdata('success')): ?>
|
||||
<div class="..."><?= esc(session()->getFlashdata('success')) ?></div>
|
||||
<?php endif; ?>
|
||||
<?php if (session()->getFlashdata('error')): ?> ... <?php endif; ?>
|
||||
<?php if (session()->getFlashdata('errors')): ?>
|
||||
<?php foreach (session()->getFlashdata('errors') as $error): ?>
|
||||
<p><?= esc($error) ?></p>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
```
|
||||
|
||||
## 5. 레이아웃 (선택)
|
||||
|
||||
- 공통 헤더·푸터가 있으면 레이아웃 뷰를 두고, 각 뷰는 본문만 포함. (현재 Auth·bag은 풀 페이지 HTML.)
|
||||
- 링크: `base_url()`, `base_url('logout')` 등으로 통일.
|
||||
|
||||
## 6. HTML 기본
|
||||
|
||||
- `lang="ko"`, `charset="utf-8"`, viewport 메타.
|
||||
- 제목: `<title>화면명 - 쓰레기봉투 물류시스템</title>` 형태 권장.
|
||||
|
||||
새 뷰 추가 시 `auth/login.php`, `auth/register.php`, `bag/daily_inventory.php` 구조를 참고해 같은 규칙으로 만든다.
|
||||
39
docs/개발 규칙/06-데이터베이스정리구조.md
Normal file
39
docs/개발 규칙/06-데이터베이스정리구조.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# 데이터베이스 정리 구조 (Database Organization)
|
||||
|
||||
> member, member_log 테이블·MemberModel·MemberLogModel 기준. 테이블·컬럼·Model 매핑 규칙.
|
||||
|
||||
## 1. 테이블 네이밍
|
||||
|
||||
- **소문자**, 단어 구분 **언더스코어**. 예: `member`, `member_log`.
|
||||
- 복수형보다 **단수형** 선호. 예: `member` (회원 테이블).
|
||||
|
||||
## 2. PK·컬럼 네이밍
|
||||
|
||||
- **PK**: `테이블약어_idx`. 예: `mb_idx`(member), `mll_idx`(member_log).
|
||||
- **컬럼**: `테이블약어_컬럼명` 또는 **공통 약어** 유지.
|
||||
- member: `mb_id`, `mb_passwd`, `mb_name`, `mb_email`, `mb_phone`, `mb_lang`, `mb_level`, `mb_group`, `mb_state`, `mb_regdate`, `mb_latestdate`, `mb_leavedate`.
|
||||
- member_log: `mll_success`, `mb_idx`, `mb_id`, `mll_regdate`, `mll_ip`, `mll_msg`, `mll_useragent`, `mll_logout_date`, `mll_url`, `mll_referer` 등.
|
||||
|
||||
## 3. Model 매핑
|
||||
|
||||
- **파일명**: `테이블명을 PascalCase로 + Model`. 예: `member` → `MemberModel.php`, `member_log` → `MemberLogModel.php`.
|
||||
- **클래스**: `$table = 'member'`, `$primaryKey = 'mb_idx'`, `$returnType = 'object'`, `$useTimestamps = false`, `$allowedFields = [...]` 명시.
|
||||
- **역할**: 해당 테이블에 대한 조회·추가·수정·삭제만. 복잡한 비즈니스 로직은 서비스/헬퍼로 분리 가능.
|
||||
|
||||
## 4. 타입·일자
|
||||
|
||||
- **일자/시간**: DB·PHP 모두 `Y-m-d H:i:s` (또는 DB DATETIME) 사용. 예: `mb_regdate`, `mb_latestdate`, `mll_regdate`, `mll_logout_date`.
|
||||
- **상태값**: 숫자 상수 사용. 예: `mb_state` 1=정상, 2=정지, 0=탈퇴. 상수는 컨트롤러 또는 Config에 정의.
|
||||
|
||||
## 5. FK·참조
|
||||
|
||||
- 다른 테이블 PK 참조 시 컬럼명에 **참조 테이블 약어** 사용. 예: `member_log.mb_idx` → member 테이블 PK 참조.
|
||||
- Model에서는 `allowedFields`에 FK 컬럼 포함. 조인 필요 시 메서드에서 처리.
|
||||
|
||||
## 6. 새 테이블 추가 시
|
||||
|
||||
1. 테이블명·PK·컬럼명을 위 규칙으로 정한다.
|
||||
2. `app/Models/` 에 `XxxModel.php` 생성, `$table`, `$primaryKey`, `$allowedFields` 설정.
|
||||
3. 마이그레이션 사용 시 CI4 Migrations 규칙 준수. (현재 프로젝트는 마이그레이션 없이 테이블 직접 생성 가능.)
|
||||
|
||||
이 구조를 따르면 member·member_log와 동일한 네이밍·Model 패턴으로 확장된다.
|
||||
53
docs/개발 규칙/07-전체구조.md
Normal file
53
docs/개발 규칙/07-전체구조.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# 전체 구조 (Overall Project Structure)
|
||||
|
||||
> 종량제 쓰레기봉투 물류시스템(CodeIgniter 4) 프로젝트 전체 구조. AI 생성 시 이 구조를 유지한다.
|
||||
|
||||
## 1. 프로젝트 루트
|
||||
|
||||
```
|
||||
jongryangje/
|
||||
├── app/
|
||||
│ ├── Config/ # 설정 (Routes, Roles, App, Database 등)
|
||||
│ ├── Controllers/ # 컨트롤러 (Auth, Home, Admin/* 등)
|
||||
│ ├── Models/ # 모델 (MemberModel, MemberLogModel 등)
|
||||
│ ├── Views/ # 뷰 (auth/, home/, bag/, admin/ 등)
|
||||
│ ├── Database/ # 마이그레이션·시더(선택)
|
||||
│ └── ...
|
||||
├── public/ # DOCROOT (index.php, .htaccess)
|
||||
├── writable/ # 로그, 캐시, 세션
|
||||
├── docs/ # 문서 (개발 규칙, ai용 개발계획 등)
|
||||
├── tests/이름의 첫글자, 마지막 글자를 제외한 나머지는 * 로가림
|
||||
- 개인 휴대전화 번호의 중간 번호는 *로 가림
|
||||
└── vendor/
|
||||
```
|
||||
|
||||
## 2. app 디렉터리 역할
|
||||
|
||||
| 디렉터리 | 역할 | 기준 예시 |
|
||||
|----------|------|-----------|
|
||||
| **Config** | 라우트·역할·DB·앱 전역 설정 | Routes.php, Roles.php |
|
||||
| **Controllers** | 요청 처리·유효성·Model 호출·view/redirect | Auth.php, Home.php |
|
||||
| **Models** | 테이블 접근·CRUD·조회 메서드 | MemberModel, MemberLogModel |
|
||||
| **Views** | HTML·폼·플래시 메시지·base_url/csrf_field/esc/old | auth/login.php, bag/daily_inventory.php |
|
||||
|
||||
## 3. 요청 흐름 (전체)
|
||||
|
||||
1. **진입**: `public/index.php` → Boot → Routes.
|
||||
2. **라우트**: `Routes.php`에서 URI → `Controller::method` 매핑.
|
||||
3. **컨트롤러**: BaseController 상속, `validate` → Model → `view()` 또는 `redirect()`.
|
||||
4. **뷰**: `Views/폴더/파일.php` 렌더, `esc()`, `base_url()`, `csrf_field()`, 플래시 표시.
|
||||
5. **모델**: DB 접근, 컨트롤러에서 `model(XxxModel::class)` 호출.
|
||||
|
||||
## 4. 참조 구현 요약
|
||||
|
||||
- **인증**: `Auth::showLoginForm`, `Auth::login`, `Auth::logout`, `auth/login.php`, `auth/register.php`, `MemberModel`, `MemberLogModel`.
|
||||
- **홈**: `Home::index` → 로그인 시 `bag/daily_inventory`, 비로그인 시 `welcome_message`.
|
||||
- **설정**: `Roles.php` — mb_level 상수·levelNames. `Routes.php` — GET/POST 라우트.
|
||||
|
||||
## 5. 문서·규칙 위치
|
||||
|
||||
- **개발 규칙**: `docs/개발 규칙/` (00~07 번호 부여).
|
||||
- **AI용 개발계획**: `docs/ai용 개발계획/` (관리자단 설계 등).
|
||||
- **기본 개발계획**: `docs/기본 개발계획/`.
|
||||
|
||||
새 기능·새 화면 추가 시 위 전체 구조와 `docs/개발 규칙/` 내 규칙을 함께 참고해 Auth와 동일한 스타일로 구현한다.
|
||||
106
docs/개발 규칙/08-디자인규칙.md
Normal file
106
docs/개발 규칙/08-디자인규칙.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# 디자인 규칙 (Design Rules)
|
||||
|
||||
> **디자인 기준(Reference)**: `app/Views/bag/daily_inventory.php` (일일 봉투 수불 현황)
|
||||
> 새 화면·뷰는 이 파일과 **일관성 있게** 디자인한다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 기준 뷰
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| 기준 파일 | `app/Views/bag/daily_inventory.php` |
|
||||
| 화면명 | 일일 봉투 수불 현황 |
|
||||
| 기술 스택 | Tailwind CSS v3 (CDN), Noto Sans KR |
|
||||
|
||||
---
|
||||
|
||||
## 2. 레이아웃 구조
|
||||
|
||||
업무 화면은 아래 순서로 구성한다. (일일 봉투 수불과 동일한 구조 권장)
|
||||
|
||||
| 구역 | 클래스/역할 | 비고 |
|
||||
|------|-------------|------|
|
||||
| **상단 네비** | `header` | 배경 흰색, 하단 보더, h-12, 로고·메뉴·로그아웃(종료) |
|
||||
| **타이틀 바** | `bg-title-bar` | 배경 `#2c3e50`, 흰색 글자, 화면 제목 표시 |
|
||||
| **조건/버튼 패널** | `bg-control-panel` | 배경 `#f8f9fa`, 조회 조건·버튼 영역 |
|
||||
| **본문** | `main` (`.main-content-area`) | 테이블 등 콘텐츠, `height: calc(100vh - 170px)`, overflow auto |
|
||||
| **푸터** | `footer` | 배경 gray-200, 상태/버전/일시 등 |
|
||||
|
||||
- `body`: `flex flex-col h-screen`, 전체 높이 고정·스크롤은 본문만.
|
||||
|
||||
---
|
||||
|
||||
## 3. 색상 (Tailwind config)
|
||||
|
||||
`tailwind.config.theme.extend.colors` 에 아래를 정의하고 사용한다.
|
||||
|
||||
| 이름 | 값 | 용도 |
|
||||
|------|-----|------|
|
||||
| `system-header` | `#ffffff` | 상단 헤더 배경 |
|
||||
| `title-bar` | `#2c3e50` | 타이틀 바 배경 |
|
||||
| `control-panel` | `#f8f9fa` | 조건/버튼 패널 배경 |
|
||||
| `btn-search` | `#1c4e80` | 조회 버튼 배경 |
|
||||
| `btn-excel-border` | `#28a745` | 엑셀 버튼 테두리 |
|
||||
| `btn-excel-text` | `#28a745` | 엑셀 버튼 글자 |
|
||||
| `btn-print-border` | `#ced4da` | 인쇄 버튼 테두리 |
|
||||
| `btn-print-text` | `#000000` | 인쇄 버튼 글자 |
|
||||
| `btn-exit` | `#d9534f` | 종료 버튼 배경 |
|
||||
|
||||
- 링크/강조: `text-gray-600` + `hover:text-blue-600`, 선택 메뉴: `text-blue-700 font-bold border-b-2 border-blue-700`.
|
||||
|
||||
---
|
||||
|
||||
## 4. 폰트
|
||||
|
||||
- **fontFamily.sans**: `'"Malgun Gothic"', '"Noto Sans KR"', 'sans-serif'`
|
||||
- **Google Fonts**: `<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap" rel="stylesheet"/>`
|
||||
- 필요 시 `fontSize.xxs` (`0.65rem`) 등 확장 정의.
|
||||
|
||||
---
|
||||
|
||||
## 5. 버튼 스타일
|
||||
|
||||
| 종류 | 클래스 예시 | 용도 |
|
||||
|------|-------------|------|
|
||||
| **조회** | `bg-btn-search text-white px-4 py-1.5 rounded-sm ... shadow hover:opacity-90` | 주 액션(조회·검색) |
|
||||
| **엑셀** | `bg-white text-btn-excel-text border border-btn-excel-border ... hover:bg-green-50` | 보조(엑셀 저장 등) |
|
||||
| **인쇄** | `bg-white text-black border border-btn-print-border ... hover:bg-gray-50` | 보조(인쇄) |
|
||||
| **종료** | `bg-btn-exit text-white ... hover:bg-red-700` | 로그아웃·닫기 |
|
||||
|
||||
- 아이콘은 SVG, `w-4 h-4` 등으로 크기 통일.
|
||||
|
||||
---
|
||||
|
||||
## 6. 테이블
|
||||
|
||||
- **클래스**: `data-table` (커스텀 스타일 블록에서 정의)
|
||||
- **스타일 요약**:
|
||||
- `th`/`td`: border `#ccc`, padding `4px 8px`, font-size `13px`
|
||||
- `th`: 배경 `#e9ecef`, 굵게, 가운데 정렬
|
||||
- 짝수 행: 배경 `#f9f9f9` (zebra)
|
||||
- 행 hover: 배경 `#e6f7ff`
|
||||
- 정렬: `.text-left`, `.text-right`, `.text-center` 활용.
|
||||
|
||||
---
|
||||
|
||||
## 7. 상단 네비·로고
|
||||
|
||||
- **로고**: 파란 사각형(`#2563eb`) 위 흰 사각형 두 개 겹친 SVG (기준 뷰와 동일 형태 권장).
|
||||
- **시스템명**: "쓰레기봉투 물류시스템", `base_url()` 링크.
|
||||
- **메뉴**: `text-sm font-medium text-gray-600`, hover 시 `text-blue-600`, 현재 메뉴는 `text-blue-700 font-bold border-b-2 border-blue-700`.
|
||||
- **종료(로그아웃)**: X 아이콘, `hover:text-red-600`, `base_url('logout')` 링크.
|
||||
|
||||
---
|
||||
|
||||
## 8. 플래시 메시지
|
||||
|
||||
- 성공: `bg-green-50 text-green-700 text-sm`, `rounded-lg`, `p-3`.
|
||||
- 에러: 동일 구조로 `bg-red-50 text-red-700` 등으로 통일.
|
||||
|
||||
---
|
||||
|
||||
## 9. 일관성 원칙
|
||||
|
||||
- 새로 만드는 **업무 화면**(목록·조회·입력 폼 등)은 위 레이아웃·색상·버튼·테이블 규칙을 따르고, `daily_inventory.php`와 **시각적으로 어울리도록** 구성한다.
|
||||
- **Auth(로그인/회원가입)** 등 단순 폼은 기존대로 카드형·Inter 폰트 등 유지해도 되며, 필요 시 본 규칙의 색·버튼만 참고해 통일감을 맞출 수 있다.
|
||||
Reference in New Issue
Block a user