이번에는 성능 엔지니어링을 하는데 필요한 것들이 무엇이 있을까 알아보는 시간을 가져보자
먼저 도구적인 측면부터 살펴보자
- 부하 테스트기 : 가장 기초적으로 필요한 것은 부하 발생 도구이다.
- nGrinder와 같은 오픈소스 기반의 대규모 부하 발생 도구
- SOAP UI 같은 마이크로 벤치마크 테스트 도구를 이용해서 소규모 부하를 발생
- 필요에 따라서는 간단하게 파이썬 등의 스크립트 언어로 부하를 발생 가능
- 모니터링 도구 : 어느 구간이 문제가 있는 현상이 어떤지를 파악하려면 여러 형태의 모니터링 도구 필요
- 프로파일링 도구 : 문제가 되는 부분을 발견 했을 때 문제에 대한 근본적인 원인을 찾기 위한 프로파일링 도구
다음으로는 엔지니어로서의 역량이나 지식적인 부분에 대해서 알아보자
역량
기술적인 역량은 필수적이다. netstat를 통해서 TCP 소켓이 FIN_WAIT가 발생하였는데, FIN_WAIT가 의미 하는 것이 무엇인지 모르면 아무리 모니터링을 잘해도 소용이 없다. 기본적으로 엔지니어로서의 컴퓨터와 프로그래밍, OS 등에 대한
넓은 이해는 필수적이다.
하드웨어 인프라, 미들웨어, 애플리케이션에 대한 지식
사용하는 특정 솔류션의 전문적인 지식이다. 톰캣의 내부 구조가 어떻게 되어 있으며 JVM의 동작 원리가 어떻게 되는지와 같은 특정 지식인데, 이러한 지식은 오랜 경험이나 습득할 시간이 없으면 가지기 어렵다. 이런 경우에는 해당 솔루션 제품 엔지니어를 통해서 지원을 받는 방법도 고려해볼 만하다.
경험
성능 엔지니어링에 대한 경험이다.
대략 시스템의 상태만 봐도 어느 부분이 의심되는지 경험이 많은 엔지니어는 쉽게 접근한다. 성능의 문제는 넓어 보이지만 결국 발생하는 패턴이 거의 일정하다. 결국 문제에 접근하는 방법이나 의미하는 것은 거의 비슷하므로 경험이 있는 엔지니어는 문제에 접근해서 풀어나가는 방식에 매우 익숙하다.
인내심
마지막은 인내심이다.
성능 엔지니어링은 지루한 작업이다. 반복적인 테스트와 모니터링 및 분석을 거쳐야 하고 해당 솔루션에 대한 전문적인 지식이 없으면 보통 제품 문제라고 치부하고 하드웨어 업그레이드로 가는 경우가 많을 수도 있다. 하지만 솔루션이라고 해도 소스 코드로 만들어진 프로그램이다. 디컴파일 하던 덤프를 추출하던 꾸준히 보고, 오픈 소스의 경우 소스 코드를 참고해서 로직을 따라가다 보면 풀어낼 수 있는 문제가 대부분이다. 결국은 시간과 인내심의 싸움인데 꾸준하게 인내심을 가지고 문제에 접근하고 풀어나가는 것을 반복하면 문제는 풀린다.
지금까지 성능 엔지니어링이 무엇이고 어떤 일을 하는지을 알아보았다.
이전 글
이 글은 조대협의 서버사이드 대용량 아키텍처와 성능 튜닝 책을 참고하여 작성되었습니다.
이 글은 코드 프레소 DevOps Roasting 코스를 수강하면서 작성한 글입니다.
'아키텍처' 카테고리의 다른 글
[조대협의 소프트웨어 개발]애자일 개발 방법론 (0) | 2020.02.19 |
---|---|
[조대협 대용량 아키텍처]성능 튜닝 (0) | 2020.02.16 |
[조대협 대용량 아키텍처]성능 엔지니어링 절차 (0) | 2020.02.16 |
[조대협 대용량 아키텍처]성능 엔지니어링 (0) | 2020.02.15 |
[조대협 대용량 아키텍처]아키텍트 (0) | 2020.02.10 |