라라벨-루멘-PHP 날코딩 성능 비교

라라벨과 루멘, PHP 날코딩간의 성능 비교를 해 보신 분들이 없는 것 같아 직접 해 봤다. 결론은 뻔하지만, PHP 날코딩이 가장 빠르고, 메모리 사용량도 적다. 프레임워크를 써야 이유는 다른 곳에 있으니, 이 실험 결과만 보고 오해나 곡해하지 마시기 바란다.

주의 이 실험은 다른 PHP 프레임워크 또는 다른 플랫폼의 프레임워크와 라라벨 또는 루멘의 성능을 비교하기 위한 것이 아니다(다른 PHP 프레임워크와의 비교는 “How Lumen Is Benchmarked”를 참고하라). 이 실험은 라라벨과 루멘의 기본적인 속도와 필요 리소스를 측정해 봄으로써, PHP 날코딩의 성능과 프레임워크가 제공하는 이점 간의 트레이드오프(trade-off)에 대한 의사 결정 포인트를 제공하기 위한 목적으로 수행하였다.

• • •

1. 실험 환경Permalinklink

다음 머신에서 실험했다.

  • macOS Sierra 10.12.1
  • 2.7 GHz Intel Core i5
  • 8GB 1867 MHz DDR3
  • SSD

사용한 소프트웨어 버전은 다음과 같다.

  • PHP 7.0.11 with Xdebug, without OPcache
  • MySQL 5.7.15
  • Laravel Valet 1.1.22 (로컬 웹 서버)

2. 실험 방법Permalinklink

다음과 같이 실험했다.

  • 웹 브라우저에서 테스트를 위한 URL 엔드포인트를 각 시나리오별로 총 5회 방문했고, 아웃라이어 2개는 버리고 남은 3개만 이용했다.
  • 해당 엔드포인트는 MySQL 데이터베이스에서 2개의 레코드를 가져와서 HTTP 응답을 내 보내는 일을 하는데, HTTP 응답을 반환하기 직전에 현재까지의 1) 실행 시간, 2) 메모리 사용량을 로그에 기록하였다.

2.1. MySQL 테이블 레코드Permalinklink

MySQL에 저장된 2개의 레코드를 팅커(라라벨 내장 REPL) 콘솔에서 확인했봤다.

Test Vector

2.2. 테스트 코드Permalinklink

라라벨 기준으로 성능 측정 코드는 다음과 같다.

<?php // index.php

define('LARAVEL_START', microtime(true));
<?php // routes/web.php

Route::get('/', function () {
    $todos = App\Todo::all();

    Log::info('metric', [performance()]);

    return $todos;
});

performance() 함수는 이렇게 생겼다. 할당된 메모리 양이 아니라, 사용한 메모리 양으로 측정했다(memory_get_usage()).

<?php // app/helpers.php

function performance()
{
    return implode(',', [
        '처리시간(ms): ' . (microtime(true) - LARAVEL_START),
        '메모리(MB) : ' . memory_get_usage() / 1000000,
        'CPU(%): ' . sys_getloadavg()[0],
    ]);
}

3. 실험 결과Permalinklink

3.1. 라라벨Permalinklink

laravel/framework 5.3.19 버전을 이용했다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

구분 처리시간(ms) 메모리(MB)
1 48.988103867 7.369736000
2 43.443918228 7.369736000
3 43.838024139 7.369736000
평균 45.343995094 7.369736000

3.2. 루멘Permalinklink

laravel/lumen-framework 5.3.1 버전을 이용했다.

구분 처리시간(ms) 메모리(MB)
1 23.682117462 4.800936000
2 23.600816727 4.800936000
3 25.380134583 4.800936000
평균 24.163961411 4.800936000

3.3. PHP 날코딩Permalinklink

날 코딩이라 하지만, 컴포저와 PDO를 사용하고 MVC 구조로 짠 코드다.

구분 처리시간(ms) 메모리(MB)
1 3.256082535 0.916032000
2 4.014015198 0.916032000
3 3.664970398 0.916032000
평균 3.560066223 0.916032000

4. 결론Permalinklink

속도나 메모리 사용량 면에서 PHP 날코딩이 확실히 유리하다. 이 테스트 기준으로 2GB 메모리 머신에서 PHP 날코딩이 1초당 610,649개의 요청을 처리할 수 있다면(2000/0.92 * 1000/3.56), 라라벨은 5,895개의 요청을 처리할 수 있다(2000/7.37 * 1000/45.34).

