이 주제, 이 주제, 그리고 이 주제를 읽어본 후에도 Discourse가 큰 이미지에 대해 정확히 어떻게 처리하는지 확신이 서지 않습니다. 이전에는 소프트웨어 기반 리사이징이 이루어지지 않으며 CSS만 사용된다고 이해하고 있었습니다. 즉, 이미지 크기는 maximum image upload size in kB(최대 이미지 업로드 크기)로 제한되고, 그 이상이면 원격 파일인 경우 링크로 처리되고, 그렇지 않으면 아예 업로드가 불가능하다고 생각했거든요.
하지만 해당 주제들에서 다운사이징과 최적화에 대해 언급하고 있어서 혼란스럽습니다. 제가 실제로 확인해 본 적도 없었기 때문에 그런 과정이 일어나고 있다는 생각은 하지 못했거든요. 또한 Maximum number of megapixels allowed for an image(이미지에 허용되는 최대 메가픽셀 수) 제한이 정확히 어떤 것에 적용되는지도 모르겠습니다. 이 제한은 해당 크기 이상의 이미지 업로드를 막는 건가요, 아니면 max upload size(최대 업로드 크기)를 초과하지 않는 한 한도를 넘는 이미지가 리사이즈되는 건가요?
후자라면, 왜 메가픽셀 기본 설정이 최대 업로드 크기에 비해 이렇게 큰가요? 4096 kB보다 작은 51메가픽셀 이미지를 게시하고 싶어 할 사람이 있을 가능성은 극히 낮아 보이는데요.
제가 원하는 것은 사용자가 파일 크기나 해상도를 걱정하지 않고 가지고 있는 이미지를 편리하게 업로드할 수 있고, 소프트웨어가 모바일 사용자나 느린 연결 환경에 있는 사람들을 힘들게 하지 않으면서도 적절한 결과물을 제공해주는 것입니다. 현재 max image size(최대 이미지 크기)와 max megapixels(최대 메가픽셀)만 조정하면 이것이 가능한가요?
네, 그렇게 할 수 있습니다. 하지만 소프트웨어가 실제로 무엇을 하는지 이해해서 더 나은 판단을 내리고 싶습니다. Discourse를 사용해 온 동안 기본 설정을 존중하고, 필요한 경우에만 변경하는 습관을 들였습니다. 이번에는 꽤 일반적인 커뮤니티에서 기본 설정이 잘 작동하지 않아서, 왜 그렇게 설정되어 있는지, 대신 어떤 합리적인 값을 고려해야 하는지, 그리고 해당 변경 사항을 적용하면 어떤 일이 일어나는지 궁금합니다.
음, 방금 GitHub에서 nginx.sample.conf 파일을 살펴봤는데, client_max_body_size의 기본값이 4MB가 아니라 10MB로 설정되어 있네요. 처음부터 이렇게 되어 있었나요? 오늘까지 제 설치 환경에서 해당 파일을 변경한 적이 없다고 기억하는데, 어떻게 된 건지 궁금합니다.
+ max_image_size_kb: “최대 이미지 업로드 크기(kB). 이 값은 nginx(client_max_body_size) / apache 또는 프록시에서도 설정해야 합니다. 이 값보다 크고 client_max_body_size보다 작은 이미지는 업로드 시 해당 크기에 맞게 리사이즈됩니다.”
+ max_image_megapixels: “이미지에 허용되는 최대 메가픽셀 수. 메가픽셀 수가 더 높은 이미지는 거부됩니다.”
아니면 최소한 리사이즈가 시도조차 되지 않는 것 같습니다.
max_image_size_kb를 1000kb로 설정했는데, 이 크기보다 약간 큰 이미지는 링크로 대체되고 (image larger than 1000KB)라는 텍스트가 뒤에 붙었습니다.
설정을 500kb로 변경해도 같은 일이 발생했습니다.
NGINX의 client_max_body_size는 기본값(4096)일 것으로 추정하여 변경하지 않았습니다.
참고로 이 이미지들은 핫링크된 이미지입니다. (download remote images to local 옵션이 체크되어 있다면) 이는 표준 업로드처럼 처리되어야 하지 않나요? (아니라면 동일한 방식으로 동작하도록 수정해 주실 수 있을까요?)
수정: 직접 업로드하면 리사이즈가 정상적으로 동작하네요 - 좋아요! 즉, 원격에서 가져오는 이미지에서만 실패하는 것입니다. 이상적인 동작 방식이 무엇인지 정확히 모르겠지만, 첫印象中으로는 원격 이미지 역시 리사이즈되어야 한다고 생각합니다.
이건 별도의 기능 요청인 것 같아요. 최대 이미지 크기를 200k까지 낮추면 다운로드할 때 핫링크된 이미지를 리사이즈하는 것이 완전히 합리적입니다. 기준값이 관여되는데, 이걸 확인하려고 700기가바이트짜리 이미지를 다운로드하는 건 안 되겠지만, 그래도 일부는 더 개선할 수 있을 것 같습니다.
동의합니다, Sam. 솔직히 다운로드된 핫링크 이미지가 동일한 규칙을 따르는 것이 좋지 않은 이유를 생각할 수 없습니다.
또한 최대 이미지 크기를 변경하면 실제로 최종 파일 크기에 영향을 미친다는 것을 방금 발견했습니다 - 정말 멋진 점입니다! 500kb로 설정하면 1.2mb 이미지가 360kb로 리사이즈되었고, 200kb로 설정하면 동일한 파일이 118kb가 되었습니다 (물론 해상도도 작아지지만요).
수정: 아, 하지만 원래 문제가 다시 발생합니다 - 리사이즈하기에 너무 큰 이미지들이 다음과 같은 오류로 실패하는 문제입니다:
/var/discourse 폴더 안에는 공유 폴더만 있습니다. 말씀하신 파일을 찾을 수 없습니다. 제 문제는 완전히 새로 설치한 Discourse에서 게시물의 이미지 업로드가 전혀 작동하지 않는다는 것입니다. 관리자 권한으로도 "죄송합니다. 파일 업로드 중 오류가 발생했습니다. 다시 시도해 주세요."라는 오류가 표시됩니다. 여러 번 시도해 보았지만 동일한 오류가 계속 나옵니다.
오류 로그에는 다음과 같이 표시됩니다:
MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb)를 찾을 수 없음: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
Discourse는 “텍스트 전용” 토론 그룹으로 설계된 것일까요? 최대 업로드 용량을 극단적으로 큰 값으로 설정해 보았지만, 7kb짜리 그래픽 파일조차 업로드할 수 없습니다.