Performance Engineering(성능 공학) - 분석 단계, 설계 단계, 개발단계, 최종 테스트 단계, 운영 단계

CODEDRAGON Development/Software Engineering

반응형

 

 

Performance Engineering(성능 공학)

시스템의 목표 성능(응답 시간과 동시 접속자수)을 정의하고, 이를 달성하기 위해서, 시스템의 구조를 반복적으로 개선하는 작업을 의미한다.

 

https://en.wikipedia.org/wiki/Performance_engineering

 

성능 목표의 정의부터, 최적의 성능을 내기 위한 디자인 및 구현과 같은 개발 초기의 설계 부분과 개발 후의 운영단계의 모니터링까지 모든 과정을 포함한다.

·       분석 단계

·       설계 단계

·       개발단계

·       최종 테스트 단계

·       운영 단계

 

 

분석 단계

·       초기 요구 사항 분석 및 시스템 기획 단계에서는 성능에 대한 목표를 정해야 한다.

·       목표 응답시간은 어떻게 되는지, 시스템을 사용할 총 사용자수와 동시에 시스템을 사용하는 동시접속자 수가 어떻게 되는지와 같은 성능 목표를 정의한다.

·       또한 고려해야 하는 사항 중의 하나는 성능 모델이다. 시스템에 부하가 어떤 패턴으로 들어오는지를 정의할 필요가 있다.

 

 

 

설계 단계

·       목표 성능과 용량을 달성할 수 있는 규모의 시스템으로 설계를 진행한다.

·       성능 관점에서 시스템 디자인은 항상 Peak Time(최대 성능)에 맞춰서 디자인이된다. 최대 성능을 기반으로 전체 시스템이 받아낼 수 있는 용량과 응답 시간을 고려해야 한다.

·       특히 성능과 용량은 애플리케이션 디자인뿐만 아니라 Technology Selection에도 많은 영향을 받는다. 어떤 하드웨어를 사용할 것인지, 어떤 미들웨어나 프레임워크를 사용할 것인지에 따라 용량과 성능의 차이가 많이 발생하기 때문에, 디자인 단계부터 성능과 용량을 감안해서 시스템을 설계해야 한다.

·       하드웨어 관점에서는 예전에는 성능 모델을 산정한 후에 Peak Time 기준(최대성능 요구)으로 시스템을 설계하고, 하드웨어를 구매하였으나, 근래에는 클라우드를 이용하여 필요시에만 하드웨어를 탄력적으로 사용하는 Auto Scale Out 모델을 많이 사용한다.

·       기업 내부의 업무 처럼(예를 들어 이메일), 부하가 일정하고 예측이 가능한 경우에는 Fixed된 사이즈의 하드웨어를 사용하도록 설계하고, 출시 이벤트 행사 사이트와 같이 부하가 갑자기 몰리는 시스템의 경우 클라우드를 고려해보는 것도 권장할 만하다.

·       또한 빠른 응답 시간이 필요할 경우 SSD 디스크를 사용하거나, RAID 구성도 5보다는 1+0 등을 고려하는 등, 성능 모델에 따라서 적절한 하드웨어 선정과 구성설계가 필요하다.

·       미들웨어나 프레임워크 관점에서도 정의된 성능 모델에 따라 적절한 제품군과 설계 구조를 채택해야 한다. 100,000 사용자 정도의 시스템 규모에서는 RDBMS를 사용해도 성능이나 용량상에 문제가 없다. 그러나 50,000,000 사용자 정도를 지원해야 하는 시스템의 경우 그냥 RDBMS를 사용할 수 없다. Sharding이나, NoSQL과 같은 다른 차원의 접근이 필요하다.

 

 

 

개발단계

·       개발 단계는 개발프로세스 챕터에서 설명하였듯이, Risk가 높은 부분과 아키텍처에 관련되는 부분, 난이도가 높은 부분, 핵심 기능등을 개발 초기의 스프린트에서 개발한다.

·       초기 스프린트가 끝나고 릴리즈가 되어서 성능 테스트가 가능한 QA(Quality Assurance)나 스테이징환경으로 시스템이 이전되면 Performance Engineering 역량을 이 단계에 집중하여, 시스템의 아키텍처와 모듈들이 성능 목표를 달성할 수 있는지 지속적으로 테스트하고 튜닝을 수행한다.

·       초기 단계에 성능 목표의 달성 가능 여부가 판단되어야 아키텍처 변경이 가능합니다. 그렇기 때문에 주요 성능 이슈들을 초반에 발견해야 합니다.

·       발견된 성능 문제들에 대해서는 같은 문제가 발생하지 않도록 디자인 가이드나 코딩 가이드를 개발자들에게 배포하여 성능에 대한 위험도를 줄일 수 있다.

 

 

 

최종 테스트 단계

·       앞의 단계에서 성능과 용량을 고려해서 설계가 되었고, 개발 초기 단계에서 성능과 용량 부분의 검증을 제대로 하였다면, 최종 테스트 단계에서는 개발된 최종 시스템에 대한 성능과 용량 부분의 측정과 미세 튜닝(애플리케이션의 병목을 찾아서 부분적으로 수정하거나, 하드웨어나 미들웨어의 Configuration하는 수준)을 하는 정도로 마무리가 되어야 한다.

 

 

 

운영 단계

마지막으로 시스템이 운영 단계로 넘어가게 되면 테스트 시에 발견되지 않은 성능적인 문제가 있을 수 있기 때문에, 모니터링 도구를 사용하여 지속적으로 성능을 모니터링하고, 성능에 문제가 있는 부분을 지속적으로 수정해야 한다.