Backend 개발/SQL 성능 개선

백엔드 개발자가 SQL 쿼리 튜닝을 해야 하는 이유

수달리즘 2025. 4. 15. 10:20
반응형

백엔드 개발자라면 이제 어플리케이션뿐만 아니라 SQL 튜닝도 어느 정도 할 줄 알아야 한다.
김영한 강사님 曰, 기승전DB 라고할 만큼 DB와 SQL에 대한 충분한 공부가 필요하다.
실제로 요즘 취업 시장 백엔드 개발자 요구 조건엔 SQL 튜닝 능력도 포함되어 있는 것을 흔히 볼 수 있다.

어플리케이션 성능 저하 요인

어플리케이션 성능을 저하시키는 요인은 크게 다음의 3가지로 꼽을 수 있다.

  1. 동시 사용자 수/트래픽 증가
  2. 데이터 양의 증가
  3. 비효율적인 SQL문

여기서는 비효율적인 SQL문을 어떻게 개선할 수 있을지 알아볼 것이다.

DB 성능에 관하여

DB 성능에 관한 요소는 [인덱스, 트랜잭션, SQL 튜닝, 실행계획, 레플리케이션, 샤딩] 등등 다양하다.

그러나 DB 성능을 개선할 때, SQL 튜닝을 가장 먼저 고려해야 한다. 그 이유는 다음과 같다.

  1. SQL 튜닝을 제외한 나머지 방법은 추가적인 시스템을 구축해야 한다. → 금전적, 시간적 비용 발생
  2. 근본적인 문제 해결 방법이 SQL 튜닝일 가능성이 높음 → SQL 자체가 비효율적이라면 아무리 시스템적으로 성능을 개선한다 해도 한계가 있음

성능 개선을 위한 RDBMS 구조 파악


+----------------------+
|      Client         |
+----------------------+
          |
          v
+----------------------+
|   Query Parser      |  <-- 구문 분석 (Syntax Analysis)
+----------------------+
          |
          v
+----------------------+
| Query Rewrite Engine |  <-- 논리적 최적화 (View Expansion, Subquery Flattening)
+----------------------+
          |
          v
+----------------------+
| Cost-based Optimizer |  <-- 비용 기반 최적화 (Cardinality Estimation, Join Ordering)
+----------------------+
          | 
          v
+----------------------+
| Rule-based Optimizer |  <-- 규칙 기반 최적화 (Heuristics, Index Selection)
+----------------------+
          |
          v
+----------------------+
| Execution Plan Generator |  <-- ★ 실행 계획 생성
+----------------------+
          |
          v
+----------------------+
| Query Execution Engine  |  <-- 실행 엔진 (Iterator, Volcano Model)
+----------------------+
          |
          v
+----------------------+
|   Storage Layer     |  <-- 데이터 접근 및 저장
+----------------------+

위의 도표를 요약하면 다음과 같다.

  1. 클라이언트가 DB에 SQL 요청
  2. DB 엔진에서 옵티마이저가 SQL문을 분석한 뒤 빠르고 효율적으로 데이터를 가져올 수 있는 계획을 세운다. 어떤 순서로 테이블에 접근할 지, 어떤 인덱스를 사용할 지 등을 결정
    (※ 옵티마이저가 세운 계획은 완벽하지 않다. 따라서 SQL 튜닝이 필요)
  3. 옵티마이저가 세운 계획을 바탕으로 스토리지 엔진에서 데이터를 가져온다.
    (DB 성능에 문제가 생기는 대부분의 원인은 스토리지 엔진으로부터 데이터를 가져올 때 발생한다. 데이터를 찾기가 어려워서 오래 걸리거나, 가져올 데이터가 너무 많아서 오래 걸린다. SQL 튜닝의 핵심은 스토리지 엔진으로부터 되도록이면 데이터를 찾기 쉽게 바꾸고, 적은 데이터를 가져오도록 바꾸는 것을 말한다)
  4. DB 엔진에서 정렬, 필터링 등의 마지막 처리를 한 뒤에 클라이언트에게 SQL 결과 응답

SQL 튜닝의 핵심

  1. 스토리지 엔진에서 데이터를 찾기 쉽게 바꾸기
  2. 스토리지 엔진으로부터 가져오는 데이터의 양 줄이기

 

내가 정리한 내용들은 인프런 강의를 보고 공부/정리한 것이다. 다음 강의를 들어볼 것을 추천한다.

https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-mysql-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%95%ED%99%95-sql%ED%8A%9C%EB%8B%9D

 

728x90
반응형