Adobe가 대표적인 Photoshop 앱의 웹 버전에서 사용자가 가장 큰 파일도 수정할 수 있도록 한 방법을 알아보세요.
소개
이 도움말은 동영상으로도 제공됩니다.
2021년 Adobe는 Chrome 엔지니어링팀과 협력하여 Photoshop 버전을 웹에 제공했습니다. 이 소프트웨어는 SIMD, 원본 비공개 파일 시스템의 고성능 저장소, 캔버스의 P3 색상 공간, Lit을 사용한 웹 구성요소와 같은 기능을 통해 WebAssembly를 혁신적으로 사용합니다. 이 도움말에서는 메모리에 들어갈 수 있는 것보다 큰 파일 작업을 Adobe Photoshop 엔지니어링이 어떻게 해결했는지에 중점을 두고자 합니다. WebAssembly의 경우 Photoshop이 wasm32의 32비트 주소 공간보다 큰 파일에서 작동하는 방식입니다.
문제
수정할 파일을 열려면 보기 위해 파일을 열 때보다 훨씬 많은 메모리가 필요합니다. Photoshop에서 수정하는 파일은 소프트웨어에서 제공하는 다양한 기능, 사용되는 디지털 디자인 및 편집 유형, 사용자 기기의 기능으로 인해 사용자가 기기에서 사용할 수 있는 것보다 더 많은 메모리가 필요할 수 있습니다.
Photoshop 파일 형식은 무손실 압축으로 데이터를 저장합니다. 파일이나 문서를 읽을 때는 더 효율적인 처리를 위해 모든 이미지 데이터가 압축 해제됩니다. 따라서 필요한 메모리 양은 문서가 디스크 또는 클라우드 스토리지에서 사용하는 공간보다 몇 배 더 클 수 있습니다.
Photoshop은 매우 큰 실행취소 기록을 지원합니다. Photoshop의 많은 작업은 소멸 작업이라고 합니다. 즉, 브러시로 페인팅하는 등의 수정 작업을 하면 원래의 픽셀 데이터와 크기가 같을 수 있는 새 픽셀 데이터가 생성됩니다. 긴 편집 세션에서 이러한 수정 작업을 수행하면 실행취소 작업을 지원하기 위해 보관해야 하는 대량의 픽셀 데이터가 생성됩니다. 따라서 기록이 수백 메가바이트 또는 수백 기가바이트의 데이터로 늘어날 수 있습니다.
데스크톱 컴퓨터, 휴대기기, 브라우저 등 모든 기기와 플랫폼은 메모리를 관리합니다. 일부는 애플리케이션에 제공하는 메모리 양이 다른 것보다 많습니다. 메모리 크기도 기기마다 다릅니다. 새 컴퓨터나 기기를 주문할 때 원하는 랜덤 액세스 메모리 (RAM) 크기를 지정하면 알 수 있습니다. 이러한 플랫폼의 대부분은 애플리케이션이 물리적으로 사용 가능한 것보다 더 많은 메모리를 사용할 수 있는 가상 메모리도 지원합니다. 이 지원은 운영체제 및 런타임에 따라 다르며, WebAssembly의 경우 애플리케이션에서 쉽게 액세스하거나 사용할 수 없을 수 있습니다. 게다가 최신 가상 시스템에는 Photoshop 요구사항을 쉽게 초과하는 상한선이 있습니다.
애플리케이션이 필요한 만큼만 메모리를 사용하는 것이 이상적입니다. 이렇게 하면 일반적으로 사용자에게 최상의 성능을 제공할 수 있습니다. 그러나 메모리를 너무 많이 사용하면 런타임 플랫폼에서 불이익을 주거나 메모리가 부족하여 실패할 수 있습니다.
참고로 Photoshop에서 해결해야 했던 원래 문제는 초기 버전의 macOS에서 OS 및 모든 애플리케이션의 인쇄 해상도 파일(최대 1MB)을 수정하는 것이었습니다. CMYK로 된 300dpi 전체 페이지 이미지는 압축되지 않은 상태에서 약 32MB입니다.
해결 방법
앱이 사용 가능한 RAM을 초과하는 문제를 해결하기 위해 Photoshop은 소프트웨어 가상 메모리 시스템 (VM)을 구현했습니다. Photoshop은 VM을 사용하여 문서 데이터, 특히 이미지 데이터, 모든 실행취소 기록 및 상태, 현재 명령어의 작업 저장소를 관리합니다. 브러시 설명과 같은 대규모 데이터 블록을 캐시하는 데도 사용되므로 디스크에서 한 번만 직렬화하면 됩니다.
VM에서 관리하는 측면 중 하나의 예로 이미지 데이터는 피라미드형 카드 세트인 미pmap 표현을 사용하여 저장되며, 이 표현은 다양한 해상도에서 이미지 데이터를 제공합니다. 이렇게 하면 Photoshop이 확대 또는 미리보기를 볼 때 축소할 때보다 빠르게 응답할 수 있도록 적절한 해상도 데이터를 사용할 수 있습니다.
애플리케이션 초기화 중에 Photoshop은 사용 가능한 RAM의 양을 결정합니다. VM에 저장할 데이터를 위한 공간을 하나 할당합니다. 나머지 RAM은 표준 C++ 런타임 라이브러리를 통해 다른 애플리케이션 요구사항에 사용할 수 있습니다. VM 메모리는 페이지로 나뉩니다. 각 페이지는 일반적으로 기기의 하드웨어 페이지 크기의 배수입니다. 이미지 데이터에 사용되는 경우 메모리는 타일로 참조됩니다. 타일은 도형 경계를 포함하는 단일 레이어의 정사각형 픽셀 영역입니다. 카드는 하나 이상의 페이지를 사용합니다.
Photoshop은 VM 페이지에 디스크 기반 백업을 제공하기 위해 하나 이상의 스크래치 파일을 만듭니다. 이러한 스크래치 파일은 원본 비공개 파일 시스템에 저장됩니다. 스크린샷은 이미지 편집 세션 중에 이러한 스크래치 파일 (노란색으로 강조 표시됨)과 다른 파일의 예시적인 파일 계층 구조를 보여줍니다. 각 스크래치 파일에는 여러 VM 페이지가 포함될 수 있습니다. VM에 더 많은 백업이 필요한 경우 스크래치 파일이 추가로 생성됩니다. 페이지가 해제되면 스크래치 파일의 공간을 새 페이지에 재사용할 수 있습니다.
이미지 데이터를 처리할 때 Photoshop은 타일을 반복하여 픽셀 계산을 실행합니다. 각 계산은 여러 타일을 참조할 수 있습니다. VM은 현재 반복의 소스 및 대상 타일이 메모리에 있는지 확인하고 필요에 따라 스크래치 파일에서 이를 로드합니다. 동시에 페이지를 스크래치 파일로 플러시하여 메모리 공간을 확보할 수 있습니다.
결론
VM의 구체적인 구현 세부정보는 이 문서의 범위를 훨씬 벗어나며 Adobe의 독점적인 사항이지만, 솔루션에 대한 개략적인 설명을 통해 Photoshop에서 대용량 파일을 처리하는 방법을 이해할 수 있습니다. 파일에 대한 고성능 읽기 및 쓰기 액세스 권한이 있는 원본 비공개 파일 시스템은 솔루션의 핵심 구성요소입니다.
감사의 말씀
이 블로그 게시물은 올리버 운터 에커와 레이첼 앤드류가 검토했습니다. Photoshop VM에 관한 훌륭한 문서를 작성해 주신 러셀 윌리엄스님께 특별히 감사드립니다.