
운명처럼 다시 만난 Tmax와 그리고 Tmax를 다닐 때보다 더 제품 공부를 해야하는 상황이 왔다
현재 이직한 회사에서 티맥스 관련 제품을 많이 사용하기 때문 그래서 우리의 개발툴인 (조만간 바뀐다고는 하지만) ProFrame에 대해서 공부를 하고 실제 코드를 볼 것이다!
TmaxSoft에서 개발한 ProFrame은 주로 금융, 공공기관에서 고성능 트랜잭션을 위해 사용 되는 것으로 통합 애플리케이션 프레임워크라고 생각하면 됨
특이하게도 모듈화된 구조로 구성되어 있음
DBIO, FileIO, EMB, Service, UI, Mapper 등등 나눠진 구조를 통해 높은 재사용성과 유지보수성을 확보함
-> 개발자는 순수 업무 로직만 구현하더라도 비즈니스 목적에 맞는 애플리케이션을 구축할 수 있음
ProFrame은 EMB (Enterprise Module Bus, 코딩없이 디자인만으로 프로그래밍이 가능한 모듈기반의 개발환경) 아키텍쳐 기반
아래 사진이 프로프레임의 예시인데 업무 단위별로 모듈이 분리되어 마치 flowChart같음

프로프레임은 단순 로컬 IDE처럼 보이지만 클라이언트 PC외에도 서버, DB서버가 구성되어야 해서 세팅이 조금 빡셈
하지만 위에 말한대로 다른 것들을 신경쓰지 않고 순수 업무 로직만 개발하면 됨
┌────────────────────┐
│ UI 모듈 │ ← 화면(XML 등) 정의 및 사용자 요청
└────────▲───────────┘
│
▼
┌────────────────────┐
│ Service 모듈 │ ← 비즈니스 로직 처리 (main 역할)
└────────▲───────────┘
│
▼
┌────────────────────┐
│ Mapper 모듈 │ ← 화면 ↔ 로직 ↔ DB 간 데이터 매핑
└────────▲───────────┘
│
┌───────┼────────┬────────┐
▼ ▼ ▼ ▼
DBIO FileIO EMB 기타 모듈
(DB 입출력) (파일 IO) (외부 연동 등)
사용자가 화면(UI)에서 사원번호 101 입력 후 조회 버튼 클릭
Service 모듈이 호출됨 → Mapper가 EMP_ID = 101로 매핑
Mapper가 EMP001.dbio 내 EMP_SELECT SQL 실행
결과값을 Mapper가 받아서 UI용 구조로 매핑
화면에 출력됨
ProFrame 프레임워크와 각 모듈 (Service, Mapper, DBIO) 등이 오라클 DB와 상호작용하며 데이터를 어떻게 주고 받는지 설명해본다면 아래와 같음
.ec -> Service 모듈
.pc -> DBIO 모듈
(.pc -> .c 로 프리컴파일 하려면... proc 소스.pc 그럼 소스.c 파일이 생기고요.... 그걸 gcc나 cc로 컴파일 하심 됨)
[UI 화면]
↓ 사용자의 입력
[Service 모듈 (.ec)]
↓ 비즈니스 로직 실행
[Mapper]
↓
[DBIO 모듈 (.pc)]
↓ SQL 실행
[Oracle DB]
↓ 결과 반환
[DBIO → Mapper → Service]
↓
[UI 화면에 결과 전송]
1. [화면] : emp_id = '101'
2. [Service] : 입력값 수신, call_mapper()
3. [Mapper] : emp_id → :EMP_ID 매핑
4. [DBIO] : SELECT ... WHERE emp_id = :EMP_ID
5. [OracleDB] : 결과 반환
6. [Mapper] : 결과 → 출력 필드로 매핑
7. [Service] : UI XML로 포장
8. [화면] : 결과 표시
📦 io_dbio_***.jar
┣ nics.***.le**.dbio ← DAO/Repository (JDBC 또는 MyBatis)
┣ nics.***.le**.io ← Input/Output 모델 클래스
┣ nics.***.le**.lg***.ec ← Service 클래스 (비즈니스 로직)
이 jar파일은 DBIO + IO + EC (비지니스로직)으로 모듈 단위 컴포넌트를 묶은 공통 Jar임
우리 프로젝트의 경우 각 직군에 따라 볼 수 있는 메뉴가 다름
그래서
각 직군 별로 가장 큰 모듈이 존재하고
거기에서 각 페이지 (페이지 넘버링) 에 따른 jar파일이 존재함
그 jar파일 안에 세부 코드가 존재 -> dbio, io, shft, service 등등등
📦 MSA (직군 이름)
┣ 📂 PFM_MODULES ← ProFrame Studio의 전체 모듈 뷰
┃ ┣ 📂 PFM_DBIO ← DBIO 모듈 전용 보기
┃ ┣ 📂 PFM_STR ← Struct VO
┃ ┣ 📂 PFM_MSG ← 시스템 메시지 관리
┃ ┣ 📂 PFM_MAP ← Mapper 설정 보기
┃
┣ 📦 넘버링된 화면들
┃ ┣ 📦 io_dbio_mad.jar ← 업무 도메인: MAD 관련 IO/DBIO 모듈
┃ ┣ 📦 io_dbio_mcm.jar ← CMS 업무 도메인
┃ ┣ 📦 io_dbio_mvr.jar ← MVR 관련 공통 모듈
┃ ┃┣ 📦 실제 개발 코드 (해당 JAR 내부 구조)
┃ ┣ 📂 nics.mrv.arch.dbio ← 아키텍처 관련 DB 모듈
┃ ┣ 📂 nics.mrv.batch.dbio ← 배치용 DB 접근 모듈
┃ ┣ 📂 nics.mrv.batch.shft ← 배치 스케줄 처리 로직
┃ ┣ 📂 nics.mrv.bizchek.io ← 입력/출력 모델 (DTO)
┃ ┣ 📂 nics.mrv.chek.service ← 업무 로직 처리 (Service 계층)
┃ ┗ 📂 nics.mrv.* ← 업무 모듈 단위로 기능별 구성
dbio, shft, io 등에서도 앞에 역할에 따라 기능별로 나뉘어짐