#title 성능의 기본 7원칙 [[TableOfContents]] 이 글은 소프트웨어 성능공학(SPE, Software Performance Engineering)의 전문가인 스미스 박사(Connie U. Smith)의 저서 ‘Performance Engineering of Software System’의 시스템 성능과 관련된 의사결정에 결정적인 근거를 제공해 주는 7가지 기본원칙이다. ==== 제 1 원칙 : 초기 연결점의 유지 원칙(Fixing-Point Principle) ==== “신속한 응답을 위하여 가능한 빠른 시간에 연결을 시작하여 지속적으로 유지하는 것이 비용이 효과적이다.” * 동적 SQL을 제거하라 * 관련된 SQL문장을 Stored Prodedure로 대치하라 * 빈번히 반복적으로 수행되는 메뉴나 폼을 범용사용자 인터페이스를 사용하지 말고 전용으로 별도로 구성하라. * DB 서버와의 네트워크 액세스를 최소화하기 위해 필요한 경우 테이블을 클라이언트 PC로 다운로드 한다. * 디스크 I/O를 최소화를 위해 자주 사용되는 테이블과 인덱스를 메모리 안으로 버퍼링한다. * DB 비정규화를 준비한다. * 경영자 정보시스템을 위한 DB는 별도로 준비한다. ==== 제 2 원칙 : 가까운 자원 사용 원칙(Locality-Design Principle) ==== “물리적으로 가까운 거리의 컴퓨터 자원을 최우선적으로 사용하여 결과를 구하라” * 모든 사용자 인터페이스 로직은 클라이언트 PC에서 수행하라 * 표준적인 DB 처리를 위한 내장 프로시저는 Db서버에서 실행토록 하라 * 실행 도중 서로 다른 지역에 위치한 DB로부터 데이터를 조합하는 프로그램을 가급적 피하라. * 사용자와 가까운 곳으로 데이터를 분산 배치하기 위한 방법으로 체계적인 데이터 중복구조(Replication Schemes)를 사용하라 * 데이터 처리 작업의 85% 이상이 지역의 데이터를 사용하도록 설계목표를 정하라 ==== 제 3 원칙 : 처리와 빈도의 상관원칙(Processing vs Frquency Trade off Principle) ==== “빈번히 수행되는 작업의 처리시간을 최소화하도록 노력하라” * 개발 초기 단계에 작업별 실행빈도를 분석해 두어라 * 클라이언트와 서버간의 LAN 전송횟수를 최소화하도록 프로그램을 설계하라 * 서버와 서버간의 WAN 전송횟수를 최소화하도록 데이터를 분산하라 * 다수의 SQL 요구 대신 내장 프로시저를 사용하라 ==== 제 4 원칙 : 자원공유원칙(Shared-Resource Princlple) ==== “가능한 한 공유될 수 있는 형태로 자원을 사용하라. 독립적인 사용이 필요한 경우에도 자원 점유시간 및 대기시간을 최소화하라” * 서로 다른 지역에 위치한 데이터의 동질성을 유지하기 위하여 2단계 커밋(2 Phase Commit)을 사용하지 말고 데이터중속/복사 구조를 활용하라 * 처리능력이 상대적으로 열악한 공유자원(서버디스크, WAN)의 점유시간을 최소화하도록 프로그램을 설게하라 * 신속한 응답을 요구하는 온라인 작업과 장시간의 처리를 수행하는 일괄작업은 별도의 서버로 분리하라 ==== 제 5 원칙 : 병렬처리원칙(Parallel Processing Principle) ==== “병렬처리는 처리사간의 단축이 커뮤니케이션 상의 추가적인 부담과 기타 자원의 경합에 따른 지연을 상쇄할 수 있는 경우에만 선택하라” * 서버에서 병렬처리의 과도한 개시와 종료를 반복하지 마라. * Top End, TUXIDO, ENCNA등의 TP모니터를 이용하여 자원사용에 대한 우선 순위 관리를 맡기는 것도 좋은 방법이다. * 병렬처리를 위한 DBMS제품과 하드웨어 제품의 겸용성을 확인하라. ==== 제 6 원칙 : 집중화 원칙(Centering Principle) ==== “시스템 부하를 가중시키는 핵심적인 처리작업을 선별하여 그들의 처리시간 단축에 관심을 집중하라. –80/20 규칙을 기억하라” * 처리 우선순취가 높은 프로그램 * 규모가 매우 큰 프로그램 * 신속한 응답을 요구하는 프로그램 * 프로그램 내에서는 처리가능의 핵심 부분에 관심을 집중하여 가장 심각하게 문제가 되는 자원을 먼저 튜닝한다. ==== 제 7 원칙 : 설비활용 원칙(Instrumenting Principle) ==== “작업 부하, 자원 요구 정도와 성능목표 달성 여부 등을 측정 보완할 수 있는 설비를 갖추고 이를 활용하라” * 문제가 있는 프로그램이나 시스템 자원을 파악하기 위해 모델링 기법을 이용하라 * 어디서 병목현상이 나타나는지 알고 있다고 가정하지 마라 * 클라이언트/서버 분산 시스템에 활용 가능한 감시용 소프트웨어가 있을 것이라고 가정하지 마라(대행 시스템 벤더들은 클라이언트/서버 솔루션의 지원에 적극적이지 않다.)