Backend 개발/SQL 성능 개선
백엔드 개발자가 SQL 쿼리 튜닝을 해야 하는 이유
수달리즘
2025. 4. 15. 10:20
반응형
백엔드 개발자라면 이제 어플리케이션뿐만 아니라 SQL 튜닝도 어느 정도 할 줄 알아야 한다.
김영한 강사님 曰, 기승전DB 라고할 만큼 DB와 SQL에 대한 충분한 공부가 필요하다.
실제로 요즘 취업 시장 백엔드 개발자 요구 조건엔 SQL 튜닝 능력도 포함되어 있는 것을 흔히 볼 수 있다.
어플리케이션 성능 저하 요인
어플리케이션 성능을 저하시키는 요인은 크게 다음의 3가지로 꼽을 수 있다.
- 동시 사용자 수/트래픽 증가
- 데이터 양의 증가
- 비효율적인 SQL문
여기서는 비효율적인 SQL문을 어떻게 개선할 수 있을지 알아볼 것이다.
DB 성능에 관하여
DB 성능에 관한 요소는 [인덱스, 트랜잭션, SQL 튜닝, 실행계획, 레플리케이션, 샤딩] 등등 다양하다.
그러나 DB 성능을 개선할 때, SQL 튜닝을 가장 먼저 고려해야 한다. 그 이유는 다음과 같다.
- SQL 튜닝을 제외한 나머지 방법은 추가적인 시스템을 구축해야 한다. → 금전적, 시간적 비용 발생
- 근본적인 문제 해결 방법이 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 | <-- 데이터 접근 및 저장
+----------------------+
위의 도표를 요약하면 다음과 같다.
- 클라이언트가 DB에 SQL 요청
- DB 엔진에서 옵티마이저가 SQL문을 분석한 뒤 빠르고 효율적으로 데이터를 가져올 수 있는 계획을 세운다. 어떤 순서로 테이블에 접근할 지, 어떤 인덱스를 사용할 지 등을 결정
(※ 옵티마이저가 세운 계획은 완벽하지 않다. 따라서 SQL 튜닝이 필요) - 옵티마이저가 세운 계획을 바탕으로 스토리지 엔진에서 데이터를 가져온다.
(DB 성능에 문제가 생기는 대부분의 원인은 스토리지 엔진으로부터 데이터를 가져올 때 발생한다. 데이터를 찾기가 어려워서 오래 걸리거나, 가져올 데이터가 너무 많아서 오래 걸린다. SQL 튜닝의 핵심은 스토리지 엔진으로부터 되도록이면 데이터를 찾기 쉽게 바꾸고, 적은 데이터를 가져오도록 바꾸는 것을 말한다) - DB 엔진에서 정렬, 필터링 등의 마지막 처리를 한 뒤에 클라이언트에게 SQL 결과 응답
SQL 튜닝의 핵심
- 스토리지 엔진에서 데이터를 찾기 쉽게 바꾸기
- 스토리지 엔진으로부터 가져오는 데이터의 양 줄이기
내가 정리한 내용들은 인프런 강의를 보고 공부/정리한 것이다. 다음 강의를 들어볼 것을 추천한다.
728x90
반응형