ImgZilla 1.3 정식 출시: '제자리 이미지 무손실 압축' 도구, 왜 이렇게 오래 걸렸을까
ImgZilla가 Mac App Store에 정식 출시되었습니다.
핵심 기능은 명확합니다: Mac의 이미지를 제자리에서 압축하여 파일명, 경로, 형식을 그대로 유지하고, 원본은 기본적으로 휴지통으로 이동하여 언제든 복원할 수 있습니다.
이 모든 작업은 사용자의 Mac에서 완료되며, 인터넷 연결이 필요 없고, 이미지는 컴퓨터를 떠나지 않으며, 어떤 서버에도 업로드되지 않습니다. 개인정보 보호와 데이터 보안은 처음부터 기본 설계 사항입니다.
이 기능은 간단해 보이지만, 우리는 반복적으로 테스트하고, 수정하고, 다시 만들기를 여러 차례 거쳤습니다. 이 글에서 기록하려는 것은 '우리가 어떤 기능을 만들었는가'가 아니라, 실제 사용 시나리오에서 마주친 구체적인 문제와 최종적으로 어떻게 개선했는지입니다.
'제자리 덮어쓰기'라는 네 글자, 조금도 소홀할 수 없다
대부분의 이미지 압축 도구는 결과를 photo-min.jpg로 따로 저장합니다. 안전하지만, 그로 인해 파일명이 바뀌면 상품 목록의 참조, 웹 템플릿의 경로, 아카이브 디렉토리의 정렬까지 모두 변경해야 하는 번거로움이 생깁니다.
ImgZilla는 다른 길을 선택했습니다: 압축 결과를 원래 경로, 원래 파일명, 원래 형식으로 바로 덮어씁니다. JPG는 압축 후에도 그대로 JPG이며, 참조를 한 줄도 바꿀 필요가 없습니다.
그 대가는: 이 도구가 사용자의 원본 파일을 건드린다는 점입니다. 한 단계라도 실수하면 잃는 것은 캐시가 아니라, 누군가 하루 종일 찍은 사진이나 몇 년 동안 모은 소장품입니다.
그래서 제품이 진짜 시간을 들인 곳은 압축 자체가 아니라 - 압축은 성숙한 인코더에 맡기면 충분하니까 - '만약의 상황'을 대비한 주변 보호 장치입니다. 아래 개선 사항들은 테스트 중 실제로 마주친 것들입니다.
테스트에서 수정한 몇 가지 사항
1. 원본 보호 전략, 한 번 뒤집어 다시 만들었다
처음 설계는 원본을 전용 백업 디렉토리에 복사하는 것이었습니다. 논리에는 문제가 없었지만, 사용하기에 불편했습니다. 백업 디렉토리가 조용히 커져서, 몇 달 동안 압축한 후에야 디스크에 완전한 복사본이 생겼다는 것을 알게 됩니다. 원래 목적은 공간 절약이었는데 말이죠.
지금은 휴지통 우선 방식입니다: 압축이 성공하면, 원본을 먼저 시스템 휴지통으로 옮긴 다음, 압축 결과를 원래 경로에 다시 씁니다.
복원 방법은 모든 Mac 사용자가 이미 알고 있는 조작이 되었습니다. 휴지통을 열고, 마우스 오른쪽 클릭으로 '원래 위치로 되돌리기'. 새로운 개념을 배울 필요도 없고, 점점 커지는 숨김 디렉토리도 생기지 않습니다. 이 스위치는 설정에서 기본적으로 켜져 있습니다. 끄면 바로 덮어쓰고 복구할 수 없으므로, 끌 때 이중 확인 창이 뜹니다.
2. 외장 하드에서의 팝업 창, 테스트 때문에 만들게 되었다
외장 하드, NAS, 네트워크 볼륨에서 테스트할 때 macOS의 흔한 문제를 마주쳤습니다: 이러한 위치에서는 파일을 휴지통으로 옮길 수 없는 경우가 자주 있습니다.
첫 번째 버전에서는 바로 오류를 내고 건너뛰었습니다. 결과적으로 사용자가 폴더 전체를 끌어다 놓았는데 아무 일도 일어나지 않았죠.
지금은: 압축이 일시 중지되고, 팝업 창에서 다음을 결정하게 합니다:
- 백업 디렉토리 선택: 원본을 그곳에 복사한 후, 원본을 덮어씁니다.
- 백업 포기: 이중 확인 후 바로 덮어쓰며, 사본을 보관하지 않습니다.
- 팝업 닫기: 취소로 간주하고 전체 작업이 중단됩니다.
또 하나의 세부 사항은 테스트 중 추가된 것입니다: 선택 사항이 이번에 남은 모든 파일에 적용됩니다. 그렇지 않으면 500장의 이미지에 대해 500번의 팝업이 연속으로 뜹니다. 첫 번째 버전이 그랬고, 한 번 써보니 견딜 수 없었습니다.
선택한 백업 디렉토리는 기본 백업 위치로 기록됩니다 (
~/Library/Application Support/ImgZilla Backups/아래에 시간별 하위 디렉토리 생성). 이후 유사한 상황 발생 시 우선 사용됩니다.
3. '이미 최소화됨': 차라리 아무 것도 하지 않는다
어떤 이미지들은 가져오기 전에 이미 압축된 경우가 있습니다 (다른 도구나 이전에 ImgZilla로 처리한 경우). 다시 압축해도 보통 0.몇 퍼센트의 용량 변화만 얻을 수 있습니다. 우리는 이에 대해 강력한 규칙을 정했습니다: 압축률이 0.4% 미만이면 건드리지 않는다. 목록에 '이미 최소화됨'으로 표시하고, 원본 파일을 그대로 두며, 무료 사용량을 소모하지 않습니다.
이 규칙은 통계 수치를 덜 보기 좋게 만들 수 있습니다. 이미 압축된 전체 앨범을 가져오면 대부분 '이미 최소화됨'으로 나올 수 있습니다. 하지만 우리는 단지 성과를 보여주기 위해 당신의 이미지를 다시 압축하는 도구는 원본 파일에 사용할 가치가 없다고 생각합니다.
4. 확장자가 속임수일 때
테스트 샘플 중에는 확장자가 .png인데 실제로는 JPEG인 파일이 꽤 있었습니다. 다양한 경로를 통해 유통된 이미지로, 생각보다 많습니다.
이제 ImgZilla는 파일 헤더의 매직 바이트를 읽어 실제 형식을 판단하고, 실제 형식에 따라 인코더를 선택합니다. 확장자가 틀려도 올바르게 처리합니다.
5. 직렬 처리, 병렬이 아닌
한 장씩 순서대로 압축하는 것은 '충분히 빠르지 않아' 보일 수 있습니다. 병렬을 시도해 보았고 속도는 확실히 빨라졌지만, 대량 작업에서 오류 발생 시 상태 추적이 어려워졌습니다. 그리고 이 도구는 사용자의 원본 파일을 덮어쓰고 있습니다.
안정성이 최고 속도보다 우선이므로, 최종적으로 직렬 처리를 유지했습니다. 직렬은 작업을 한 장씩 처리한다는 뜻이며, 각 이미지의 압축 과정 자체는 인코더 내부에서 멀티스레드로 이루어지므로 CPU의 멀티코어 능력을 낭비하지 않습니다. 인터페이스상의 보완으로, 현재 처리 중인 항목이 자동으로 스크롤되어 보이게 하고, 마우스를 올리면 자동 스크롤이 일시 정지되며, 하단에 처리된 개수와 절약된 용량이 실시간으로 표시되고, 모두 완료되면 시스템 알림을 보냅니다.
6. 무료 사용량 소진 시, 작업은 '중지'가 아닌 '일시 정지'
무료 버전은 하루 10장을 압축할 수 있으며, 날짜가 바뀌면 자동으로 초기화됩니다. 테스트 중 우리는 어느 순간에 중단되는지에 따라 경험이 크게 달라진다는 것을 발견했습니다. 만약 200장의 이미지를 끌어다 놓고 10장째에서 바로 실패로 종료되면, 사용자는 모든 파일을 다시 추가해야 합니다. 그런 알림은 완전히 방해가 될 뿐입니다.
지금 동작은: 사용량이 소진되면, 작업이 그 자리에서 일시 정지되고 구매 패널이 표시됩니다. 구매가 완료되면, 중단된 지점부터 나머지를 계속 압축하므로 파일을 다시 추가할 필요가 없습니다. 또한, 사용량은 압축이 성공했을 때만 차감됩니다. 압축 실패나 '이미 최소화됨'은 차감되지 않습니다.
7. 19개 언어 옵션, 그리고 눈에 덜 띄는 마무리
인터페이스는 19개 언어를 완벽하게 지원합니다 ("시스템 설정 따르기", 간체/번체 중국어, English, 日本語, 한국어 및 주요 유럽 언어, العربية, Tiếng Việt 등). 설정에서 언제든 전환할 수 있으며, 전환 즉시 적용되고 재시작할 필요가 없습니다.
이 부분의 작업량은 예상을 크게 웃돌았고, 출시가 늦어진 이유 중 하나입니다. 하지만 전 세계 App Store에서 출시되는 도구로서, 사용자가 자신의 모국어로 볼 수 있도록 하는 것은 가장 기본적인 존중입니다.
화질에 관하여: 우리 말을 믿지 마시고, 직접 확인하세요
압축에서 가장 어려운 것은 신뢰를 쌓는 일입니다. 그래서 분명히 말씀드립니다:
- PNG(oxipng)와 SVG(svgcleaner)는 진정한 무손실 압축으로, 픽셀은 변하지 않습니다.
- JPEG, WebP, AVIF, HEIC/HEIF, GIF는 원리상 손실 재인코딩이지만, 파라미터를 시각적 무손실 범위로 선택했습니다. 육안으로 거의 구별할 수 없지만, 이것은 "무손실"이 아니며, 우리는 이 두 용어를 혼용하지 않을 것입니다.
게다가, 이 말을 믿고 받아들일 필요는 없습니다. ImgZilla에는 이미지 비교 창(⌘D)이 내장되어 있습니다. 왼쪽은 압축 전, 오른쪽은 압축 후이며, 중간의 분할선을 끌어 좌우로 비교할 수 있고, 실제 크기로 확대하여 세부 사항을 꼼꼼히 비교할 수 있습니다. 목록의 성공적으로 압축된 각 이미지마다 한 번의 클릭으로 비교를 불러올 수 있습니다.
마음에 안 들면, 휴지통에서 원본을 원래 위치로 되돌리세요. 이 탈출구는 항상 열려 있습니다.
파라미터는 고정되어 있으며, 인터페이스에 품질 슬라이더가 없습니다. 이것은 명확한 결정입니다: 파라미터 조정은 양자화 테이블, 인코딩 방법, speed 등의 전문 개념을 이해해야 하며, 잘못 조정하면 헛수고가 되거나 이미지가 흐려집니다. 우리가 이 작업을 대신 해놓았습니다. 각 형식의 파라미터는 개별적으로 튜닝되어 있으며, 끌어서 압축 버튼을 누르면 해당 형식의 현재 파라미터에서 가장 이상적인 균형점을 얻을 수 있습니다.
직접 압축 파라미터를 조정하는 데 익숙하신 분들도, 먼저 ImgZilla를 사용해 보시길 권합니다. 파라미터는 이미 튜닝되어 있어 반복적인 시행착오를 줄여줄 수 있을 것입니다.
하지 않는 일
똑같이 중요한 경계를 여기에 적어, 다운로드 후에야 발견하는 일이 없도록 합니다:
- macOS 전용 (12.3 이상). Windows판, iOS판, 웹 버전은 없습니다.
- 형식 변환을 하지 않습니다. JPG는 압축 후에도 JPG로 유지되며, WebP로 바뀌지 않습니다.
- 크기를 변경하지 않습니다. 해상도를 줄이거나 자르지 않습니다.
- 반드시 용량이 줄어든다고 보장하지 않습니다. 이미 최적화된 이미지는 거의 압축이 불가능할 수 있으며, 솔직히 '이미 최소화됨'으로 표시됩니다.
- EXIF 정보는 기본적으로 제거됩니다 (GPS 위치 포함, 파일 크기를 줄이고 개인정보를 보호합니다). 촬영 파라미터, 저작권, 색상 프로필을 보존해야 한다면, 설정에서 'EXIF 정보 유지'를 수동으로 켜십시오.
또 하나 강조할 점: 모든 압축은 사용자의 Mac에서 로컬로 이루어집니다. App Store 구매 확인 외에 ImgZilla는 인터넷 연결이 필요 없으며, 이미지가 컴퓨터를 떠나지 않습니다. 대기열도, 장수 제한도, "다른 사람 서버에 업로드"하는 일도 없습니다. 인코더는 모두 앱 내에 패키징된 로컬 정적 라이브러리입니다.
이제 사용할 수 있습니다
- 무료 버전: 하루 10장, 날짜가 바뀌면 자동 초기화, 기능 제한 없음.
- 제한 해제: 영구 버전(일회 구매, 수량 제한 없음) 또는 월간 구독. 가격은 해당 App Store 지역에 따라 표시됩니다. 컴퓨터를 바꾸거나 다시 설치한 경우 '구매 복원'을 클릭하세요.
처음 사용 권장 방법: 별로 중요하지 않은 이미지 하나를 아무거나 끌어 넣고, 압축 후 '비교'를 클릭하여 직접 화질을 확인한 다음, 전체 폴더를 맡길지 결정하세요.
이것이 우리가 이 도구가 사용되길 바라는 방식입니다. 먼저 검증하고, 그다음에 신뢰하세요.
질문이나 제안이 있으시면 메뉴 '도움말 → 피드백'을 통해 알려주세요. 1.3은 안심하고 사용할 수 있는 버전이지만, 이것이 마지막이 아니라는 것은 분명합니다.
ImgZilla 1.3이 현재 Mac App Store에 출시되었습니다. macOS 12.3 이상이 필요합니다.
바로 다운로드 -> App Store