화면 크기의 썸네일만 읽어 메모리를 줄인 방법
메뉴바 클립보드 앱 stash 만들기· 1 / 2
- 1 — 화면 크기의 썸네일만 읽어 메모리를 줄인 방법
- 2 — Apple Developer 계정 없이 macOS 앱을 배포한 방법
Stash는 내가 만든 macOS 메뉴바 클립보드 매니저다. 맥에서 복사한 텍스트·링크·이미지·파일을 목록에 모아 두었다가 다시 붙여넣을 수 있다. 이미지도 복사하면 목록에 남는데, 목록에서는 원본 대신 작은 미리보기만 보인다.
다른 클립보드 앱에서 메모리를 많이 쓴 사례를 보고, Stash도 이미지가 쌓이면 같은 문제가 생기는지 확인하기로 했다. 이 글은 작은 미리보기를 보여 주기 위해 큰 원본 이미지를 반복해서 읽던 문제를 고친 기록이다.
작은 목록에 큰 원본을 반복해서 읽고 있었다
이미지를 복사하면 Stash는 나중에 다시 붙여넣을 수 있도록 원본 이미지 파일을 보관한다. 예를 들어 4K 스크린샷을 복사했다면, 그 큰 스크린샷이 디스크에 남는다. 그러나 목록에서 필요한 것은 그 파일 전체가 아니라 행 한 칸에 들어갈 작은 그림이다.
원본 이미지는 복사한 이미지의 전체 크기 파일이고, 썸네일은 목록에 보여 주기 위해 작게 줄인 미리보기다.
왼쪽은 선택한 이미지의 미리보기이고, 오른쪽 목록 행에 보이는 작은 그림이 썸네일이다.
기존에는 목록을 열 때마다 작은 미리보기를 그리면서도 원본 이미지 전체를 메모리에 읽었다. 화면에는 작은 그림 하나만 보이는데, 앱은 훨씬 큰 파일을 처리하고 있었던 것이다. 같은 이미지가 다른 목록에 다시 나타나면 원본을 또 읽을 수도 있었다.
4K PNG 한 장은 메모리에서 약 33MB를 차지할 수 있다. 이미지가 여러 장 쌓이면 작은 목록을 한 번 여는 일만으로도 메모리가 크게 늘어날 수 있었다.
수정 전에는 이미지 목록 행이 원본을 읽고 화면 표시 때 원본 해상도로 디코드했다. 수정 후에는 같은 파일의 작은 미리보기를 보관해 메인 목록·고정 클립 사이드바·다시 연 팝오버에서 다시 쓴다.
실제 목록을 열어 얼마나 늘어나는지 확인했다
성능 문제는 느낌만으로 판단하지 않았다. 이미지 50개, 텍스트 100개, 파일 50개를 Stash에 넣고 실제 목록을 열었다. 이미지 파일은 모두 4K PNG로 준비했고, 미리보기가 화면에 그려진 뒤 메모리가 얼마나 늘었는지 측정했다.
같은 조건을 다섯 번 반복한 결과, 기존 방식은 평균 약 1,576.6MB의 메모리를 추가로 사용했다. 이미지 50개를 목록으로 보는 일에 1.5GB가 넘는 메모리가 든 것이다.
이 측정값을 기준으로 삼았다. 수정 뒤에도 같은 이미지·같은 목록·같은 방법으로 다시 확인해야 실제 효과를 비교할 수 있다.
목록에는 작은 미리보기만 만들고 다시 썼다
수정은 두 가지다.
- 목록 크기에 맞춘 작은 이미지를 만든다. 원본 전체를 매번 읽는 대신, 화면에 보일 만큼만 줄인 미리보기를 만든다.
- 이미 만든 미리보기를 다시 쓴다. 같은 이미지가 목록이나 고정 목록에 다시 나타나도, 처음 만든 미리보기를 사용한다.
원본 이미지는 그대로 보관하고, 목록에 보여 줄 작은 이미지 하나만 따로 다루는 방식이다. 따라서 원본을 잃지 않으면서도 목록을 열 때마다 큰 파일을 반복해서 읽지 않아도 된다.
다른 개선 후보도 있었지만, 이 문제는 측정에서 큰 메모리 사용량이 확인됐고 원본 보관 방식도 바꾸지 않아도 됐다. 그래서 먼저 이 한 가지를 고쳤다.
같은 목록을 다시 열자 추가 메모리가 거의 사라졌다
수정 뒤에 같은 이미지 50개·텍스트 100개·파일 50개 조건을 다시 측정했다. 평균 메모리 변화는 -10.1MB였고, 반복 측정에서는 거의 0MB 근처에 머물렀다.
| 측정 시점 | 목록을 연 뒤 추가된 메모리 | 결과 |
|---|---|---|
| 수정 전 | 평균 +1,576.6MB | 원본 이미지를 반복해서 읽었다. |
| 수정 후 | 평균 -10.1MB | 화면용 미리보기를 재사용했다. |
같은 조건의 전후 차이는 약 1,586MB이며, 기존 측정값 기준으로 99.4% 줄었다. 중요한 것은 숫자 자체보다 같은 목록·같은 이미지 수·같은 측정 방법으로 전후를 비교했다는 점이다.
작업을 마치며
이번 작업으로 확인한 것은 단순하다. 목록에 작은 이미지만 필요하다면, 큰 원본을 매번 읽을 이유가 없다. 화면에 맞는 미리보기를 한 번 만들고 재사용하면, 이미지 클립이 쌓여도 목록을 열 때의 메모리 사용량을 크게 줄일 수 있다. 수정 뒤 전체 자동 테스트 461개도 통과해 이미지 보관·목록 표시·붙여넣기 기능이 기존처럼 동작하는지 확인했다.
즉, 성능 개선은 먼저 실제 사용 조건에서 문제를 확인하고, 바꾼 뒤 같은 조건으로 다시 확인해야 한다. 그래야 체감이 아니라 결과로 판단할 수 있다.
수정 이력
| 날짜 | 변경 사항 |
|---|---|
| 2026-08-25 | 글의 핵심 흐름을 보여 주는 썸네일과 수정 전·후 이미지 읽기 구조도를 추가했다. |
| 2026-08-26 | 실제 구현 경로를 다시 대조해 구조도의 흐름과 용어를 보정하고, 이전 썸네일 시안을 별도로 보관한 뒤 최종 시안을 적용했다. 두 이미지는 1280×720 16:9 비율로 통일했다. |