본문 바로가기
IT/서버 이관시 고려해야 할 DB 성능 튜닝

Phase 1-3.쿼리 리팩토링 : SQL 이전 전/후 비교 기능 제공

by free-inf 2025. 2. 9.

부제 : 쿼리 리팩토링 및 SPA 활용 방법

1. 개요

서버 이관 프로젝트에서 쿼리 리팩토링은 필수적인 작업 중 하나다. 기존의 SQL 쿼리는 운영 환경에서 여러 차례 수정되면서 복잡해지고, 비효율적인 구조로 인해 성능 저하를 초래하는 경우가 많다. 이러한 문제를 해결하지 않고 새로운 서버 환경으로 이관하면, 예상치 못한 성능 저하나 데이터베이스 부하 증가 등의 위험이 발생할 수 있다.

 

이를 방지하기 위해 SPA(Static Performance Analyzer) 를 활용하여 기존 쿼리의 성능을 분석하고, 리팩토링을 통해 최적화하는 작업을 진행한다. 이 과정에서 불필요한 연산을 제거하고 실행 속도를 개선하며, 유지보수성을 높이는 것이 핵심 목표다.


2. SPA를 활용한 쿼리 리팩토링 절차

SPA는 SQL 실행 계획을 분석하고 실행 시간 및 리소스 사용량을 측정하여, 성능 개선이 필요한 부분을 시각적으로 보여주는 도구다. 이를 활용한 쿼리 리팩토링 과정은 다음과 같이 진행된다.

 

1) 기존 쿼리 분석 및 성능 문제 파악

  • 리팩토링이 필요한 주요 SQL 쿼리를 선정한다.
  • SPA를 사용하여 실행 계획(Execution Plan)을 분석하고, 병목 현상이 발생하는 부분을 확인한다.
  • 실행 시간, CPU 사용률, I/O 부하 등의 성능 지표를 기반으로 문제점을 파악한다.

2) 리팩토링 방향 설정 및 최적화 계획 수립

  • 불필요한 서브쿼리 제거 및 JOIN 활용 여부를 검토한다.
  • WHERE 절의 필터링 최적화를 통해 불필요한 Full Table Scan을 방지하는 방법을 고려한다.
  • DISTINCT, GROUP BY, ORDER BY 절이 과도하게 사용된 경우, 성능을 저하시키는 요소를 제거하거나 개선할 방안을 마련한다.

3) 쿼리 리팩토링 수행

  • 중복된 SELECT 문을 최소화하고, 불필요한 조인을 제거한다.
  • 서브쿼리를 JOIN 또는 WITH 절로 변경하여 실행 속도를 높인다.
  • 적절한 인덱스를 활용하여 검색 성능을 향상시키고, 실행 계획을 최적화한다.

4) 변경된 쿼리의 성능 검증

  • SPA를 활용하여 리팩토링된 쿼리와 기존 쿼리의 실행 성능을 비교한다.
  • 실행 속도 및 데이터 처리량이 개선되었는지 측정하고, 추가적인 성능 최적화가 필요한 부분을 검토한다.
  • 변경된 쿼리의 결과 값이 기존과 동일한지 검증하여 기능적 일관성을 유지한다.

5) 테스트 및 운영 반영

  • 개발 및 QA 환경에서 충분한 테스트를 진행하고, 다양한 데이터 입력 상황에서의 안정성을 검토한다.
  • 쿼리 변경이 기존 시스템의 다른 기능에 영향을 미치지 않는지 확인한다.
  • 운영 환경에 반영한 후 일정 기간 동안 성능 모니터링을 수행하여 최적화 효과를 지속적으로 관리한다.

3. 샘플 예제를 통한 리팩토링 적용

아래는 SPA를 활용하여 기존 쿼리를 리팩토링하는 실제 적용 사례다.

기존 쿼리 (리팩토링 전)

        SELECT emp_id, emp_name
        FROM employees
        WHERE emp_id IN (
            SELECT emp_id
            FROM salaries
            WHERE salary > 5000
        );
    

 

SPA 분석 결과:

  • 실행 계획에서 employees 테이블이 Full Table Scan을 수행함.
  • 서브쿼리가 별도로 실행되면서 불필요한 연산이 발생함.
  • IN 절을 사용하여 성능이 저하됨.

리팩토링 후 쿼리

        SELECT e.emp_id, e.emp_name
        FROM employees e
        JOIN salaries s ON e.emp_id = s.emp_id
        WHERE s.salary > 5000;
    
  • 리팩토링 결과:
    • JOIN을 활용하여 서브쿼리를 제거, 실행 속도 개선.
    • 실행 계획에서 salaries 테이블의 인덱스를 활용하여 검색 속도를 최적화.
    • Full Table Scan을 방지하고, Index Range Scan으로 개선.

 

SPA를 이용한 성능 비교

리팩토링 후 SPA를 통해 실행 속도를 측정한 결과 다음과 같은 성능 개선 효과를 확인할 수 있었다.

항목기존 쿼리리팩토링 후

실행 시간(ms) 1200 250
CPU 사용량(%) 85 30
I/O 부하 높음 낮음

4. 리팩토링 후 기대 효과

SPA를 활용한 쿼리 리팩토링을 통해 다음과 같은 효과를 기대할 수 있다.

  • 쿼리 실행 속도 향상: 서브쿼리를 최적화하고, 불필요한 연산을 제거함으로써 실행 시간이 대폭 단축된다.
  • 데이터베이스 부하 감소: CPU 및 메모리 사용량을 최적화하여 시스템의 안정성이 향상된다.
  • 유지보수성 증대: 코드가 단순해지고 구조가 명확해져 개발 및 유지보수가 쉬워진다.
  • 운영 환경 최적화: 서버 이관 후에도 안정적인 데이터 처리가 가능하며, 운영 중 발생할 수 있는 성능 문제를 최소화한다.

5. 결론

쿼리 리팩토링은 서버 이관 프로젝트에서 핵심적인 역할을 하며, 기존 SQL의 비효율적인 구조를 개선하여 최적의 성능을 보장하는 과정이다. 특히, SPA를 활용하면 실행 계획을 체계적으로 분석하고, 성능 저하 요소를 명확하게 파악할 수 있어 더욱 효과적인 리팩토링이 가능하다.

 

이번 프로젝트에서는 SPA를 적극적으로 활용하여 쿼리 리팩토링을 수행하고, 실행 속도를 최적화하여 새로운 서버 환경에서도 안정적인 운영을 유지할 수 있도록 철저히 관리할 계획이다. 운영 반영 이후에도 지속적인 모니터링을 통해 추가적인 최적화가 필요한 부분을 점검하고, 최상의 성능을 유지할 수 있도록 지속적으로 개선해 나갈 것이다.