| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- node-cron
- CI/CD
- typescript
- jsonwebtoken
- cronjob
- 자동배포
- Express
- 리버스 프록시
- gtiactions
- nextjs
- AWS
- 백엔드
- 웹개발
- 풀스택
- JWT
- 토큰인증
- 코딩컨벤션
- nodeJS
- 권한인증
- 개발지식
- 데이터베이스
- 성능
- amazon web services
- 유저기능
- server
- pm2
- 기술블로그
- 포워드 프록시
- 에러핸들링
- 프론테
- Today
- Total
생각해 보자 님의 블로그
데이터베이스의 성능 개선? indexing을 알아 보자 본문
배경
백엔드 개발에서 성능은 매우 중요한 요소입니다. 사용자가 느끼는 서비스의 품질을 결정짓는 핵심 요소 중 하나가 바로 API 응답 속도입니다. API의 응답 속도가 느리면 사용자 경험은 물론, 전체 서비스의 신뢰성에도 큰 영향을 미칠 수 있습니다.
성능 최적화 방법은 여러 가지가 있지만, 그 중에서도 데이터베이스 성능은 중요한 부분을 차지합니다. 데이터베이스가 느리면 API 응답 시간 역시 길어질 수밖에 없습니다. 그렇다면 데이터베이스 성능을 어떻게 개선할 수 있을까요? 그 중 하나가 바로 인덱싱입니다.
이번 글에서는 인덱싱이란 무엇인지, 어떻게 성능을 개선할 수 있는지, 그리고 왜 인덱스를 적용해야 하는지에 대해 다뤄보겠습니다. 또한, 인덱스를 사용한 성능 개선 예시를 통해 이를 더 쉽게 이해할 수 있도록 하겠습니다.
API 성능을 향상시킬 때 고려할 점
API 성능을 향상시키려면 여러 가지 요소를 고려해야 합니다. 그 중에서 데이터베이스 성능은 핵심적인 요소입니다. 데이터베이스의 성능이 저하되면 쿼리 실행 속도가 느려지고, 결국 API의 응답 속도도 늦어지기 때문입니다.
**스케일업(Vertical Scaling)**과 **스케일아웃(Horizontal Scaling)**은 서버 성능을 개선하는 방법으로 잘 알려져 있습니다. 스케일업은 서버 성능을 향상시키는 방법으로, 더 빠른 CPU, 더 많은 메모리, 빠른 스토리지를 추가하는 방법입니다. 하지만 이것은 비용이 많이 들고, 서버 성능에 한계가 있어 지속적으로 확장이 어렵습니다. 반면 스케일아웃은 여러 서버를 추가해 부하를 분산시키는 방법입니다. 그러나 이 방법은 시스템 관리와 데이터 일관성 유지에서 어려움이 있을 수 있습니다.
따라서, 데이터베이스 성능 최적화는 비교적 저렴한 비용으로 성능을 향상시킬 수 있는 방법 중 하나입니다. 이 중에서도 SQL 쿼리 최적화가 가장 중요한 첫 번째 단계입니다.
데이터베이스 성능 - SQL부터 고려해야 하는 이유
SQL 쿼리 성능이 잘못 작성되면 데이터베이스가 데이터를 비효율적으로 처리하게 되어 성능 저하가 발생합니다. 예를 들어, 쿼리가 불필요한 JOIN을 사용하거나, 적절한 인덱스가 없을 경우 데이터베이스는 많은 양의 데이터를 한 번에 읽어야 하므로 응답 시간이 길어지게 됩니다.
이러한 비효율적인 쿼리 실행은 데이터베이스의 성능을 크게 저하시킬 수 있기 때문에, SQL 쿼리 최적화는 매우 중요한 작업입니다. 데이터베이스가 처리할 수 있는 양과 속도는 쿼리의 효율성에 따라 크게 달라지기 때문입니다.
인덱싱이란?
인덱싱은 데이터베이스에서 특정 컬럼에 대해 빠르게 조회할 수 있도록 도와주는 구조입니다. 인덱스를 사용하면 데이터베이스는 테이블을 순차적으로 검색하는 대신, 인덱스를 통해 정렬된 순서대로 빠르게 데이터를 찾을 수 있습니다.
예를 들어, users 테이블에 age라는 열이 있고, 이를 기준으로 데이터를 조회한다고 가정해봅시다. 인덱스를 사용하면, age 값에 맞춰 미리 정렬된 데이터를 빠르게 찾아낼 수 있습니다. 이와 달리 인덱스가 없다면 데이터베이스는 전체 데이터를 하나하나 비교해야 하므로 시간이 오래 걸릴 수 있습니다.
인덱싱을 통한 성능 향상 예시
컬럼인덱스가 없을 때 (전체 탐색)인덱스가 있을 때 (정렬된 탐색)
| id | 전체 테이블을 순차적으로 검색 | 이미 정렬된 인덱스를 통해 빠르게 조회 가능 |
| age | 모든 레코드의 age 값을 순차적으로 확인 | age에 대한 인덱스를 통해 해당 값을 빠르게 조회 |
| email (유니크) | 모든 레코드를 비교하여 일치하는 이메일을 찾음 | 유니크 인덱스가 자동으로 생성되어 빠르게 조회 가능 |
위 표에서 보면, age 컬럼에 인덱스가 있으면, 데이터베이스는 미리 정렬된 데이터를 통해 빠르게 조회할 수 있습니다. 반면, 인덱스가 없다면 모든 레코드를 하나하나 비교해야 하므로 시간이 많이 소요됩니다. 이러한 인덱스를 통해 데이터베이스 성능을 크게 향상시킬 수 있습니다.
인덱스의 장점:
- 조회 성능 개선: 대량의 데이터를 처리할 때 성능을 크게 향상시킵니다.
- 정렬된 데이터 접근: 미리 정렬된 데이터를 통해 빠르게 시작점과 종료점을 알 수 있습니다.
단점:
- 쓰기 작업 성능 저하: 데이터를 삽입하거나 업데이트할 때마다 인덱스가 갱신되어 성능에 영향을 미칠 수 있습니다.
데이터베이스 성능을 개선하는 방법은 다양하지만, 인덱싱은 가장 중요한 성능 최적화 기법 중 하나입니다. 데이터베이스에서 인덱스를 사용하면 대량의 데이터에서 빠르게 원하는 데이터를 조회할 수 있어 API 응답 속도를 획기적으로 개선할 수 있습니다.
하지만, 인덱스를 남용하는 것은 좋지 않습니다. 인덱스가 너무 많으면 쓰기 성능이 저하될 수 있기 때문입니다. 따라서, 중요한 컬럼에 대해서만 적절하게 인덱스를 적용하는 것이 중요합니다.
이번 글을 통해 데이터베이스 성능 최적화에서 인덱스가 어떤 역할을 하는지 이해하고, 실제로 어떻게 적용할 수 있을지에 대해 알아보았습니다. 데이터베이스 성능을 높이려면, 인덱스를 잘 활용하고, SQL 쿼리 최적화와 같은 기법들을 함께 고려하는 것이 중요합니다.
'테크 지식' 카테고리의 다른 글
| 프로그래밍에서 단일 책임 원칙 이란? 무엇을 고려해야 할까? (0) | 2025.03.13 |
|---|---|
| DB 인덱스는 어떻게 활용해야 할까? 주의할 사항을 알아보자 (0) | 2025.02.21 |
| Next.JS에서 OAuth를 활용하기 (1) | 2025.01.17 |
| Next.JS SSR 환경에서 쿠키를 활용하는 방법이 뭐가 있을까? (1) | 2025.01.17 |
| Javascript vs Typescript: 무엇이 다른 걸까? (2) | 2025.01.01 |