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 데이터베이스 연결 정보가 올바르게 설정되어야 함
  • 대량 테스트 시 데이터베이스 부하 고려 필요

⚠️ 대용량 파일 처리 시 주의사항

  • 파일 개수가 많은 경우 처리 시간이 오래 걸릴 수 있음
  • 타임아웃 설정을 적절히 조정하여 처리 효율성 확보
  • 진행 상황을 실시간으로 모니터링 권장

Back to top

Copyright © 2024 Amazon Web Services, Inc. or its affiliates. All Rights Reserved.