AI로 보고서용 쿼리를 작성했지만 운영 데이터와 서비스 성능이 걱정되는 실무자라면, 권한이 제한된 계정으로 비실행 계획을 확인한 뒤 작은 범위부터 조회하세요. 읽기 전용 트랜잭션이나 LIMIT만으로는 충분하지 않습니다. SELECT도 잠금, 전체 스캔, 고비용 함수 호출을 일으킬 수 있으므로 계정 권한과 실행 범위가 핵심 안전장치입니다.
목차
검증 전에 준비할 정보
DB 제품과 버전, 관리 도구 이름, 관련 테이블과 열, 자료형, 조인 관계, 원하는 결과 형태를 정리합니다. 전체 스키마나 실제 데이터는 필요하지 않습니다. 고객명, 이메일, 전화번호, 주문번호, 인증 정보, 접속 문자열은 가상 값으로 바꾸고 회사의 AI 사용 및 데이터 반출 정책도 먼저 확인하세요.
- 운영 계정과 분리된 조회 전용 계정을 준비합니다.
- 가능하면 개발 DB나 마스킹된 복제본에서 먼저 시험합니다.
- 조회할 날짜 범위와 필요한 최대 행 수를 정합니다.
- 쿼리 취소 권한과 DBA 연락 절차를 확인합니다.
읽기 복제본도 무조건 안전하지는 않습니다. 긴 쿼리가 복제 지연이나 공용 자원 사용에 영향을 줄 수 있으므로 허용 용도와 시간대를 운영 담당자에게 확인해야 합니다.
AI에 요청하고 문장을 직접 검사하기
프롬프트에는 DB 제품과 버전, 필요한 열만 선택할 것, 날짜 조건과 행 수 제한을 넣을 것, 가정과 인덱스 요구 사항을 따로 설명할 것을 명시합니다. 또한 데이터 변경, 객체 생성, 프로시저 호출, 잠금 조회를 제외하도록 요청하세요.
결과가 SELECT 또는 WITH로 시작한다고 안전한 것은 아닙니다. 실행 전 쿼리 전체를 읽고 세미콜론 뒤의 추가 명령, 주석으로 숨겨진 구문, INSERT·UPDATE·DELETE·MERGE·DDL, CALL·EXEC, SELECT INTO, FOR UPDATE, 외부 파일 내보내기와 낯선 함수가 없는지 확인합니다. 함수나 저장 프로시저는 DB와 권한 구성에 따라 부작용이 있을 수 있으므로 동작을 모르면 실행하지 마세요.
운영 DB에서 실행하기 전 검증 순서
- 별도 환경에서 문법을 확인합니다. 테이블 구조가 운영과 다르면 실행 결과보다 열 이름, 자료형 변환, 조인 조건을 중심으로 점검합니다.
- 비실행 실행 계획을 봅니다. EXPLAIN, Estimated Plan, Explain Plan처럼 실제 쿼리를 수행하지 않는 기능을 우선 선택합니다. 정확한 명칭과 실행 여부는 사용 중인 DB 및 관리 도구의 공식 문서에서 확인하세요.
- 예상 처리량을 판단합니다. 큰 테이블의 전체 스캔, 예상 행 수 급증, 조인 결과의 반복 확대, 정렬과 임시 공간 사용이 보이면 중단합니다. 날짜 조건, 조인 열의 자료형, 필터 위치와 인덱스 존재 여부를 DBA와 확인하세요.
- 조회 전용 연결을 사용합니다. 필요한 스키마·뷰·열의 조회 권한만 받은 계정인지 권한 화면이나 권한 조회 명령으로 확인합니다. 애플리케이션 계정은 변경 또는 프로시저 실행 권한이 남아 있을 수 있어 재사용하지 않는 편이 안전합니다.
- 작게 실행합니다. 짧은 날짜 범위와 적은 결과 행으로 시작하고, 서버 또는 클라이언트의 쿼리 시간 제한을 설정한 뒤 단계적으로 넓힙니다.
제품별로 달라지는 부분
행 제한 문법은 LIMIT, TOP, FETCH FIRST 등으로 다릅니다. PostgreSQL에서는 트랜잭션을 시작한 뒤 읽기 전용 속성을 지정할 수 있고, MySQL 계열에는 읽기 전용 트랜잭션 시작 구문이 있지만 지원 범위는 버전에 따라 확인해야 합니다. 다른 제품도 동일한 기능을 가정하지 말고 공식 문서에서 트랜잭션 읽기 전용, 명령 시간 제한, 계획 표시 항목을 검색하세요.
EXPLAIN ANALYZE나 Actual Execution Plan처럼 실제 결과를 수집하는 옵션은 쿼리를 수행할 수 있습니다. 대형 테이블에서는 비실행 계획과 같은 의미로 선택하면 안 됩니다. 또한 LIMIT은 반환 행만 줄이고 스캔량은 줄이지 못할 수 있으므로 날짜나 파티션 조건을 함께 사용해야 합니다.
오류나 과부하 징후가 생겼을 때
- 문법 오류가 나면 접속 정보나 원본 데이터를 AI에 보내지 말고 DB 종류, 오류 문구, 익명화한 쿼리만 사용합니다.
- 응답이 늦거나 CPU·I/O 경고가 보이면 관리 도구에서 쿼리를 취소합니다. 취소 후에도 세션이 남을 수 있으므로 세션 식별값과 시작 시각을 DBA에게 전달합니다.
- 권한 오류는 계정을 관리자 권한으로 바꾸지 말고 필요한 뷰나 열의 조회 권한만 요청합니다.
- 결과가 예상과 다르면 NULL 처리, 시간대, 일대다 조인으로 인한 중복, 문자열과 숫자의 암시적 변환을 확인합니다.
- 변경이 발생했다면 재실행하지 말고 쿼리, 실행 시각, 계정, 대상 객체를 기록해 DBA에게 알립니다. 커밋된 변경은 단순 롤백으로 복구되지 않을 수 있으므로 감사 로그와 백업·복구 절차를 따라야 합니다.
개인정보·비용·실행 후 점검
조회 결과 전체를 AI에 붙여 넣지 말고 익명화한 소수의 예시와 열 정의만 사용하세요. 클라우드 분석 DB는 반환 행이 적어도 읽은 데이터 양이나 실행 시간에 따라 비용이 발생할 수 있습니다. 실행 전 콘솔이나 계획 화면에서 비용 추정, 스캔량 표시, 예산 알림 제공 여부를 확인하세요.
최종 점검 목록
- 조회 전용 계정이며 불필요한 함수·프로시저 실행 권한이 없는가
- 비실행 계획에서 과도한 스캔, 정렬, 조인 확대가 없는가
- 날짜·대상 조건과 시간 제한이 적용됐는가
- 실행 결과의 행 수, 중복, NULL, 시간대가 요구사항과 맞는가
- 쿼리 종료 후 세션과 장시간 실행 작업이 남지 않았는가
- 원본 데이터와 인증 정보를 AI 입력이나 공유 문서에 남기지 않았는가