Photoshop에서 메모리에 들어갈 수 있는 것보다 큰 파일로 작업하던 문제를 해결한 방법

Adobe를 통해 유명 Photoshop 앱의 웹 버전에서도 대용량 파일까지 편집할 수 있도록 지원한 방법을 알아보세요.

나벨 알 샤마
나벨 알 샤마
토마스 슈타이너
토마스 슈타이너

소개

(이 도움말은 동영상 형식으로도 제공됩니다.)

2021년에 Adobe는 Chrome 엔지니어링과 함께 Photoshop 버전을 웹에 출시했습니다. 이 소프트웨어는 SIMD, 원본 개인 파일 시스템의 고성능 저장소, 캔버스를 위한 P3 색공간, Lit을 사용한 웹 구성요소와 같은 기능을 갖춘 WebAssembly를 혁신적으로 활용합니다. 이 도움말에서는 Adobe Photoshop 엔지니어링이 메모리에 넣을 수 있는 크기보다 큰 파일을 다루는 문제를 어떻게 해결했는지 중점적으로 살펴보겠습니다. WebAssembly의 경우, Photoshop이 wasm32의 32비트 주소 공간보다 큰 파일에서 작동하는 방식을 살펴보겠습니다.

Project Fugu 로고 이미지를 수정하는 Photoshop 앱

문제

수정하기 위해 파일을 열려면 파일을 열어 보는 것보다 훨씬 많은 양의 메모리가 필요합니다. Photoshop에서 편집한 파일은 소프트웨어가 제공하는 다양한 기능, 사용되는 디지털 디자인 및 편집 유형, 사용자 기기의 기능 때문에 사용자가 기기에서 사용할 수 있는 것보다 더 많은 메모리가 필요합니다.

Photoshop 파일 형식은 무손실 압축을 사용하여 데이터를 저장합니다. 파일이나 문서를 읽을 때 모든 이미지 데이터가 압축 해제되어 더 효율적인 처리가 가능합니다. 따라서 필요한 메모리 양은 문서가 디스크 또는 클라우드 스토리지에서 사용하는 공간보다 몇 배 더 많을 수 있습니다.

Photoshop은 매우 큰 실행취소 기록을 지원합니다. Photoshop의 작업 중 상당수는 파괴적인 작업이라고 합니다. 즉, 브러시로 칠하는 등 편집하면 원본 픽셀 데이터만큼 클 수 있는 새 픽셀 데이터가 생성됩니다. 긴 수정 세션에서 이렇게 수정하면 실행취소 작업을 지원하기 위해 유지해야 하는 대량의 픽셀 데이터가 생성됩니다. 따라서 기록은 수백 메가바이트 또는 수 기가바이트에 이를 수 있습니다.

데스크톱 컴퓨터, 휴대기기 또는 브라우저 등 기기와 플랫폼은 모두 메모리를 관리합니다. 일부는 애플리케이션에서 사용할 수 있는 메모리 양 면에서 다른 것보다 더 관대합니다. 또한 새 컴퓨터나 기기를 주문할 때 원하는 랜덤 액세스 메모리 (RAM)의 양을 지정하듯이 메모리의 양은 기기마다 다릅니다. 이러한 플랫폼은 대부분 가상 메모리를 지원하므로 애플리케이션에서 실제로 사용할 수 있는 것보다 더 많은 메모리를 사용할 수 있습니다. 이 지원은 WebAssembly의 경우처럼 운영체제 및 런타임에 따라 다르며, 애플리케이션에서 쉽게 액세스하거나 사용하지 못할 수 있습니다. 게다가 최신 가상 시스템에는 Photoshop 요구사항을 충족할 수 있는 상한선이 있습니다.

애플리케이션은 필요한 만큼 메모리를 사용하는 것이 이상적입니다. 이를 통해 일반적으로 사용자에게 최상의 성능을 제공할 수 있습니다. 그러나 메모리를 너무 많이 사용하면 런타임 플랫폼에서 페널티를 받거나 메모리가 부족하여 오류가 발생할 수 있습니다.

