레일스 2.3은 이전 버전보다 빨라졌을까?
May 14th, 2009
오랜만에 Rails Deployment란에 글을 쓴다. 이 분야도 꽤 안정되어버렸기에 요새는 크게 할 말이 없는게 이유이기도 하다.
새로운 뉴스라면 최근 Passenger Phusion이 nginx를 지원하게 된 것 정도일 것 같다,
암튼, 제목 그대로 레일스 2.3은 이전 버전보다 더 나은 성능을 보여줄까?
성질급한 분들을 위해 결론부터 이야기하자면,
네, 빨라졌더군요!
그럼 이제 증거를 제시할 차례일 것 같다.
증거
스프링노트 서비스를 레일스 2.2와 2.3에 각각 돌려보았다. 그리고 미리 정의한 3가지 액션에 대해 밴치마크를 진행하였다. 결과 그래프는 아래와 같다.
Y축은 평균 응답 시간(ms)이다. 당연히 아래 있을수록 좋은 값이다.
그래프를 보면 Rails 2.3 with memcached patch라는 항목이 Rails 2.2보다 더 나은 성능을 보임을 확인할 수 있다.
그런데 맨 위에 가장 느리게 나온 Rails 2.3 Default는 뭔가?
그 이유는 Memcached 1.6.5 (Rails 2.3) 10x slower - Ruby Forum에서 찾을 수 있다.
간단히 요약하자면, 레일스 2.3에서 번들된 memcached 1.6.5에 추가된 타임아웃 기능이 성능차를 부른다는 것이다.
(쉽게 예측할 수 있듯, 고질적인 루비 1.8의 스레드 성능 이슈 때문이다)
해결 방법은 Timeout을 끄거나 Memached 최신 버전(1.7.2) + SystemTimer를 사용하는 것이다. 나는 간편하게 전자를 택했다.
(후자도 테스트해보았는데, 비슷한 결과를 얻을 수 있었다)
이 쯤에서 살포시 주의
사실 이 한가지 데이터 하나로 결론을 내리는 것은 어리석은 일이다.
그리고 절대 남의 벤치마크 결과를 믿어서는 안될 일이다.
확답을 위해서는 직접(!) 벤치마크를 해보시라 ^^
의문들
왜 빨라졌을까?
2.3 릴리즈 노트를 보며 그 이유를 유추해볼 수 있을 것 같다. 개인적인 판단으로는 라우팅쪽 최적화, CGI.rb를 걷어낸 부분이 크지 않았을까 추측해본다.
더 빨라질까?
다음 메이저 업데이트가 될 3.0 버전은 꽤 빨라질 것이라 기대하고 있다.
그리고 루비 1.9나 JRuby가 대세가 되면 느리다는 인식은 사라질거라고 생각된다.
약간 시간이 남았어요~
여기까지 하고 약간 시간이 남아서 오랜만에 Passenger와 (이벤트기반) 몽그렐의 성능을 측정해보았다.
그 결과는 아래와 같다.
특이하게도 2.2 버전에서는 passenger가 더 나은 성능을 보여주는데,
2.3에서는 거의 비슷하거나(passenger가 약간 빠른) 모습을 보인다.
그 이유가 뭘까?
아직 답을 찾아보지 않았지만, 꽤 재미있는 고민거리가 될 수 있을 것 같다.
참고


