세티스 구조추가

This commit is contained in:
2026-07-20 13:55:46 +09:00
parent d479c7c4ab
commit 4e6a41b266
2 changed files with 87 additions and 14 deletions
+28 -8
View File
@@ -1,4 +1,4 @@
# (주)삼안 ERP 및 그룹웨어 시스템 (Satis) 하이레벨 아키텍처 명세서
# (주)삼안 ERP 시스템 (Satis) 하이레벨 아키텍처 명세서
본 문서는 (주)삼안의 **ERP 시스템(`Satis`)** 프로젝트의 전체 하이레벨 아키텍처(HLA) 명세서입니다.
시스템 개요, 계층 구조, 기술 스택, 업무 도메인, **인프라/배포, 보안/인증, 외부 시스템 연동, 프론트엔드 아키텍처, 개발 운영 구조**를 종합적으로 포함합니다.
@@ -131,8 +131,28 @@ d:\41.dev\10.saman\
│ │ ├── Common/ # 공통 팝업, SMS, PDF, OTP (17개 컨트롤러)
│ │ ├── Jqgrid/ # jqGrid JSON 데이터 응답
│ │ └── Fileupload/ # 파일 업로드 처리
│ ├── model/ # 비즈니스 로직 (모듈별 Logic 클래스)
├── util/ # 시스템 유틸리티 클래스
│ ├── model/ # 비즈니스 로직 (20개 업무 모듈별 Logic 클래스)
│ ├── Account/ # 회계/전표/원가 Logic (41개 logic 파일)
│ │ ├── Person/ # 인사/급여/근태/연말정산 Logic (36개 logic 파일)
│ │ ├── Project/ # 프로젝트/공정/기성/원가 Logic (16개 logic 파일)
│ │ ├── Document/ # 전자결재 문서 Logic
│ │ ├── Sign/ # 전자서명/결재 처리 Logic (SignLogic.php 등)
│ │ ├── Sale/ # 영업/입찰/수금/실적 Logic (9개 logic 파일)
│ │ ├── Purchase/ # 구매/발주/정산 Logic (4개 logic 파일)
│ │ ├── Travel/ # domestic/overseas 출장 정산 Logic
│ │ ├── Asset/ # 고정자산/자산구매 Logic (3개 logic 파일)
│ │ ├── Book/ # 도서 대여/목록 관리 Logic
│ │ ├── Association/ # 협회 관리 Logic
│ │ ├── Management/ # 공통코드/메뉴권한/알림/이력 Logic (4개 logic 파일)
│ │ ├── Supervisor/ # 시스템 관리자 Logic (Supervisor_logic.php 등)
│ │ ├── Common/ # 공통 팝업/SMS/PDF/OTP Logic (17개 logic 파일)
│ │ ├── Jqgrid/ # jqGrid 그리드 전용 응답 Logic (Jqgrid_logic.php)
│ │ ├── Fileupload/ # 파일 업로드/인사 이미지 처리 Logic (8개 파일)
│ │ ├── Help/ # 사용자 도움말 Logic
│ │ ├── Report/ # 출력 보고서 전용 Logic (Report_logic.php)
│ │ ├── Sample/ # 시스템 표준 샘플 Logic
│ │ └── TestLogic.php # 개발 및 테스트 전용 Logic
│ ├── util/ # 시스템 유틸리티 클래스 (OracleClass, AuthClass 등)
│ │ ├── OracleClass.php # Oracle OCI 커넥션 핵심 클래스 (1,392라인)
│ │ ├── AuthClass.php # CSRF 토큰 / 세션 보안 (591라인)
│ │ ├── LoginInfomation.php # 로그인 상태 / 개인 권한 검증
@@ -265,16 +285,16 @@ sequenceDiagram
graph TD
SatisCore["Satis ERP Core System<br/>(PHP Application Server)"]
SatisCore <-->|OCI Native: oci_connect('satis','SATIS11707808','samandb')| OracleDB["Oracle DB (Main ERP)<br/>그룹웨어, 인사, 회계, 프로젝트, 결재"]
SatisCore <-->|mssql_connect: 192.168.13.50:5539<br/>DZGUEST/dzguest123| iCubeDB["더존 iCube ERP (MS-SQL)<br/>DB: DZICUBE<br/>회계전표 연동, 인사급여 싱크"]
SatisCore <-->|mysql_connect: erp.samaneng.com<br/>root/vbxsystem| IntranetDB["인트라넷 MySQL<br/>DB: hallaerp<br/>전자결재 사원/부서 정보, 코드 사전"]
SatisCore <-->|OCI Native: oci_connect('satis','**********','samandb')| OracleDB["Oracle DB (Main ERP)<br/>그룹웨어, 인사, 회계, 프로젝트, 결재"]
SatisCore <-->|mssql_connect: 192.168.13.50:5539<br/>DZGUEST/**********| iCubeDB["더존 iCube ERP (MS-SQL)<br/>DB: DZICUBE<br/>회계전표 연동, 인사급여 싱크"]
SatisCore <-->|mysql_connect: erp.samaneng.com<br/>root/**********| IntranetDB["인트라넷 MySQL<br/>DB: hallaerp<br/>전자결재 사원/부서 정보, 코드 사전"]
SatisCore -->|SMS API| SMSSvc["SMS 발송 서비스<br/>기술자보수교육 대상자 알림<br/>프로젝트 미결재 알림"]
SatisCore -->|PdfLogic| PDFSvc["PDF 생성 서비스<br/>결재문서/보고서 PDF 변환"]
```
| 연동 시스템 | 접속 방식 | 연동 목적 | 관련 파일 |
| :--- | :--- | :--- | :--- |
| **Oracle DB (Main)** | OCI8: `oci_connect('satis','SATIS11707808','samandb')` | ERP 핵심 데이터 (결재/인사/회계/프로젝트) | `OracleClass.php` |
| **Oracle DB (Main)** | OCI8: `oci_connect('satis','**************','samandb')` | ERP 핵심 데이터 (결재/인사/회계/프로젝트) | `OracleClass.php` |
| **더존 iCube ERP** | MS-SQL: `192.168.13.50:5539` DB: `DZICUBE` | 회계 전표 더존 전송, 인사/급여 싱크 | `saman_icube_dbcon.inc` |
| **인트라넷 MySQL** | MySQL: `erp.samaneng.com` DB: `hallaerp` | 전자결재용 사원/부서 코드, 문서 마스터 | `dbcon.inc`, `approval_function.php` |
| **SMS 서비스** | PHP Logic 클래스 | 기술자 보수교육 대상자 알림, 프로젝트 미결재 경고 문자 | `sms_controller.php`, `sms_logic.php` |
@@ -370,7 +390,7 @@ Smarty `.tpl` 파일은 아래의 일관된 명명 규칙을 따릅니다.
> **레거시 PHP 드라이버 사용**: `mysql_connect()`, `mssql_connect()`는 PHP 7.0에서 완전히 제거된 deprecated 함수입니다. PHP 5.6 이하 환경에서만 실행 가능합니다.
> [!CAUTION]
> **DB 접속 정보 평문 노출**: `dbcon.inc`(root/vbxsystem), `saman_icube_dbcon.inc`(DZGUEST/dzguest123$), `OracleClass.php`(satis/SATIS11707808) 소스 코드에 DB 계정이 하드코딩되어 있습니다.
> **DB 접속 정보 평문 노출**: `dbcon.inc`(root/**********), `saman_icube_dbcon.inc`(DZGUEST/**********), `OracleClass.php`(satis/****************) 소스 코드에 DB 계정이 하드코딩되어 있습니다.
> [!WARNING]
> **SQL Injection 위험**: `approval_function.php`, `function.php` 등 다수 함수에서 `$mCode` 값을 필터링 없이 SQL에 직접 삽입합니다. `mysql_real_escape_string()` 미적용.
+59 -6
View File
@@ -1,13 +1,13 @@
# (주)삼안 ERP 및 그룹웨어 시스템 (Satis) 초상세 로우레벨 분석 명세서
# (주)삼안 ERP 시스템 (Satis) 초상세 로우레벨 분석 명세서
본 문서는 (주)삼안의 **ERP 및 그룹웨어 시스템 (`saman-statis` / `Satis`)**의 실제 소스 코드를 직접 분석한
본 문서는 (주)삼안의 **ERP 시스템 (`Satis`)**의 실제 소스 코드를 직접 분석한
**초상세 로우레벨(Ultra-Detailed Low-Level) 구현 명세서**입니다.
`OracleClass.php` 전체 메소드 명세, 전자결재 알고리즘, 문서번호 채번 방식, 인코딩 파이프라인, 결재 서명 렌더링,
시스템 글로벌 변수, DB 데이터 모델, 보안 핸들링 등을 실제 소스 코드 기반으로 완전히 명세합니다.
`OracleClass.php` 전체 메소드 명세, **비즈니스 로직(Model / `Satis/sys/model/*`) 20개 모듈 구조**, 전자결재 알고리즘,
문서번호 채번 방식, 인코딩 파이프라인, 결재 서명 렌더링, 시스템 글로벌 변수, DB 데이터 모델, 보안 핸들링 등을 명세합니다.
---
## 1. 모듈별 컨트롤러 & 뷰 맵핑 딕셔너리 (Module Controller-View Map)
## 1. 모듈별 컨트롤러, 모델 & 뷰 맵핑 딕셔너리 (Controller - Model - View Map)
### 1.1 회계 관리 모듈 (`Account`) — 30개 컨트롤러
| 컨트롤러 (`Satis/sys/controller/Account/`) | 대응 View (`Smarty/templates/Satis/Account/`) | 주요 기능 |
@@ -82,6 +82,59 @@
| `TargetManagement_Controller.php` | `TargetManagement.tpl` | 수주 목표 관리 |
| `PrinterCopy_Controller.php` | `PrinterCopy.tpl` | 인쇄 출력 처리 |
### 1.4 비즈니스 로직 (Model 계층: `Satis/sys/model/*`) 20개 모듈 명세
Model 계층은 MVC 아키텍처 중 비즈니스 데이터 처리 및 DB 저장 프로시저(SP) 파라미터 구성, 결과 데이터 가공을 담당합니다. 모든 Logic 클래스는 생성자에서 `$this->oracle = new OracleClass($smarty)`를 초기화하여 데이터베이스에 접근합니다.
#### A. 모듈별 대표 Logic 클래스 목록
| 모듈 디렉토리 (`Satis/sys/model/`) | 포함 Logic 파일 수 | 주요 Logic 클래스명 (`*_logic.php`) | 핵심 역할 및 기능 |
| :--- | :---: | :--- | :--- |
| **Account** | 41개 | `AccountSlipTemp_logic.php`, `AccountSlipConfirmed_logic.php`, `AccountGisungCalculation_logic.php`, `FinalClosing_logic.php` | 임시/확정 전표 처리, 기성 청구금액 계산, 원가 배부, 결산 처리 |
| **Person** | 36개 | `PersonInfoManager_logic.php`, `PersonPaymentCalculation_logic.php`, `PersonYearEndTax_logic.php`, `PersonAppointment_logic.php` | 인사기록, 급여/상여 산출 엔진, 연말정산(`yeta_data`), 인사 발령 |
| **Project** | 16개 | `Project_logic.php`, `ProjectOrderContract_logic.php`, `ProjectMenHour_logic.php`, `ProjectOrderGisung_logic.php` | 프로젝트 마스터, 수주/변경 계약, M/M 공수 투입 집계, 기성 수금 |
| **Document** | 1개 | `Document_logic.php` | 전자결재 서식 생성, 문서 양식 데이터 파싱 |
| **Sign** | 6개 | `SignLogic.php`, `SignDocumentLogic.php` | 전자서명 문서 생성, 결재선 저장, 결재 상태 검증 및 서명 렌더링 |
| **Sale** | 9개 | `SaleBid_logic.php`, `SaleContractManager_logic.php`, `SalePerformanceManager_logic.php` | 영업 입찰, 수주 계약, 수금 및 수주 실적 관리 |
| **Purchase** | 4개 | `PurchaseClaim_logic.php`, `PurchaseOrder_logic.php`, `PurchaseExactCalculation_logic.php` | 구매 신청, 발주 처리, 대금 정산 |
| **Travel** | 1개 | `Travel_logic.php` | 국내/해외 출장 신청 및 여비 정산 처리 |
| **Asset** | 3개 | `AssetInfo_logic.php`, `AssetPurchase_logic.php`, `AssetBasicCode_logic.php` | 고정자산 등록, 자산 구매, 자산 코드 관리 |
| **Book** | 1개 | `Book_logic.php` | 도서 목록 등록 및 대여/반납 처리 |
| **Association**| 1개 | `Association_logic.php` | 엔지니어링 협회 회원 관리 및 수수료 정산 |
| **Management** | 4개 | `CommonCode_logic.php`, `MenuAuth_logic.php`, `Notify_logic.php` | 시스템 공통 코드, 사용자 메뉴 권한, 알림 팝업 |
| **Supervisor** | 2개 | `Supervisor_logic.php` | 시스템 전체 공정코드, 부서코드, 권한 마스터 관리 |
| **Common** | 17개 | `sms_logic.php`, `PdfLogic.php`, `popup_logic.php`, `work_logic.php` | SMS 발송 연동, PDF 출력 변환, 공통 팝업 데이터 공급 |
| **Jqgrid** | 1개 | `Jqgrid_logic.php` | jqGrid 요청에 대응하는 JSON 데이터 바인딩 로직 |
| **Fileupload** | 8개 | `Fileupload_logic.php`, `AddCode01_upload_insa_image.php` | 첨부파일 업로드/다운로드, 인사 사진 업로드 및 삭제 |
| **Help** | 1개 | `Help_logic.php` | 시스템 사용 도움말 및 Q&A 로직 |
| **Report** | 1개 | `Report_logic.php` | 경영진 보고서 및 엑셀 보고서 데이터 가공 |
| **Sample** | 1개 | `Sample01_logic.php` | 표준 개발용 샘플 로직 |
| **TestLogic** | 1개 | `TestLogic.php` | 개발자 테스트 전용 로직 |
#### B. Model (Logic) 클래스의 공통 설계 구조 패턴
1. **초기화 및 의존성 주입**:
```php
class AccountSlipTempLogic {
var $oracle;
var $smarty;
function AccountSlipTempLogic($smarty) {
$this->smarty = $smarty;
$this->oracle = new OracleClass($smarty); // DB 객체 인스턴스화
}
}
```
2. **Controller 파라미터 바인딩 및 프로시저 호출**:
* Controller의 `$ActionMode` 요청에 따라 Logic 클래스 내 동명의 메소드가 실행됩니다.
* 입력 파라미터를 sanitize 및 인코딩 변환(`HangleEncodeUTF8_EUCKR`) 후 Oracle 저장 프로시저 호출 구문(`BEGIN usp_...; END;`)을 완성합니다.
* `LoadProcedure_new()` 또는 `executeSelect()`를 호출하여 결과를 Smarty 뷰로 전달합니다.
3. **파일 업로드 및 이미지 관리 로직 (`Fileupload_logic.php` & `AddCode01_...`)**:
* 인사기록카드 사원 사진 업로드 시 `AddCode01_upload_insa_image.php`를 통해 이미지를 서브 디렉터리(`erpphoto/`)로 이송하고 파일명을 사번(`MemberNo.jpg`)으로 표준화합니다.
* 파일 업로드 시 확장자 및 용량 제한 검증을 수행하고, Oracle DB에 첨부파일 메타데이터를 저장합니다.
---
## 2. 핵심 클래스 전체 메소드 명세 (OracleClass.php — 1,392라인)
@@ -93,7 +146,7 @@
| 메소드명 | 설명 |
| :--- | :--- |
| `OracleClass($smarty)` | 생성자. OCI 커넥션 생성. `oci_connect('satis', 'SATIS11707808', 'samandb')` |
| `OracleClass($smarty)` | 생성자. OCI 커넥션 생성. `oci_connect('satis', '************', 'samandb')` |
| `db_close_oracle()` | 커넥션 명시적 해제. `oci_close()` |
| `Query($i_azsql)` | SQL 파싱 및 실행 후 Statement 핸들 반환. |
| `fetch_array($stmt)` | `oci_fetch_array($stmt, OCI_BOTH)` — 연관+인덱스 배열 동시 반환 |