참고로, Photoshop이 해결해야 했던 원래 문제는 OS와 모든 애플리케이션에서 최소 1MB의 macOS 초기 버전에서 인쇄 해상도 파일을 편집하는 것이었습니다. CMYK 형식으로 된 300dpi 전체 페이지 이미지는 압축되지 않은 상태에서 약 32MB입니다.

해결 방법

Photoshop은 사용 가능한 RAM 양을 초과하는 앱의 문제를 해결하기 위해 소프트웨어 가상 메모리 시스템 (VM)을 구현했습니다. Photoshop은 VM을 사용하여 문서 데이터, 특히 이미지 데이터, 모든 실행취소 기록 및 상태는 물론 현재 명령어의 작업 저장소를 관리합니다. 또한 브러시 설명과 같은 대용량 데이터 블록을 캐시하는 데 사용되므로 디스크에서 한 번만 직렬화하면 됩니다.

VM에서 관리하는 측면 중 하나의 예로, 이미지 데이터는 mipmap 표현을 사용하여 저장됩니다. 밉맵은 타일의 피라미드형 집합이며 낮은 해상도에서 고해상도까지 이미지 데이터를 제공합니다. 이를 통해 Photoshop은 확대하거나 미리보기를 볼 때 축소보다는 더 빠른 응답을 위해 적절한 해상도 데이터를 사용할 수 있습니다.

밉맵 이미지 스토리지 예시: 왼쪽의 기본 이미지에는 축소된 크기의 필터링된 사본이 함께 제공됩니다.

애플리케이션을 초기화하는 동안 Photoshop은 사용 가능한 RAM 크기를 확인합니다. VM에 저장할 데이터 부분을 따로 설정합니다. 나머지 RAM은 표준 C++ 런타임 라이브러리를 통해 다른 애플리케이션 요구에 사용할 수 있습니다. VM 메모리는 페이지로 나뉩니다. 각 페이지는 일반적으로 기기 하드웨어 페이지 크기의 배수입니다. 이미지 데이터에 사용될 경우 메모리는 타일로 참조됩니다. 타일은 도형 경계를 포함한 단일 레이어의 픽셀 정사각형 영역입니다. 카드는 하나 이상의 페이지를 사용합니다.

Photoshop은 하나 이상의 스크래치 파일을 만들어 VM 페이지에 디스크 기반 지원을 제공합니다. 이러한 스크래치 파일은 원본 비공개 파일 시스템에 저장됩니다. 스크린샷은 이미지 수정 세션 중 이러한 스크래치 파일 (노란색으로 강조표시됨) 및 기타 파일의 예시 파일 계층 구조를 보여줍니다. 각 스크래치 파일에는 여러 VM 페이지가 포함될 수 있습니다. VM에 더 많은 백업이 필요한 경우 추가 스크래치 파일이 생성됩니다. 페이지가 해제되면 스크래치 파일의 공간을 새 페이지에 다시 사용할 수 있습니다.

OPFS Explorer Chrome 확장 프로그램을 사용하여 Photoshop의 원본 비공개 파일 시스템 파일 계층 구조를 검사합니다.

이미지 데이터를 처리할 때 Photoshop은 타일을 반복하면서 픽셀 계산을 수행합니다. 각 계산은 여러 카드를 참조할 수 있습니다. VM은 현재 반복의 소스 타일과 대상 타일이 메모리에 있는지 확인하고 필요에 따라 새 파일에서 이를 로드하는 역할을 합니다. 동시에 페이지를 스크래치 파일로 플러시하여 메모리 공간을 확보할 수 있습니다.

결론

VM의 구체적인 구현 세부정보는 이 문서의 범위를 훨씬 넘어 Adobe 독점의 역할을 합니다. 하지만 솔루션에 대한 대략적인 설명을 통해 Photoshop에서 대용량 파일을 처리하는 방법을 이해할 수 있도록 했습니다. 파일에 대한 읽기 및 쓰기 액세스 권한이 뛰어난 원본 개인 파일 시스템이 솔루션의 핵심 구성 요소입니다.

감사의 말씀

이 블로그 게시물은 Oliver Unter Ecker와 Rachel Andrew가 작성했습니다. Photoshop VM에 관해 훌륭한 문서를 작성해 주신 Russell Williams님께도 감사드립니다.