Server performance Tuning

진성·2022년 8월 25일
0
post-thumbnail

Server performance Tuning

성능 개선, 용령 선정과 같은 튜닝 관련 용어들은 모든 개발자 또는 엔지니어가 흥미를 가지는 주제이다.
그 만큼 소프트웨어나 애플리케이션에서 고성능을 내는 시스템을 만들기도 힘들뿐더러 고성능 시스템이란 잘 설계되고 구현된 소프트웨어를 뜻하는 것이니 관심을 가지는 것은 당연한 것이다.

Performance Engineering의 정의와 범위

Performance Engineering은 시스템의 목표 성능을 정의하고, 이를 달성하기 위해서 시스템의 구조를 반복적으로 개선하는 작업을 이야기 한다.
좁게 생각하면 코드상의 병목을 잡고, 시스템의 설정을 바꿔서 성능을 올리는 튜닝으로 생각할 수 있지만, 성능 묙표의 정의에서부터 최적의 성능을 내기 위한 디자인 및 구현과 같은 개발 초기 설계 부분과 개발 후의 운영단계에서 모니터링까지 전과정을 포함한다.

Performance Engineering은 언제 하는가?

1. 분석단계

초기 요구 사항 분석 및 시스템 기획 단계에서는 성능에 대한 목표를 정해야 한다.
목표 응답시간은 어떻게 되는지, 시스템을 사용할 총 사용자수와 동시에 시스템을 사용하는 동시접속자 수가 어떻게 되는지와 같은 성능 목표를 정의한다.
또한 고려해야 하는 사항중의 하나는 성능 모델이다.
시스템에 부하가 어떤 패턴으로 들어오는지를 정의할 필요가 있다.

2. 디자인 단계

디자인 단계에서는 목표 성능과 용량을 달성할 수 있는 규모의 시스템으로 설계를 진행한다.
성능 관점에서 시스템 디자인은 항상 최대 성능에 맞춰서 디자인 된다.
최대 성능을 기반으로 전체 시스템이 받아낼 수 있는 용량과 응답시간을 고려해야 한다.
특히 성능과 용량은 애플리케이션 디자인 뿐만 아니라 Technology selection에도 많은 영향을 받는다.
어떤 하드웨어를 사용할 것인지, 어떤 미들웨어나 프레임워크를 사용할 것인지에 따라 용량과 성능의 차이가 많이 발생하기 때문에 디자인 단계에서부터 성능과 용령을 감안해서 시스템을 설계해야 한다.

3. 개발단계

개발 단계는 리스크가 높은 부분과 아키텍쳐에 관련되는 부분, 난이도가 높은 부분, 핵심 기능들을 개발 초기의 스프린트에서 개발한다.
초기 스프린트가 끝나고 릴리즈가 되서 성능 테스트가 가능한 QA나 스테이징 환경으로 시스템이 이전되면, Performance Engineering 역량을 이 단계에 집중하여, 시스템의 아키텍쳐와 모듈들이 성능 목표를 달성할 수 있는지 지속적으로 테스트하고 튜닝을 수행한다.

4. 최종 테스트 단계

앞의 단계에서 성능과 용량을 고려해서 설계가 되었고, 개발 초기 단계에서 성능과 용량 부분을 검증을 제대로 하였다면, 최종 테스트 단계에서는 개발된 최종 시스템에 대한 성능과 용량 부분의 측정과 미세 튜닝을 하는 정도로 마무리가 되어야 한다.
이 과정에서는 실수로 잘못한 설정이나 잘못된 코딩으로 된 부분에 대해서 검증이 이뤄지는데 이 경우에는 보통 2배에서 크게 10배까지의 성능 향상이 이루어진다.
이런 경우는 대부분 실수에 의한 것이고 성능이 터무니 없이 낮게 나오기 때문에 찾기가 쉽다.

5. 운영단계

마지막으로 시스템이 운영 단계로 넘어가게 되면, 테스트시에 발견되지 않은 성능적인 문제가 있을 수 있기 때문에, 모니터링 도구를 사용하여 지속적으로 성능을 모니터링 하고, 성능상에 문제가 있는 부분을 지속적으로 수정해야 한다.
더불어 용량 부분에 대해서도 운영단에서는 고민을 해야 하는데, 일반적으로 peak time의 시스템 용량이 80% 정도에 다다르면, 시스템 용량 증설을 고려해야 한다.
운영단계에서 Performance Engineering 관점으로 챙겨야 하는 부분은 운영 로그의 수집이다.
성능 및 용량 목표 설정은 매우 중요한 과정이다.
특히 용량 목표의 경우에는 기존의 업무 시스템의 사용 패턴을 분석하는 것이 가장 효율적이기 때문에 운졍 시스템의 로그를 수집하고 분석하여 운영 중인 업무 시스템의 성능 ㅁ모델을 분석 및 보유 해놓는 것이 좋다.

테스트 및 모니터링

부하 테스트가 준비과 되었으면 부하 테스트를 진행하고 진행중에 주요 성능에 대해서 지속적으로 모니터링 및 기록을 하여야 한다.
모니터링 관점에 따라 측정을 하는것이 다르다.

  • 애플리케이션 관점
    • 시스템의 성능을 측정해야 한다.
  • 미들웨어 관점
    • Apache와 같은 웹서버나 MySQL과 같은 데이터베이스 등이 이에 해당한다.
  • 인프라 관점
    • 하드웨어 인프라에 대한 부분을 지속적으로 모니터링해줘야 하는데, 이는 하드웨어가 해당 성능을 내기 위해서 용량이 충분한지 그리고 하드웨어 구간에서 병목이 생기지는 않는지, 생긴다면 어느 구간에서 생기는지를 모니터링하여, 해당 병목 구간에 대한 문제 해결을 하기 위함이다.

반복

튜닝이 끝났으면 다시 테스트 및 모니터링 항목으로 돌아가서 성능 목표에 도달할때까지 위의 작업을 계속해서 반복해서 수행한다.

참고: 성능 분석 및 튜닝이란?(performance tuning)

profile
풀스택 진행중...

0개의 댓글