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

인기 있는 Photoshop 앱의 웹 버전에서 사용자가 대용량 파일까지도 편집할 수 있도록 Adobe에서 어떻게 사용했는지 알아보세요.

소개

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

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

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

문제

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

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

Photoshop은 대용량 실행취소 기록을 지원합니다. Photoshop의 많은 작업을 파괴적인 작업이라고 합니다. 즉, 브러시로 그림을 그리는 것과 같이 편집하면 원래 픽셀 데이터만큼 클 수 있는 새 픽셀 데이터가 생성됩니다. 긴 편집 세션에서 이러한 수정을 수행하면 실행취소 작업을 지원하기 위해 유지해야 하는 많은 양의 픽셀 데이터가 생성됩니다. 따라서 기록은 수백 메가바이트 또는 수 기가바이트의 데이터로 커질 수 있습니다.

데스크톱 컴퓨터, 휴대기기 또는 브라우저 등 모든 기기와 플랫폼이 메모리를 관리합니다. 어떤 것은 애플리케이션에 사용할 수 있는 메모리 양이 다른 메모리에 비해 더 넉넉합니다. 메모리 양도 기기에 따라 다릅니다. 새 컴퓨터나 기기를 주문하고 원하는 RAM (Random-Access Memory)의 양을 지정할 때 아시다시피 메모리 양도 다릅니다. 이러한 플랫폼은 또한 가상 메모리를 지원하기 때문에 애플리케이션이 물리적으로 사용 가능한 것보다 더 많은 메모리를 사용할 수 있습니다. 이러한 지원은 운영체제와 런타임에 따라 다릅니다. WebAssembly의 경우 애플리케이션이 쉽게 액세스하거나 사용하지 못할 수 있기 때문입니다. 게다가 최신 가상 시스템에는 Photoshop 요구사항에서 쉽게 초과되는 상한이 있습니다.

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

과거의 경우, Photoshop에서 해결해야 했던 원래 문제는 macOS 초기 버전의 인쇄 해상도 파일(OS 및 모든 애플리케이션에 대해 최소 1MB)을 수정하는 것이었습니다. 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에게 특별히 감사드립니다.