세티스 구조추가

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) 명세서입니다. 본 문서는 (주)삼안의 **ERP 시스템(`Satis`)** 프로젝트의 전체 하이레벨 아키텍처(HLA) 명세서입니다.
시스템 개요, 계층 구조, 기술 스택, 업무 도메인, **인프라/배포, 보안/인증, 외부 시스템 연동, 프론트엔드 아키텍처, 개발 운영 구조**를 종합적으로 포함합니다. 시스템 개요, 계층 구조, 기술 스택, 업무 도메인, **인프라/배포, 보안/인증, 외부 시스템 연동, 프론트엔드 아키텍처, 개발 운영 구조**를 종합적으로 포함합니다.
@@ -131,8 +131,28 @@ d:\41.dev\10.saman\
│ │ ├── Common/ # 공통 팝업, SMS, PDF, OTP (17개 컨트롤러) │ │ ├── Common/ # 공통 팝업, SMS, PDF, OTP (17개 컨트롤러)
│ │ ├── Jqgrid/ # jqGrid JSON 데이터 응답 │ │ ├── Jqgrid/ # jqGrid JSON 데이터 응답
│ │ └── Fileupload/ # 파일 업로드 처리 │ │ └── Fileupload/ # 파일 업로드 처리
│ ├── model/ # 비즈니스 로직 (모듈별 Logic 클래스) │ ├── model/ # 비즈니스 로직 (20개 업무 모듈별 Logic 클래스)
├── util/ # 시스템 유틸리티 클래스 │ ├── 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라인) │ │ ├── OracleClass.php # Oracle OCI 커넥션 핵심 클래스 (1,392라인)
│ │ ├── AuthClass.php # CSRF 토큰 / 세션 보안 (591라인) │ │ ├── AuthClass.php # CSRF 토큰 / 세션 보안 (591라인)
│ │ ├── LoginInfomation.php # 로그인 상태 / 개인 권한 검증 │ │ ├── LoginInfomation.php # 로그인 상태 / 개인 권한 검증
@@ -265,16 +285,16 @@ sequenceDiagram
graph TD graph TD
SatisCore["Satis ERP Core System<br/>(PHP Application Server)"] SatisCore["Satis ERP Core System<br/>(PHP Application Server)"]
SatisCore <-->|OCI Native: oci_connect('satis','SATIS11707808','samandb')| OracleDB["Oracle DB (Main ERP)<br/>그룹웨어, 인사, 회계, 프로젝트, 결재"] SatisCore <-->|OCI Native: oci_connect('satis','**********','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 <-->|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/vbxsystem| IntranetDB["인트라넷 MySQL<br/>DB: hallaerp<br/>전자결재 사원/부서 정보, 코드 사전"] SatisCore <-->|mysql_connect: erp.samaneng.com<br/>root/**********| IntranetDB["인트라넷 MySQL<br/>DB: hallaerp<br/>전자결재 사원/부서 정보, 코드 사전"]
SatisCore -->|SMS API| SMSSvc["SMS 발송 서비스<br/>기술자보수교육 대상자 알림<br/>프로젝트 미결재 알림"] SatisCore -->|SMS API| SMSSvc["SMS 발송 서비스<br/>기술자보수교육 대상자 알림<br/>프로젝트 미결재 알림"]
SatisCore -->|PdfLogic| PDFSvc["PDF 생성 서비스<br/>결재문서/보고서 PDF 변환"] 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` | | **더존 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` | | **인트라넷 MySQL** | MySQL: `erp.samaneng.com` DB: `hallaerp` | 전자결재용 사원/부서 코드, 문서 마스터 | `dbcon.inc`, `approval_function.php` |
| **SMS 서비스** | PHP Logic 클래스 | 기술자 보수교육 대상자 알림, 프로젝트 미결재 경고 문자 | `sms_controller.php`, `sms_logic.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 이하 환경에서만 실행 가능합니다. > **레거시 PHP 드라이버 사용**: `mysql_connect()`, `mssql_connect()`는 PHP 7.0에서 완전히 제거된 deprecated 함수입니다. PHP 5.6 이하 환경에서만 실행 가능합니다.
> [!CAUTION] > [!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] > [!WARNING]
> **SQL Injection 위험**: `approval_function.php`, `function.php` 등 다수 함수에서 `$mCode` 값을 필터링 없이 SQL에 직접 삽입합니다. `mysql_real_escape_string()` 미적용. > **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) 구현 명세서**입니다. **초상세 로우레벨(Ultra-Detailed Low-Level) 구현 명세서**입니다.
`OracleClass.php` 전체 메소드 명세, 전자결재 알고리즘, 문서번호 채번 방식, 인코딩 파이프라인, 결재 서명 렌더링, `OracleClass.php` 전체 메소드 명세, **비즈니스 로직(Model / `Satis/sys/model/*`) 20개 모듈 구조**, 전자결재 알고리즘,
시스템 글로벌 변수, DB 데이터 모델, 보안 핸들링 등을 실제 소스 코드 기반으로 완전히 명세합니다. 문서번호 채번 방식, 인코딩 파이프라인, 결재 서명 렌더링, 시스템 글로벌 변수, DB 데이터 모델, 보안 핸들링 등을 명세합니다.
--- ---
## 1. 모듈별 컨트롤러 & 뷰 맵핑 딕셔너리 (Module Controller-View Map) ## 1. 모듈별 컨트롤러, 모델 & 뷰 맵핑 딕셔너리 (Controller - Model - View Map)
### 1.1 회계 관리 모듈 (`Account`) — 30개 컨트롤러 ### 1.1 회계 관리 모듈 (`Account`) — 30개 컨트롤러
| 컨트롤러 (`Satis/sys/controller/Account/`) | 대응 View (`Smarty/templates/Satis/Account/`) | 주요 기능 | | 컨트롤러 (`Satis/sys/controller/Account/`) | 대응 View (`Smarty/templates/Satis/Account/`) | 주요 기능 |
@@ -82,6 +82,59 @@
| `TargetManagement_Controller.php` | `TargetManagement.tpl` | 수주 목표 관리 | | `TargetManagement_Controller.php` | `TargetManagement.tpl` | 수주 목표 관리 |
| `PrinterCopy_Controller.php` | `PrinterCopy.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라인) ## 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()` | | `db_close_oracle()` | 커넥션 명시적 해제. `oci_close()` |
| `Query($i_azsql)` | SQL 파싱 및 실행 후 Statement 핸들 반환. | | `Query($i_azsql)` | SQL 파싱 및 실행 후 Statement 핸들 반환. |
| `fetch_array($stmt)` | `oci_fetch_array($stmt, OCI_BOTH)` — 연관+인덱스 배열 동시 반환 | | `fetch_array($stmt)` | `oci_fetch_array($stmt, OCI_BOTH)` — 연관+인덱스 배열 동시 반환 |