1장 ~ 4장에 이어 오늘 5장부터 9장을 읽고 내용을 정리해보려고 한다.
5장에서는 부하테스트 계획을 수립하는 방법에 대해 알려준다. 제대로 부하테스트를 하기 위해서 결정해야할 내용들은 다음과 같다고 한다.
- 일정
- 부하테스트 목적
- 전제 조건 정리
- 목푯값
- 사용할 부하 테스트 도구
- 부하 테스트 환경
- 부하 테스트 시나리오
책에서는 위와 같은 내용을 결정할 때 유의해야할 사항, 명확하게 정해야하는 것들에 대한 기준을 상세하게 알려주었다. 부하테스트 일정은 여유롭게 잡아야한다거나, 사용자수나 데이터건수 등 성능에 많은 영향을 주는 요건에 대한 영향력을 확인해야한다는 것 등의 가이드도 잡아주었다. 또한 성능 목푯값을 설정할 때 필요한 수치를 구하는 법, 발생할 수 있는 문제점과 해결법도 말해준다.
읽다보니 생각보다 부하테스트를 시작하기 전 고려해야할 사항, 준비해야할 것들이 많다는 걸 알게되었다. 이전에 내가 JMeter를 통해 대충 부하만 발생시키고 HTML 보고서를 분석하려고 했던건 정말 잘못된 행동이라는 것도 깨달았다. 과학 실험을 할 때 무작정 실험하지 않고 계획을 세우고 하듯, 부하테스트도 계획이 정말 중요하다
는 걸 알게되었다.
6장에서는 부하테스트를 위한 테스트 환경이나 도구, 관련 시스템 조율 등에 대한 준비과정을 알려준다.
부하 테스트 시 대상 환경을 실제 서비스와 비슷하게 제대로 구축해야한다는 건 알고있었지만, 부하 테스트 도구 자체를 테스트해야한다는 건 생각도 못했다. 또한 외부 시스템 연동을 위한 stub을 구성하는 것도 좋은 팁이었던 것 같다.
이제 드디어 부하테스트를 실행하나 했는데, 아직 전체에 대한 부하 테스트를 하는 것은 추천하지 않는다고 했다. 생각해보니 작은 병목지점을 찾아야하는데 전체 로직에 대해 테스트하면 어느 부분인지 찾기는 굉장히 어려울 것 같았다. 부하 테스트의 목적은 병목 지점을 찾아내고 시스템을 개선해나가는 것이라고 하였으니 잘게 나눠서 테스트하는 게 옳은 방법이었다.
이 책에서 제시한 부하테스트의 구체적인 단계는 다음과 같다.
- 도구와 환경의 검증
- 웹 프레임워크 검증
- 참조계(조회) 성능 검증
- 갱신계 성능 검증
- 외부 서비스 연동 성능 검증
- 시나리오 테스트
- 스케일 업/아웃 테스트 준비
- 스케일 업/아웃 테스트
- 한계 성능 테스트
책에서는 이 단계들을 상세하게 설명해준다. 테스트 할 부분을 잘게 쪼개고, PDCA 사이클을 돌리고 회귀 테스트를 반복하면서 문제점을 발견해나가는 게 인상적이었다. 이 책을 읽기 전, 전체 로직을 후루룩 테스트하고 바로 병목지점을 찾아내 고치려고 한 내 자신이 부끄러웠다..
이 챕터를 읽고나니 부하테스트를 할 때 생각이상으로 시간이 많이 든다는 게 체감이 됐다. 테스트를 하는 건 그렇다고 쳐도, 언제 어디서 발생할 지 모르는 에러도 해결해야한다면 짧은 시간으로는 부족할 것 같았다. 부하 테스트는 여유롭게 진행해야한다는 말이 이해가 됐다.
8장에서는 7장의 과정에서 발견한 다양한 병목상황에 대한 해결책을 제시하고, 시스템 전체를 개선하기 위한 Action을 알려준다. 이 챕터의 표만 봐도 부하테스트를 위해 CS 지식이 중요하다는 걸 알 수 있다. 해결 과정을 지금 당장 공감하기는 힘들었지만, 나중에 부하테스트를 하면서 다시 책을 꺼내보고 표를 참고하면 도움이 많이 될 것 같았다.
책을 읽다보면 도움이 되는 칼럼이 몇몇 등장하는데, 8장 칼럼에 나오는 DB 마스터-슬레이브 구성이 너무 흥미로웠고 더 공부해보고 싶었다.
부하테스트의 목푯값과 전제 조건을 만족했는지 여부도 중요하지만, 그 전에 다음과 같은 항목을 먼저 확인해야한다고 한다.
- 부하테스트 대상 시스템에 부하가 집중되었는가?
- 병목은 확인되었는가?
- 시스템은 정상적으로 확장되었는가?
- 확장에 대한 특성은 파악했는가?
9장까지 읽으니 어느정도 부하테스트에 대한 감을 잡을 수 있었지만, 제대로 부하 테스트를 하기 위해서는 공부를 더 많이 해야겠다는 생각이 들었다. 특히 운영체제, 네트워크 등 기초 CS지식이 더욱 탄탄해야함을 느꼈다. 부하테스트를 통해 단순히 데이터베이스 쿼리나 코드 성능을 개선할 수도 있지만 TCP 포트부족, Https에서 오는 병목, Keep-Alive 설정 등 다른 여러 구간에서 문제가 발생할 수 있었고 이를 해결하려면 어떻게 동작하는지 제대로 알고 있어야했다. 부하테스트를 위해 읽기 시작한 책이지만 웹 서비스 전반에 대한 이해도가 높아진 것 같다.
나머지 챕터는 적용 예시인데, 마저 읽은 후 작은 것부터 하나하나 적용해봐야겠다. 어떤 기술이든 익숙해지는 게 중요하니까!