공중도메인 데이터베이스 성능최적화 기술
상태바
공중도메인 데이터베이스 성능최적화 기술
  • Network Computing
  • 승인 2001.06.29 00:00
  • 댓글 0
이 기사를 공유합니다

대부분의 웹 애플리케이션 개발에는 데이터베이스 사용이 수반된다. 예산이 부족하거나 오픈 소스의 편이라면, 아마도 PHP와 오픈 소스 데이터베이스를 사용할 것이다. 그럴 경우 데이터베이스에서 최대한의 가치를 뽑아낼 수 있는 방법에 익숙해질 필요가 있다. 다음은 대부분의 오픈 소스 데이터베이스에서 사용할 수 있는 몇 가지 성능 향상 기술들이다.

데이터베이스 최적화
코드의 성능을 향상시킬 수 있는 가장 빠른 방법은 인라인 SQL 구문(Inline SQL Statement)을 저장된 프로시저(stored procedure)로 교체하는 것이다.

◆ 저장된 프로시저를 사용하라

코드의 성능을 향상시킬 수 있는 가장 빠른 방법은 인라인 SQL 구문(Inline SQL Statement)을 저장된 프로시저(stored procedure)로 교체하는 것이다. 저장된 프로시저는 데이터베이스 내에 저장된 루틴들이다. 이들은 데이터베이스 엔진에 의해 사전 컴파일링되며, 콜링 애플리케이션(보통 PHP 페이지)과 데이터베이스 엔진 사이를 오가는 절차를 거치면서 대폭적인 성능 향상을 제공한다.

게다가 저장된 프로시저는 유지보수가 훨씬 더 수월하다. 로직은 한 조각의 코드 안에 존재하기 때문에, 어떠한 변경이건 이 하나의 장소 안에서 이루어지며, 이것을 사용하는 모든 코드는 즉각적으로 수정될 수 있다. 또한 모든 코드가 단일 지점에 속해 있으면, 비즈니스 로직을 확실하게 전문적인 필요조건에 맞추기가 훨씬 간편해진다. 프로시저가 충분히 일반적인 것이라면, 몇 개의 프로젝트에서 이들을 재사용할 수 있기 때문에 개발 시간이 줄어든다.

저장된 프로시저는 또한 PHP, ASP(Active Server Page), JSP(Java Server Page), 혹은 기타 웹 개발 언어 안에서부터 SQL 코드를 실행하는 것에 비해 네트워크 트래픽을 줄여준다. 마지막으로 확장성이 문제가 될 경우, 대부분의 데이터베이스 액세스 로직이 저장돼 있고 데이터베이스 내부에서 실행된다면, 몇 개의 애플리케이션 서버를 가로질러 애플리케이션 코드를 확장하기가 훨씬 쉬워진다.

◆ 멀티미디어 파일을 파일 시스템 안에 저장하라

정적 이미지건, 사운드 파일이건, 영화 파일이건, 멀티미디어 파일들은 종종 바이너리 객체들로 취급되는 경우가 많다. 보다 전문적으로 말해, 이들은 블롭(Binary Large Object)이라고 불린다. 블롭을 처리하는 데는 두 가지 방법이 있는데, 데이터베이스 안에 저장하거나 혹은 파일 시스템에 저장하고 그 경로를 데이터베이스 안에 저장하는 방법이다. 파일 시스템 내에 블롭을 저장하기 위해서는 약간 더 많은 작업이 필요하지만, 데이터베이스 안에 저장하는 것보다도 훨씬 더 나은 성능을 얻을 수 있다.

데이터베이스 엔진의 성능은 많은 바이너리 객체들을 저장할 때 급속하게 감소할 수 있다. 그리고 이런 파일들을 삭제하면, 데이터베이스 파일 내에 상당량의 쓸모없는 공간(dead space)이 생겨나게 된다. 모든 것이 데이터베이스 엔진을 통해 처리될 때는 멀티태스크 작업이 더 어려워진다. 반대로 이들을 파일 시스템 안에 저장하면 웹 페이지로부터 다운로드 링크를 쉽게 만들 수 있다. 다운로딩의 경우, 웹 서버가 파일을 지원하는 동안 데이터베이스 엔진은 다른 업무를 위해 사용될 수 있다. 또 다른 이점으로 관리자는 멀티미디어 디스크 파일을 쉽게 백업, 목록작성(catalog) 및 관리할 수 있다.

◆ 인덱싱을 이용하라

인덱싱(indexing)은 성능을 향상시킬 수 있는 확실한 방법이다. 또한 이것은 데이터베이스 설계에서 가장 간과되기 쉬운 중요한 요소들 중 하나다. 보통 데이터베이스 내의 열(row)은 만들어진 순서대로 저장된다. 데이터베이스 레코드에서 어떤 임의값을 검색하기 위해서는 데이터베이스 열들을 순차적으로 스캐닝해야 한다.

인덱스는 선택한 인덱스에 따라 정렬되고, 원래의 열들을 가리키는 지시자(pointer)를 포함하고 있는 별도의 열 세트를 만들어준다. 인덱싱된 데이터베이스에서의 데이터베이스 룩업은 인덱싱되지 않은 테이블에서의 룩업보다도 훨씬 더 빨리 수행된다. 하지만 인덱싱은 더 많은 디스크 공간을 잡아먹는다. 게다가 테이블로의 업데이트도 더 오래 걸리는데, 그 이유는 적용 가능한 모든 인덱스들도 업데이트돼야 하기 때문이다.

◆ 정수 키 필드를 사용하라

정수 키 필드 없이 테이블을 만들고 싶은 유혹이 생길 것이다. 예를 들어, 신상 기록 테이블에서는 last_name이라는 하나의 문자 필드와 first_name이라는 하나의 필드, 거기에 주소 및 연락처가 있는 테이블을 만들고 결합(join), 룩업 등에서 이름을 사용할 것이다. 이런 실행 보다는 숫자 키 필드를 사용하는게 좋다(이것을 person_id라고 부르기로 하자). 데이터가 그러한 필드를 갖고 있지 않다면, 실질적인 데이터를 보유하지 않으면서 키 필드로서 지원을 하는 자동증식(autoincrement) 필드를 만들어야 한다.

숫자 필드는 많은 이점을 제공한다. 숫자들은 부정확하게 사용될 가능성이 훨씬 적다. 만약 사람의 이름이 바뀔 경우(예를 들어 결혼으로 인해), 코드 내에 거기에 관련된 모든 것을 바꿀 필요가 없다. 그리고 숫자 결합은 문자 기반의 결합보다도 더 효율적이다. 새 테이블을 만들고 있다면 언제든지 숫자 우선 키를 만드는 게 좋다.


댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.