목적
필요한 이유
어째서 데이터베이스의 optimization은 중요한 것인가?
가정 - 사례
한 계정에서 자료를 확인하고자 할 때, 데이터베이스 자체 조회 시간이 3초라고 가정해보자. 혼자서 사용하는 데이터베이스면 문제는 없는데, 여러 명이서 사용하는 데이터베이스 즉 다중 사용자 구조의 데이터베이스면 문제가 된다.
가정 - 문제
단일 처리 기준
- 솔직히 단일 사용할때는 그렇게 필요하진 않은 것 같음.
- 단일로 처리하는 기준으로는 단순 계산으로 100명 x 3초 = 300초라는 계산이 나옴
병렬 처리 기준
- 핵심은 병렬 처리 기준이다. 다중 사용자 구조에서는 필수적이며 다음과 같은 영향에 따라 문제 요소가 변경됨
1. 성능 향상
왜 중요한가?
- 데이터베이스가 빠르게 쿼리를 처리하지 못하면 사용자는 긴 응답 시간을 경험하고, 시스템 전체의 효율성이 저하됨.
어떻게 개선되는가?
- 쿼리 최적화: 느린 쿼리를 재작성해 데이터 검색 속도를 높임.
- 인덱스 추가: 테이블 검색 속도를 크게 향상.
- I/O 부담 감소: 데이터를 읽고 쓰는 작업을 줄여 응답 속도 향상.
2. 동시성(Concurrency) 지원
왜 중요한가?
- 현대 애플리케이션은 다중 사용자 환경에서 동시 요청을 처리해야 함. 병렬 처리를 지원하지 못하면 성능이 급격히 저하되고 병목 현상이 발생.
어떻게 개선되는가?
- 연결 풀링(Connection Pooling): 동시에 처리할 수 있는 요청 수 증가.
- 효율적 리소스 관리: CPU, 메모리, I/O 대역폭 등을 병렬 요청에 맞게 조정.
3. 확장성(Scalability) 확보
왜 중요한가?
- 데이터가 많아지고 사용자가 증가하면 기존의 데이터베이스 설계로는 한계에 도달. 최적화가 없으면 확장 비용이 급증.
어떻게 개선되는가?
- 파티셔닝: 테이블을 나눠 병렬 처리 및 읽기/쓰기 속도 향상.
- 분산 데이터베이스: 데이터를 여러 서버로 분산해 부하를 줄이고 확장성 제공.
4. 리소스 효율성(Resource Efficiency)
왜 중요한가?
- 데이터베이스는 메모리, CPU, 디스크 I/O, 네트워크 등 다양한 자원을 소모. 비효율적인 사용은 성능 저하와 비용 증가를 초래.
어떻게 개선되는가?
- 캐싱: 자주 사용되는 데이터를 메모리에 저장해 디스크 접근 감소.
- 쿼리 리팩토링: 불필요한 데이터 처리 제거.
- 정규화/비정규화: 데이터 구조를 상황에 맞게 최적화.
5. 비용 절감
왜 중요한가?
- 데이터베이스가 최적화되지 않으면 더 많은 하드웨어와 클라우드 자원이 필요, 이는 운영 비용 상승으로 이어짐.
어떻게 개선되는가?
- 작업량 감소: CPU, 메모리, 스토리지 사용량을 줄여 자원 효율성을 극대화.
- 자동화된 작업: 스케줄러 및 파이프라인 최적화로 관리 비용 절감.
6. 사용자 경험 향상
왜 중요한가?
- 데이터베이스 응답 시간이 서비스 품질에 직결됨. 느린 응답은 사용자 이탈을 유발.
어떻게 개선되는가?
- 짧은 응답 시간: 데이터가 빠르게 제공되므로 애플리케이션 성능이 향상.
- 다운타임 최소화: 안정적인 성능으로 서비스 중단 방지.
7. 시스템 안정성 및 데이터 무결성 보장
왜 중요한가?
- 대규모 트래픽이나 데이터 증가로 시스템이 불안정하면 데이터 손실 및 서비스 장애가 발생.
어떻게 개선되는가?
- 트랜잭션 최적화: 데이터 일관성과 무결성 유지.
- 효율적 백업 및 복구: 최적화된 데이터 구조는 백업/복구 속도를 개선.
8. 애플리케이션 요구사항 충족
왜 중요한가?
- 데이터베이스는 애플리케이션이 요구하는 속도, 정확성, 확장성을 지원해야 함.
어떻게 개선되는가?
- 비즈니스 로직 반영: 적절한 데이터 모델 설계.
- 데이터 분석 최적화: BI 및 데이터 웨어하우스 작업 성능 향상.
그럼 무엇이 필요한가?