Python 프로그램 구성
이행, 알림과 모니터링 도구의 화면 및 처리 파일 역할, 파일 사이 데이터 전달과 수정 위치 지정
#핵심 요약
수업의 도구 네 가지는 모두 "DB를 조회한다 → 기준과 비교해 판단한다 → 화면, 리포트, 알림으로 보여 준다"를 Python으로 자동화한 것임
각 도구는 화면 파일(app.py)과 처리 파일(이행 엔진 engine.py, 수집기 collector.py)로 나뉨
실습에서는 이행 도구에서 둘 사이에 Schema 묶음 하나가, 모니터에서 DataFrame 표 하나가 오간다고 설명함
실습에서는 "화면 한 칸 = 처리 함수 하나"이고 모니터에서는 "SQL 사전 키 하나"까지 대응하므로, 칸이 이상하면 그 함수를 보면 된다고 적었음
수업의 목표는 코드를 외우는 것이 아니라 어느 파일이 무슨 일을 하는지 알아 AI에게 정확히 고쳐 달라고 말하는 것임
#개념과 동작 원리
#도구와 라이브러리
| 결과물 | Python이 하는 일 | 쓰는 라이브러리 |
|---|---|---|
| 미니 마이그레이터(Oracle → PostgreSQL) | 스키마 분석 → 타입 변환 → COPY 이행 → 검증 → AS-IS/TO-BE 점검 | oracledb, psycopg, pandas, streamlit |
| 텔레그램 이행 알리미 | 이행 진행률을 휴대폰으로 보고하고 문제가 생기면 버튼으로 묻음 | urllib(표준 라이브러리만) |
| 미니 오라클 게이지(Oracle 모니터) | V$ 뷰를 3초마다 조회 → 악성 SQL 판정 → 대시보드 표시 | oracledb, pandas, plotly, streamlit |
| 세션 상세, 진단, KILL | SQL 전문과 실행계획을 꺼내 왜 문제인지 설명하고 조치 명령을 만듦 | oracledb, pandas |
MySQL 마이그레이터와 PG 게이지도 같은 구조임
#미니 마이그레이터 파일
| 파일 | 역할 |
|---|---|
engine.py |
분석 analyze, 타입 변환 map_type, 뷰 변환 convert_sql, DDL build_ddl, 권한 grant_ddl, 적재 copy_table, 검증 validate |
checker.py |
AS-IS/TO-BE 점검: 오브젝트, 데이터 표본, PL/SQL, 업무 쿼리, 권한 |
app.py |
화면: 단계 표시, 연결 카드, 분석 표, DDL 탭, 진행률, 로그, 검증 표, 점검 탭, 보고서 |
telegram_bot.py, tg_check.py |
텔레그램 보고, 질문, 명령, 연결 점검(7단계에서 추가) |
run_migrator.bat |
접속 기본값과 실행(포트 8502, CRLF로 저장) |
requirements.txt |
streamlit, plotly, pandas, oracledb, psycopg[binary] |
.streamlit/config.toml |
밝은 테마 |
실습에서는 이행 도구를 상황판(화면)과 이삿짐센터(분석, 포장, 운반, 검수)에 비유했음
#미니 오라클 게이지 파일
| 파일 | 역할 |
|---|---|
app.py |
화면 |
collector.py |
수집기, 패널별 SQL 사전 |
load.py |
부하 발생기 |
bad_sql.py |
악성 SQL 실행기 |
sql/01~03 |
계정, 스키마, 악성 SQL non-CDB용 *_noncdb.sql 포함 |
check_*.py |
2~4단계의 확인 스크립트 |
위 표는 실습 1단계의 파일 구성 설명임
대시보드는 모니터링 전용 계정으로 조회만 하고, 숫자를 움직이는 것은 부하 도구임
수집기는 실제 DB용 OracleCollector와 DB 없이 화면을 보는 DemoCollector 두 개임
실습의 3초 루프: 타이머 → 수집기 호출 → SQL 실행 → DataFrame → 악성 판정 → 화면 그리기 → 다시 처음
수집 쪽 세부는 Oracle 지표 수집에 있음
#MySQL 마이그레이터와 PG 게이지
| 도구 | 구조에서 다른 점 |
|---|---|
| 미니 MySQL 마이그레이터 | MySQL은 <USERNAME>로 읽기만 하고, 데이터는 PC의 engine.py를 거쳐 PostgreSQL로 건너감app.py는 상담 창구(화면), engine.py는 포장, 운반팀(분석, 변환, COPY), checker.py는 입주 점검반(AS-IS ↔ TO-BE 대조)에 비유함화면 한 칸 = 단계 함수( step_*) 하나 + 엔진 함수 하나 |
| 미니 PG 게이지 | pg_monitor 권한의 monitor 계정으로 조회만 하고, load.py, bad_sql.py가 loadtest DB에 부하를 검app.py는 홀(화면), collector.py는 주방(수집)이며 둘 사이에 DataFrame 표 하나가 오감화면 한 칸 = 수집 함수 하나 = SQL 사전 키 하나 |
MySQL 마이그레이터의 이행 흐름: 분석 → 타입 변환 → DDL 3묶음 → COPY 적재 → 적재 후 제약조건 → 검증
PG 게이지의 3초 루프는 오라클 게이지와 같고, 락 줄 계산이 DataFrame 계산 단계에 들어감
세부는 MySQL → PostgreSQL 이행 도구와 PostgreSQL 지표 수집에 있음
#사용 조건과 주의사항
도구 수정 시 지정할 항목은 "어느 파일 + 어느 함수나 키 + 무엇을 + 건드리지 말 것"임
같은 규칙이 두 곳에 있는 경우를 함께 말해야 함
이행 도구의 타입 규칙은 계산용 map_type()과 화면 표시용 TYPE_RULES 두 곳에, 모니터의 새 기능은 OracleCollector와 DemoCollector 두 수집기에 넣어야 함
MySQL 마이그레이터는 타입을 map_type()에서 정하지만 값 변환 _converter()와 검증 validate()는 MySQL 원래 타입을 보고 고르므로, 규칙을 바꾸면 세 곳을 함께 맞춤
PG 게이지에서 pg_stat_user_tables처럼 DB별로 따로 보이는 뷰는 접속한 DB 것만 나오므로, seq_scans()처럼 그 DB에 따로 접속해 읽도록 지시함
실습에서는 예제 프로그램이 모두 교육용으로 직접 만든 것이며 상용 모니터링 제품과 관계가 없다고 밝혔음
실습 그림 속 옛 이름 표기도 같은 도구를 가리킴