2-2. Post 변환 작업 메뉴 상세 분석
메뉴명
Post 변환 작업
목적
SQL 변환 완료 후 변환된 XML 파일들에 대한 후처리 작업을 수행합니다. Oracle Function 제거, Target DBMS Function 문법 확인 및 오류 수정, 최종 결과 분석을 통해 변환 품질을 향상시킵니다.
실행 흐름
initOMA.sh
→ execute_post_transform()
→ show_post_transform_menu()
→ 서브메뉴 선택
├── 1. Oracle Function 제거
│ → execute_oracle_function_removal()
│ → python3 $APP_TOOLS_FOLDER/../postTransform/postTransCheckSource.py
│ → oracle_functions.txt 파일 읽기 (각 Oracle Function별)
│ → q chat --trust-all-tools --no-interactive < postTransCheckSource.md
├── 2. Target XML 검증
│ → execute_target_xml_validation()
│ → q chat --trust-all-tools "$APP_TOOLS_FOLDER/../postTransform/transformxml_validation_prompt.md"
├── 3. (MySQL) Target DBMS Function 문법 확인
│ → execute_target_dbms_function_check()
│ → $APP_TOOLS_FOLDER/../postTransform/checkFunctionAll.sh
│ → genSelectFromXML.py (각 transform XML별)
├── 4. (MySQL) Target DBMS Function 문법 오류 수정
│ → execute_target_dbms_function_error_fix()
│ → q chat --trust-all-tools "$APP_TOOLS_FOLDER/../postTransform/function/editFunctionErrors.md"
├── 5. (MySQL) POST 결과 분석
│ → execute_post_result_analysis()
│ → python3 $APP_TOOLS_FOLDER/../postTransform/genFunctionReport.py
└── 6. (Experimental) MyBatis SQL Test
→ execute_mybatis_sql_test()
→ python3 $OMA_BASE_DIR/bin/postTransform/mybatis_db_test.py
상세 분석
1. execute_post_transform() 함수
# 위치: initOMA.sh (485행)
# 실행파일: show_post_transform_menu() 서브메뉴 호출
2. 서브메뉴별 핵심 실행 스크립트
2.1 Oracle Function 제거
# 위치: $APP_TOOLS_FOLDER/../postTransform/postTransCheckSource.py
# 주요 기능: Target DB별 Oracle Function 개별 변환 처리
# 실행명령: python3 postTransCheckSource.py
# → Target DB에 따른 함수 파일 자동 선택:
# - TARGET_DBMS_TYPE=postgres → expression/oracle_functions_postgres.txt
# - TARGET_DBMS_TYPE=mysql → expression/oracle_functions_mysql.txt
# - 공통 함수 → expression/oracle_functions_common.txt
# → 각 함수별로 순차 처리
# → q chat --trust-all-tools --no-interactive < expression/postTransCheckSource.md
2.2 Target XML 검증
# 위치: $APP_TOOLS_FOLDER/../postTransform/transformxml_validation_prompt.md
# 주요 기능: Amazon Q Chat을 활용한 변환된 XML 파일 검증
# 실행명령: q chat --trust-all-tools "transformxml_validation_prompt.md"
2.3 (MySQL) Target DBMS Function 문법 확인
# 위치: $APP_TOOLS_FOLDER/../postTransform/checkFunctionAll.sh
# 주요 기능: 변환된 SQL의 MySQL 함수 문법 검증
# 실행명령: ./checkFunctionAll.sh
# → function/genSelectFromXML.py (각 transform XML 파일별 처리)
2.4 (MySQL) Target DBMS Function 문법 오류 수정
# 위치: $APP_TOOLS_FOLDER/../postTransform/function/editFunctionErrors.md
# 주요 기능: Amazon Q Chat을 활용한 MySQL 함수 오류 자동 수정
# 실행명령: q chat --trust-all-tools "$APP_TOOLS_FOLDER/../postTransform/function/editFunctionErrors.md"
2.5 (MySQL) POST 결과 분석
# 위치: $APP_TOOLS_FOLDER/../postTransform/genFunctionReport.py
# 주요 기능: sqlTestResult.json 분석 및 HTML 리포트 생성
# 실행명령: python3 genFunctionReport.py
2.6 (Experimental) MyBatis SQL Test
# 위치: $OMA_BASE_DIR/bin/postTransform/mybatis_db_test.py
# 주요 기능: MyBatis SQL 테스트 (실험적 기능)
# 실행명령: python3 mybatis_db_test.py --dbms [src/tgt] [--limit 숫자]
# 옵션:
# - --dbms src: Source (Oracle) 데이터베이스 테스트
# - --dbms tgt: Target (PostgreSQL/MySQL) 데이터베이스 테스트
# - --limit 숫자: 테스트할 SQL 개수 제한 (생략 시 ALL)
3. 주요 환경변수 매핑
# 입력 관련 환경변수
APPLICATION_NAME # 프로젝트명
APP_TOOLS_FOLDER # 애플리케이션 도구 폴더 경로
APP_TRANSFORM_FOLDER # 변환 작업 폴더 경로
APP_LOGS_FOLDER # 로그 폴더 경로
TARGET_DBMS_TYPE # 대상 DBMS 타입 (PostgreSQL/MySQL)
# 출력 관련 환경변수
APP_TRANSFORM_FOLDER # 변환 결과 저장 폴더
APP_LOGS_FOLDER # 로그 및 결과 파일 저장
# Oracle Function 처리용 환경변수
ORACLE_FUNCTION # 현재 처리 중인 Oracle 함수명
SEARCH_PATTERN # 함수 검색 패턴
# 기타 설정 환경변수
OMA_BASE_DIR # OMA 기본 디렉토리
4. 작업 단계
4.1 Oracle Function 제거 (상세 프로세스)
- Target DB별 함수 파일 자동 선택: TARGET_DBMS_TYPE 환경변수에 따라 적절한 함수 파일 로드
- PostgreSQL: oracle_functions_postgres.txt (계층형 쿼리, ROWNUM, DECODE 등)
- MySQL: oracle_functions_mysql.txt (날짜함수, NVL, 문자열함수 등)
- 공통: oracle_functions_common.txt (모든 DB에서 변환 필요한 함수)
- 함수별 순차 처리: 각 Oracle 함수에 대해 개별적으로 변환 작업 수행
-
파이프( ) 구분자로 oracle_function search_pattern 형태로 구성 - 각 함수별 정규식 패턴을 사용한 정확한 매칭
-
- Amazon Q Chat 실행: 각 함수별로 expression/postTransCheckSource.md 프롬프트 실행
- 환경변수 설정: ORACLE_FUNCTION, SEARCH_PATTERN 동적 설정
- 로그 관리: 함수별 개별 로그 파일 생성 (타임스탬프 포함)
- 진행 상황 추적: 처리된 함수 수 / 전체 함수 수 표시
- 처리 간격: 각 함수 처리 전 1초 대기로 시스템 부하 방지
4.2 Target XML 검증
- 변환된 XML 파일 검증: 변환 과정에서 생성된 XML 파일들의 구조 및 내용 검증
- Amazon Q Chat 실행: transformxml_validation_prompt.md 프롬프트를 통한 지능형 검증
- 검증 항목: XML 구문 오류, 스키마 호환성, 데이터 무결성 등
- 검증 결과 리포트: 발견된 문제점 및 권장 수정사항 제시
- 자동 수정 제안: 일반적인 XML 오류에 대한 자동 수정 방안 제공
4.3 (MySQL) Target DBMS Function 문법 확인
- transform XML 파일 스캔: $APP_LOGS_FOLDER/mapper//transform/.xml 경로에서 파일 검색
- 동적 파일 목록 생성: find 명령어로 실시간 XML 파일 목록 생성
- genSelectFromXML.py 실행: 각 XML 파일별로 SQL 함수 추출 (30초 타임아웃)
- MySQL 문법 호환성 검증: 추출된 함수들의 MySQL 문법 검증
- 함수별 성공/실패 상태 추적: 각 파일별 처리 결과 기록
- 결과 파일 생성: sqlTestResult.json (성공), sqlTestResultFailed.json (실패) 생성
- 로그 관리: 통합 로그 파일 ($APP_LOGS_FOLDER/postTransform/sqlTestResult.log) 생성
4.4 (MySQL) Target DBMS Function 문법 오류 수정
- 문법 확인 결과 분석: 4.3단계에서 발견된 MySQL 오류 분석
- Amazon Q Chat 실행: function/editFunctionErrors.md 프롬프트를 통한 자동 오류 수정
- 수정된 함수의 재검증: 수정 후 함수 동작 확인
- 수정 이력 및 결과 추적: 변경 사항 로그 기록
⚠️ 중요 주의사항 - Amazon Q Chat 컨텍스트 관리
- 컨텍스트 손실 모니터링: Amazon Q Chat 실행 중 기존 작업 컨텍스트를 잃어버리는 경우가 발생할 수 있음
- 비정상 동작 감지: 다음과 같은 상황이 발생하면 즉시 중단 필요
- 지시하지 않은 새로운 작업 방향으로 진행하려는 경우
- 배치 형태의 대량 변환을 시도하려는 경우
- 원래 목적과 다른 파일 처리를 시작하는 경우
- 즉시 중단 및 재시작: 위와 같은 상황 발견 시
CTRL+C
로 즉시 중단하고 해당 단계를 처음부터 재실행 - 작업 범위 확인: 각 실행 전 Amazon Q Chat이 올바른 작업 범위와 목적을 인식하고 있는지 확인
- CTRL+C 핸들러: postTransCheckSource.py에 signal handler 구현으로 안전한 중단 지원
4.5 (MySQL) POST 결과 분석
- 입력 파일 분석: $APP_TRANSFORM_FOLDER/sqlTestResult.json 파일 로드
- 통계 데이터 생성: 함수별 성공/실패 통계, 오류 패턴 분석
- HTML 리포트 생성: 시각적 분석 결과를 HTML 형태로 출력
- 결과 파일 저장: $APP_TRANSFORM_FOLDER/../function_test_report.html 생성
4.6 (Experimental) MyBatis SQL Test
- 데이터베이스 선택: Source (Oracle) 또는 Target (PostgreSQL/MySQL) 선택
- 테스트 범위 설정: 전체(ALL) 또는 지정된 개수만큼 테스트
- MyBatis SQL 실행: 실제 데이터베이스 연결을 통한 SQL 실행 테스트
- 결과 분석: 실행 성공/실패 결과 분석 및 오류 원인 파악
- 테스트 리포트: 실행 결과를 JSON 형태로 저장
결과 파일
Oracle Function 제거 결과
# 출력 경로: $APP_LOGS_FOLDER/qlogs
1. $APP_LOGS_FOLDER/qlogs/[함수명]_[타임스탬프].log # 각 Oracle 함수별 처리 로그
2. $APP_LOGS_FOLDER/qlogs/[함수명]_[타임스탬프]_error.log # 함수별 오류 로그 (실패 시)
# 출력 경로: $APP_LOGS_FOLDER/qlogs/qprompt
3. $APP_LOGS_FOLDER/qlogs/qprompt/qchat_command_history.log # Q Chat 명령어 실행 이력
Target XML 검증 결과
# 출력 경로: $APP_LOGS_FOLDER/qlogs
1. $APP_LOGS_FOLDER/qlogs/xml_validation_[타임스탬프].log # XML 검증 처리 로그
2. $APP_LOGS_FOLDER/qlogs/xml_validation_report.html # XML 검증 결과 리포트 (HTML)
Oracle Function 파일 구조
# 입력 파일 경로: $APP_TOOLS_FOLDER/../postTransform/expression/
1. oracle_functions_postgres.txt # PostgreSQL 특화 Oracle 함수 목록
- 계층형 쿼리: CONNECT_BY, START_WITH, PRIOR, LEVEL
- ROWNUM 관련: ROWNUM, CASE_WHEN_ROWNUM
- DECODE, LISTAGG, 집합연산자(MINUS, INTERSECT)
- 정규식 함수, 분석함수, PL/SQL 관련
2. oracle_functions_mysql.txt # MySQL 특화 Oracle 함수 목록
- 날짜/시간 함수: SYSDATE, TO_CHAR, TO_DATE, ADD_MONTHS
- NULL 처리: NVL, NVL2
- 문자열 함수: SUBSTR, INSTR, INITCAP, TRANSLATE
- 문자열 연결(||), DUAL 테이블, 외부조인(+)
3. oracle_functions_common.txt # 공통 Oracle 함수 목록
- 모든 Target DB에서 변환이 필요한 함수들
4. oracle_functions_backup.txt # 기존 통합 파일 백업
Function 문법 확인 결과
# 출력 경로: $APP_TRANSFORM_FOLDER
1. $APP_TRANSFORM_FOLDER/sqlTestResult.json # 함수 테스트 결과 (성공)
2. $APP_TRANSFORM_FOLDER/sqlTestResultFailed.json # 함수 테스트 결과 (실패)
# 출력 경로: $APP_LOGS_FOLDER/postTransform
3. $APP_LOGS_FOLDER/postTransform/sqlTestResult_xml_list.txt # 처리된 XML 파일 목록
MyBatis SQL Test 결과
# 출력 경로: $APP_TRANSFORM_FOLDER
1. $APP_TRANSFORM_FOLDER/mybatis_test_result.json # MyBatis SQL 테스트 결과
2. $APP_TRANSFORM_FOLDER/mybatis_test_report.html # MyBatis 테스트 결과 리포트 (HTML)
로그 파일
# 출력 경로: $APP_LOGS_FOLDER/postTransform
1. $APP_LOGS_FOLDER/postTransform/sqlTestResult.log # 통합 테스트 로그
2. function_error_fix.log # 함수 오류 수정 로그
3. mybatis_sql_test.log # MyBatis SQL 테스트 로그
최종 분석 리포트
# 출력 경로: $APP_TRANSFORM_FOLDER/../
1. $APP_TRANSFORM_FOLDER/../function_test_report.html # HTML 형태의 함수 테스트 결과 리포트
환경 변수 의존성
필수 환경변수
- 프로젝트 설정:
APPLICATION_NAME
,APPLICATION_FOLDER
- 도구 경로:
APP_TOOLS_FOLDER
,APP_TRANSFORM_FOLDER
,APP_LOGS_FOLDER
- DBMS 설정:
TARGET_DBMS_TYPE
- 기본 경로:
OMA_BASE_DIR
선택적 환경변수
- 로깅:
LOG_LEVEL
,VERBOSE_MODE
- 타임아웃:
FUNCTION_CHECK_TIMEOUT
(기본값: 30초)
사전 조건
- SQL 변환 작업 완료 (2-1 단계)
- 변환된 XML 파일들이 $APP_LOGS_FOLDER/mapper/*/transform/ 경로에 존재
- 추출된 XML 파일들이 $APP_LOGS_FOLDER/mapper/*/extract/ 경로에 존재
- Amazon Q Chat 환경 설정 완료
- Python3 및 필요한 라이브러리 설치
- sqlTestResult.json 파일 존재 (2-2 단계 실행 후)
다음 단계
이 단계의 결과물은 다음 단계들에서 사용됩니다:
- 2-3. SQL 변환 Merge: 후처리된 XML들의 최종 병합
- 2-4. 변환 작업 보고서: 전체 변환 프로세스 결과 리포트
- 3-1. XML List 생성: 검증된 XML 기반 Unit Test 목록 생성
주요 특징
- 서브메뉴 구조: 6개의 독립적인 후처리 작업을 단계별로 수행 (메뉴 번호 5번으로 표시)
- AI 활용: Amazon Q Chat을 통한 지능형 오류 수정 및 XML 검증
- Target DB별 최적화: TARGET_DBMS_TYPE에 따라 적절한 Oracle 함수만 선별 처리
- PostgreSQL: 계층형 쿼리, ROWNUM, DECODE 등 PostgreSQL 특화 변환
- MySQL: 날짜함수, NVL, 문자열함수 등 MySQL 특화 변환
- 함수별 개별 처리: Oracle 함수를 각각 독립적으로 변환 (개수는 Target DB별 함수 파일에 따라 결정)
- XML 검증 기능: 변환된 XML 파일들의 구조 및 내용 검증
- MySQL 특화: Target DBMS Function 관련 작업이 MySQL에 특화되어 구성
- 동적 파일 처리: find 명령어를 통한 실시간 XML 파일 목록 생성
- 상세 로깅: 각 단계별 상세한 처리 결과 추적
- 타임아웃 관리: 처리 시간 제한으로 무한 대기 방지 (30초)
- 결과 검증: 각 단계별 성공/실패 상태 확인
-
패턴 매칭: 파이프( ) 구분자를 통한 oracle_function search_pattern 형태 지원 - 리포트 자동화: Python 기반 자동 HTML 리포트 생성
- 안전한 중단: CTRL+C signal handler를 통한 안전한 스크립트 중단 지원
- 주석 지원: 함수 파일에서 # 으로 시작하는 주석 라인 자동 제외
- 실험적 기능: MyBatis SQL Test를 통한 실제 데이터베이스 연결 테스트
중요 주의사항
⚠️ 단계별 순차 실행 권장
- Oracle Function 제거 → Target XML 검증 → MySQL Function 문법 확인 → MySQL 오류 수정 → 결과 분석 → MyBatis SQL Test 순서로 진행
- 각 단계의 완료를 확인한 후 다음 단계 진행
⚠️ Oracle Function 제거 처리 시간
- Oracle Function 개수는 TARGET_DBMS_TYPE에 따른 함수 파일에 따라 결정됨
- PostgreSQL: oracle_functions_postgres.txt (약 30개 함수)
- MySQL: oracle_functions_mysql.txt (약 35개 함수)
- 각 함수별로 1초 대기 + Amazon Q Chat 실행 시간
- 전체 처리 시간: 함수 개수 × (1초 + Q Chat 실행 시간)
- 진행 상황은 실시간으로 [현재/전체] 형태로 표시됨
- Target DB별 최적화로 불필요한 함수 변환 작업 제거
⚠️ Target XML 검증 주의사항
- XML 파일 개수가 많은 경우 검증 시간이 오래 걸릴 수 있음
- Amazon Q Chat 실행 중 컨텍스트 손실 모니터링 필요
- 검증 과정에서 발견된 오류는 즉시 수정 권장
⚠️ MySQL 특화 처리
- 3, 4번 서브메뉴는 MySQL 환경에 특화되어 설계됨
- PostgreSQL 환경에서는 별도의 처리 방식이 필요할 수 있음
⚠️ MyBatis SQL Test 주의사항
- 실험적 기능으로 실제 데이터베이스 연결이 필요
- Source/Target 데이터베이스 연결 정보가 올바르게 설정되어야 함
- 대량 테스트 시 데이터베이스 부하 고려 필요
⚠️ 대용량 파일 처리 시 주의사항
- 파일 개수가 많은 경우 처리 시간이 오래 걸릴 수 있음
- 타임아웃 설정을 적절히 조정하여 처리 효율성 확보
- 진행 상황을 실시간으로 모니터링 권장