이미지 압축
자료 유형 | 모듈 |
---|---|
간단한 소개 | 첨부하는 이미지 파일을 압축 |
설치 경로 | modules/imgopt |
코어 지원 범위 | Rhymix 2.0 |
PHP 지원 범위 | 기타 |
자료 구분 | 공개 자료 |
라이선스 | GPL v2 |
파일명 | 버전 | 날짜 | 용량 | 다운 |
---|---|---|---|---|
imgopt_1.0.2.zip | 1.0.2 | 2024.12.01 | 14.1KB | 18 |
imgopt_1.0.1.zip | 1.0.1 | 2023.06.23 | 31.8KB | 236 |
imgopt.zip | 2023.05.27 | 31.6KB | 1,132 |
v1.0.2 업데이트
주요 변경
- 최신 php 문법으로 개선
- 최신 Rhymix 문법으로 개선
- 기타 안정성
주요 특징
- files 테이블에 첨부하는 이미지 파일을 압축 합니다.
- 압축 대상: jpg(jpeg), png, gif, svg, webp
- 효과: 운영중인 사이트에 첨부된 이미지 파일을 압축하여 약 5.5GB SSD 용량을 확보함.
(direct_download=Y 조건의 첨부 파일이 약 57,000건 첨부되어 있음)
매뉴얼
관심이 있으시다면: https://elkha.kr/rx/downloads/157
엘카
Lv. 3
댓글 3
코어에서 지원하지 않는 부분을 적절하게 채워 주는 좋은 자료로군요.
코어 개발자 입장에서 몇 가지 피드백을 드립니다. 비판이 아니라 더 유용한 자료가 되었으면 하는 마음에서 드리는 말씀이니, 님이 생각하고 계신 이 자료의 방향성과 맞지 않는다면 반영하지 않으셔도 무방합니다.
1. MyISAM/InnoDB 테이블 타입은 라이믹스/XE 설치시 사용자가 선택하거나 자동으로 선택되고, 선택한 타입이 설정 파일에 기록됩니다. 라이믹스/XE 기반으로 동작하는 모듈이라면 이 설정을 따르는 것을 추천합니다. 만약 로그 테이블에만 특정 타입을 선택해야 할 필요가 있다 하더라도, 현재 선택된 기본값을 알려주면 좋을 것 같습니다.
2. 실제 이미지 압축은 내부적으로 HTTP 요청을 해서 처리하고 있는데, 비동기식으로 처리하는 것도 아니면서 굳이 별도의 요청을 하는 것은 비효율적으로 보입니다. 시간은 똑같이 걸리고, 서버 프로세스를 하나 더 잡아먹을 뿐이지요. exec.php에 파일명을 넘기고 외부에서 임의로 호출하지 못하도록 막는 과정에서 보안취약점이 발생할 가능성도 배제할 수 없고요. 라이믹스 모듈의 컨트롤러 파일에서도 얼마든지 자체적으로 vendor/autoload.php를 인클루드하고 외부 라이브러리를 끌어와서 작업할 수 있으므로, 이 과정을 별도의 파일로 분리할 필요가 없습니다.
3. 실제 적용사례에서 5.5GB의 용량이 절약되었다고 하셨는데, 원본 파일의 갯수만 언급하시고 원본의 총 용량을 알 수 없어서 그게 몇%나 절약된 건지 체감이 되지 않네요. 대부분의 이미지 포맷은 화질 설정을 조금만 바꿔도 수십%가 오락가락하기 때문에, 객관적인 비교 기준이 있으면 좋겠습니다. 화질을 그대로 유지하면서 용량만 줄여 준다는 것인지, 아니면 일정 수준의 화질로 자동 조정된다는 것인지...
댓글과 관심에 감사드립니다.
기진곰님은 다 아실 내용이지만, 자료 사용하시는 분들이 참고하실 내용으로 적겠습니다.
1. 테이블 설치는 가능하다면 innodb 선택을 추천 드립니다.
2. php-fpm 보안을 빡세게 잡으면 curl http 요청으로 처리가 필요했으나, 거의 다수의 서버는 그렇게 막아둘리가 없으므로 exec.php 분리에 득이 없다는 말씀에 공감합니다.
3. (아래 대댓글 내용으로 이어짐)
1, 2번은 개선이 필요합니다. 그러나 잇점이 크지 않아서 메이저 업데이트를 진행할 때 알려주신 내용을 포함하겠습니다.
3. jpg 이미지는 퀄리티 85로 변환합니다. 다른 이미지는 무손실이나 손실이 거의 없는 수준에서 압축됩니다.
그리고 참고하실 수 있도록 통계를 더 자세히 수집했습니다. (본문 예시와 동일한 실서비스 환경)
COUNT(`file_srl`) `카운트`, CONCAT(FORMAT(SUM(`ori_size`)/1024/1024, 0), 'MB') `원본 합`,
CONCAT(FORMAT(SUM(`opt_size`)/1024/1024, 0),'MB') `결과 합`,
CONCAT(FORMAT((SUM(`ori_size`) - SUM(`opt_size`)) / 1024 / 1024,0), 'MB') `확보 용량`,
CONCAT(FORMAT(100 - SUM(`opt_size`) / SUM(`ori_size`) * 100, 1), '%') `압축 비율`
FROM `td_imgopt`
GROUP BY `success`