# (주)삼안 ERP 및 그룹웨어 시스템 (Satis) 하이레벨 아키텍처 (High-Level Architecture) 본 문서는 (주)삼안의 **ERP 및 그룹웨어 시스템(`saman-statis` / `Satis`)** 프로젝트의 전체 하이레벨 아키텍처(HLA) 명세서입니다. 시스템의 전체 개요, 계층형 구조, 기술 스택, 업무 도메인뿐만 아니라 **인프라/배포 아키텍처, 보안/인증 아키텍처, 외부 시스템 연동 구조**를 종합적으로 포함합니다. *(참고: 압축파일 `*.zip`은 분석에서 제외하였습니다.)* --- ## 1. 프로젝트 개요 (Project Overview) * **프로젝트명**: 삼안 ERP / 그룹웨어 (`saman-statis` / `Satis`) * **운영 도메인**: `satis2.samaneng.com`, `erp.samaneng.com` * **시스템 성격**: 엔지니어링/건설 분야 기업 자원 관리(ERP) 및 통합 그룹웨어 * **주요 기능**: 인사/급여, 회계/전표, 프로젝트/현장 공정, 영업/기성, 전자결재, 고정자산, 출장 정산, 경영분석 등 --- ## 2. 하이레벨 시스템 아키텍처 (High-Level System Architecture) ```mermaid graph TD subgraph Client Tier Browser["Web Browser
(HTML5, jQuery, jqGrid, w2ui)"] end subgraph Web / Presentation Tier WebServer["Web Server
(Windows Server / APM_Setup)"] Smarty["Smarty Template Engine v2.6
(Smarty/templates/Satis/*.tpl)"] end subgraph Application Tier Controller["MVC Controllers
(Satis/sys/controller/*)"] AuthModule["Security & Auth Engine
(AuthClass.php / Session)"] BizLogic["Business Models & Utility
(Satis/sys/model/*, OracleClass.php)"] end subgraph Data & Integration Tier OracleDB[("Main Oracle Database
(OCI Connection)")] iCubeDB[("Douzone iCube ERP
(MS-SQL: DZICUBE)")] IntranetDB[("Intranet Database
(MySQL: hallaerp)")] end Browser <-->|HTTPS / HTTP| WebServer WebServer <--> Smarty WebServer <--> Controller Controller <--> AuthModule Controller <--> BizLogic BizLogic <-->|OCI Connection| OracleDB BizLogic <-->|MS-SQL Driver| iCubeDB BizLogic <-->|MySQL Driver| IntranetDB ``` --- ## 3. 계층별 기술 스택 (Layered Tech Stack) | 계층 (Layer) | 구성 기술 및 디렉토리 | 설명 | | :--- | :--- | :--- | | **Presentation Tier** | `Smarty 2.6`, `Smarty/templates/Satis/` | Server-Side Rendering (SSR) 뷰 템플릿 엔진 (`.tpl`) | | **Client UI Tier** | `jQuery`, `jqGrid`, `w2ui`, `Satis/js/` | 엔지니어링/회계 대용량 동적 그리드 및 사용자 인터랙션 처리 | | **Application Tier** | `PHP 5.x`, `Satis/sys/controller/` | Custom MVC Controller (`ActionMode` 라우팅 파라미터 처리) | | **Security Tier** | `Satis/sys/util/AuthClass.php` | 세션 보안, CSRF Anti-Forgery Token 검증, 접근 권한 통제 | | **Persistence Tier** | `OracleClass.php`, `Satis/inc/*.inc` | Oracle OCI, MS-SQL(iCube), MySQL 다중 DB 연결 지원 | --- ## 4. 인프라 및 배포 아키텍처 (Infrastructure & Deployment Architecture) ```mermaid graph LR subgraph Infrastructure Layout WebSvr["Web Application Server
(APM_Setup / Windows Server)"] OracleSvr[("Oracle Database Server
(Main ERP Data)")] iCubeSvr[("Douzone iCube Server
(MS-SQL 192.168.13.50:5539)")] MySQLSvr[("Intranet MySQL Server
(erp.samaneng.com / hallaerp)")] end WebSvr -->|OCI Client| OracleSvr WebSvr -->|MS-SQL TCP 5539| iCubeSvr WebSvr -->|MySQL TCP 3306| MySQLSvr ``` * **서버 환경**: Windows Server 기반 APM (Apache + PHP + MySQL) 단일/이중화 실행 환경 (`D:/APM_Setup/htdocs/`) * **PHP 실행 옵션**: * 메모리 제한 해제 (`ini_set("memory_limit", -1)`)를 통한 대용량 프로젝트/연말정산 엑셀 보고서 생성 지원 * 캐시 무효화 헤더 설정 (`Expires: 0`, `Cache-Control: no-cache`)을 통한 세션 및 보안 강화 * **경로 및 컴파일 구조**: * Smarty 템플릿 컴파일 경로: `D:/APM_Setup/htdocs/Smarty/templates_c` * 템플릿 설정 경로: `SmartyConfig.php` 관리 --- ## 5. 보안 및 인증 아키텍처 (Security & Authentication Architecture) ```mermaid sequenceDiagram autonumber actor User as 사용자 participant Controller as Login Controller participant Auth as AuthClass participant Session as PHP Session participant DB as Oracle DB User->>Controller: 로그인 요청 (ID / Password) Controller->>DB: 사용자 정보 및 권한 검증 DB-->>Controller: 인증 성공 반환 Controller->>Auth: Auth_TokenGenerater() 호출 Auth->>Session: Session ID & Token 생성/저장 Session-->>User: Session Cookie 발급 (private) Note over User, Controller: 후속 요청 시 Token 및 Session 권한 검증 (Auth_TokenChecker) ``` 1. **세션 및 인증 관리 (Session Management)** * PHP 세션 생성 (`session_start()`, `session_cache_limiter('private')`) * 사용자 식별자 관리: `$_SESSION['satis_user_id']`, `$_SESSION['satis_user_deptcode']`, `$_SESSION['satis_user_name']` 2. **CSRF 방어 및 난수 토큰 (Token Security)** * `AuthClass.php` 내 10자리 영문/숫자 난수 토큰 생성기 (`Auth_TokenGenerater`) 및 검증기 (`Auth_TokenChecker`) 탑재 * 비인가 접근 시 자동 세션 파기 (`session_destroy()`) 및 로그인 페이지 전환 (`auth_move_page.tpl`) 3. **역할 기반 권한 통제 (RBAC / Role-Based Access Control)** * `AuthClass` 및 `GetUserInfo.php`를 통해 사용자 직급/부서/권한 등급별 메뉴 접근 권한 세분화 --- ## 6. 외부 시스템 연동 아키텍처 (External System Integration Architecture) 이 시스템은 단일 DB에 의존하지 않고, 사내 타 이종(Heterogeneous) 시스템과 실시간 연결되는 하이브리드 데이터 아키텍처를 가집니다. ```mermaid graph TD SatisCore["Satis ERP Core System"] SatisCore <-->|OCI Native Connection| OracleSystem["메인 그룹웨어/ERP DB (Oracle)"] SatisCore <-->|MS-SQL Driver (Port 5539)| iCubeSystem["더존 iCube ERP (MS-SQL: DZICUBE)
IP: 192.168.13.50"] SatisCore <-->|MySQL Driver (Port 3306)| IntranetSystem["인트라넷 시스템 (MySQL: hallaerp)
Host: erp.samaneng.com"] ``` 1. **더존 iCube ERP 연동 (`saman_icube_dbcon.inc`)** * **연동 목적**: 사내 더존 회계/인사 ERP 데이터와의 실시간 동기화 및 전표 전송 * **접속 방식**: Dedicated MS-SQL Connection (`192.168.13.50:5539`, DB명: `DZICUBE`) 2. **사내 인트라넷 연동 (`dbcon.inc`)** * **연동 목적**: 인트라넷 기존 데이터 및 파일 연결 * **접속 방식**: MySQL Connection (`erp.samaneng.com`, DB명: `hallaerp`) 3. **메인 Oracle DB 연동 (`OracleClass.php`)** * **연동 목적**: Satis 그룹웨어 고유의 결재, 인사, 프로젝트, 출장, 자산 관리 데이터 처리 * **접속 방식**: Oracle OCI8 라이브러리 및 커스텀 트랜잭션 바인딩 처리 --- ## 7. 주요 업무 도메인 서브시스템 (Business Subsystems) | 도메인 구분 | 서브시스템 모듈 | 아키텍처적 역할 및 주요 처리 기능 | | :--- | :--- | :--- | | **회계/재무** | `Account` | 전표 생성/승인, 예산 관리, 결산, 재무제표, 법인세/부가세, 원가 계산 | | **인사/급여** | `Person` | 인사기록, 근태 관리, 급여/상여 계산, 연말정산(`yeta_data`) 처리 | | **프로젝트/공정** | `Project`, `Project_work` | 엔지니어링 프로젝트 현장 관리, 공정률 계산, 기성 산출, 수주/매출 처리 | | **전자결재/문서** | `Document`, `Sign` | 전자결재 작성, 양식/결재선 관리, 전자서명 및 인장 관리 | | **영업/구매** | `Sale`, `Purchase` | 수주/매출 관리, 자재 구매 신청 및 발주 처리 | | **자산/도서/출장** | `Asset`, `Book`, `Travel` | 고정자산 추적, 도서 대여 관리, 국내/외 출장 신청 및 여비 정산 | | **시스템 관리** | `Supervisor`, `Common` | 전체 공정/부서/직급 코드 관리 (`CommonCodeList.php`), 관리자 권한 설정 | --- ## 8. 아키텍처 총평 및 고려사항 (Architectural Evaluation) 1. **강점 (Strengths)**: * **명확한 모듈화**: 업무 도메인별 Controller, Model, View가 체계적으로 분리되어 있어 대규모 ERP 시스템의 확장성이 확보되어 있습니다. * **이종 DB 유연성**: Oracle, MS-SQL(더존 iCube), MySQL을 동시에 연동하는 하이브리드 데이터 아키텍처를 안정적으로 운영합니다. * **대용량 그리드 최적화**: `jqGrid` 라이브러리와 메모리 해제 조치(`ini_set`)를 통해 수만 건 이상의 공정/회계 데이터 조회를 지원합니다. 2. **향후 아키텍처 개선 제언 (Future Roadmap)**: * **PHP 버전을 현대화**: Classic PHP 드라이버(`mssql_*`, `mysql_*`)를 최신 `PDO` 또는 `sqlsrv`/`mysqli`로 마이그레이션 권장. * **하드코딩된 DB 접속 정보 격리**: `saman_icube_dbcon.inc` 등의 DB 계정 정보를 `.env` 또는 보안 설정 파일로 분리 관리 권장.