데이터 기반 서비스 개선 (1/3) - 서버 스펙 찾기
섬네일 추출 기능 개선을 3부로 쪼개어 글을 적어보려한다.
결론
단순히 머릿속으로 서버 스펙을 설정하기보다 성능 테스트를 통해 얻은 데이터를 기반으로 서버 스펙을 찾음으로 근거있는 판단이 되어야한다.
상황
이미지 업로드 시 섬네일 추출까지 동시에 진행하였다. 즉 업로드와 섬네일 추출까지 완료가 되어야 response 를 보내준다.
업로드와 섬네일 추출을 분리해서 진행하면 사용자에게 더 좋은 UX 를 제공할 수 있을 것 같다는 생각이 들었다. 업로드가 되면 섬네일 작업이 완료될 때까지 spinner 가 돌며 작업 중임을 알리면 업로드 속도가 훨씬 빨라지기 때문에 업로드와 섬네일을 분리하자는 생각이 들었다.
서버 스펙 찾기
서버에서 가장 중요한 스펙이라면 CPU 와 메모리를 뽑을 수 있다. 하드의 종류, 네트워크 등 선택적 요소가 더 있지만 스펙별 가격 편차가 더 커지는 것으로 뽑자면 CPU 와 메모리이다. 대충 적당한 스펙으로 서버 구동하고 모니터링해도 괜찮지만 데이터 기반으로 적정 스펙을 찾아 최적의 가격을 지불하는 것이 더 현명할 것이다. 그렇기에 서버 스펙을 달리해서 테스트가 얼마나 실행되는지 확인하는 것이 필요하다.
서버 준비
총 7대를 준비하였다. Docker 로 배포하였기에 같은 환경이다. 각기 다른 스펙으로 테스트를 하기 위해 각 서버에 hw1~7 이라는 이름을 붙여주었다. 숫자가 높을수록 서버 스펙은 상향된다.
- hw1 - CPU 1, Memory 512MiB
- hw2 - CPU 1, Memory 1GiB
- hw3 - CPU 1, Memory 2GiB
- hw4 - CPU 2, Memory 2GiB
- hw5 - CPU 2, Memory 4GiB
- hw6 - CPU 2, Memory 8GiB
- hw7 - CPU 4, Memory 8GiB
테스트 진행
- hw1 - Service Unavailable -> 메모리 부족으로 서버 중지
- hw2 - 1m 39.72s
- hw3 - 1m 31.14s
- hw4 - 1m 15.78s
- hw5 - 1m 15.30s
- hw6 - 1m 16.44s
- hw7 - 1m 14.58s
테스트 분석
hw1 는 사용하지 못하고 hw2, hw3 를 제외하곤 응답 시간이 비슷한 것을 볼 수 있다. 이 정도로 차이가 안 날 수 있나 싶지만 결과를 부정할 수는 없다.
테스트 결론
hw4 를 사용하는 것이 가장 효율적인 서버 스펙이 될 것이다.