물론, 현실 세계에서 이런 간단한 서비스는 없으므로, 한 요청당 수십 MB의 메모리를 사용하고 수백 ms의 처리 시간이 걸린다. 운영 환경에서는 아파치나 엔진엑스를 사용하고, Xdebug를 끄고, OPcache를 켜서 성능을 향상시킬 수 있다.

프레임워크의 장점으로 생산성, 안정성, 보안을 들 수 있다. 수퍼 개발자가 있어 열 명이 해야 할일을 혼자서 처리하고, 해킹에 뚫릴 일이 전혀 없고 유지보수 하기도 편리한 자체 서비스 프레임워크를 직접 개발할 수 있다면, 라라벨과 루멘과 같은 프레임워크를 쓸 필요 없다.

경험적으로 수퍼 개발자에 의존하는 서비스 운영은 절대 바람직하지 않다. 수퍼 개발자가 자신의 지위를 악용하거나, 아프거나 퇴사라도 하는 순간 서비스는 한 순간에 무너진다.

컴퓨터의 성능은 좋아졌고, 가격은 싸져서 스케일 업(scale-up)이 쉬워졌다. 또, 쉽게 스케일 아웃(scale-out)할 수 있는 클라우드도 널렸다. 개발자 한 명 채용하는 비용보다 컴퓨터 비용이 훨씬 싸다는 점을 잊지 말자. 좋은 서버 쓰고 안정적인 코드를 빨리 개발하는 것이 더 현명하다.

반면 서비스가 궤도에 올라 사용자가 늘고 1ms와 1KB라도 쥐어 짜야 하는 상황이라면 자체 프레임워크 개발을 고려해볼 만한다. 물론 성능이 더 좋은 플랫폼으로 갈아 타는 방법도 있다. 서비스를 살리기 위해 스택을 버려야지, 스택을 살리기 위해 서비스를 버리는 어리석음을 범하지 말라. 라라벨이나 루멘은 범용 프레임워크이므로 최적화가 필요한 초대형 서비스에는 적합하지 않다는 생각이 든다.

[출처] https://blog.appkr.dev/work-n-play/performance-comparison-between-laravel-lumen-homemade/

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
129 [Redis] php 세션 저장소를 redis 로 바꾸어 본 후기. file 졸리운_곰 2021.04.11 47
128 Creating a Website Design Templating System Using PHP 졸리운_곰 2021.02.13 22
127 Build a CRUD Operation using PHP & MongoBD 졸리운_곰 2021.01.04 23
126 CRUD Operation using PHP & Mongodb file 졸리운_곰 2021.01.04 26
125 PHP and MongoDB Connection file 졸리운_곰 2021.01.04 63
124 PHP 기반의 Micro Frameworks 정리 졸리운_곰 2020.12.02 51
123 CKEditor 4 설치와 PHP 연동 하기 file 졸리운_곰 2020.11.22 47
122 [php] CKeditor 설정 및 적용 졸리운_곰 2020.11.22 38
121 [PHP]Fuelframework 설치 및 시작 방법(window10,xampp) file 졸리운_곰 2020.10.01 34
120 Building a Simple Blog App with MongoDB and PHP file 졸리운_곰 2020.09.13 50
119 웹 설문조사 시스템 & 설문조사를 잘 하는 방법 file 졸리운_곰 2020.09.10 185
118 ReactPHP Series 졸리운_곰 2020.07.01 50
117 Building a RESTful API Using ReactPHP and MySQL file 졸리운_곰 2020.07.01 44
116 [PHP 웹개발] MySQL 데이터베이스에서 mysqli(MySQL Improved) 사용법 졸리운_곰 2020.05.07 39
115 PHP 파일 업로드와 다운로드 만들기 file 졸리운_곰 2020.05.07 374
114 HOW TO INTEGRATE R WITH PHP : php와 R 언어의 연동 file 졸리운_곰 2020.05.05 251
113 XAMPP, PhpStorm, Hello World 출력하기 졸리운_곰 2020.03.27 40
112 Pico is a stupidly simple, blazing fast, flat file CMS. file 졸리운_곰 2020.03.19 30
111 directorylister php 사용법 file 졸리운_곰 2020.03.18 129
110 flat file 플랫파일시스템 : GRAV CMS file 졸리운_곰 2020.03.18 60
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED