react-native

React Native 이미지 최적화 정리: 스크롤 성능을 살리는 이미지 전략

mirabo01 2026. 1. 25. 10:00

FlatList 최적화까지 했는데도
앱이 여전히 무겁게 느껴진다면
다음으로 의심해야 할 건 거의 항상 이미지다.

실무에서 체감 성능 문제를 추적해보면
원인이 이런 경우가 많다.

  • 이미지 용량이 너무 큼
  • 스크롤할 때마다 이미지 다시 로드
  • 리스트에 이미지가 많은데 최적화 안 됨

이 글에서는
React Native에서 이미지를 다룰 때 꼭 알아야 할 최적화 포인트
실무 기준으로 정리한다.


이 글이 필요한 사람

  • 이미지가 많은 화면에서 스크롤이 끊기는 경우
  • FlatList는 최적화했는데 여전히 느린 경우
  • 이미지 캐싱 개념이 잘 안 잡히는 경우

React Native에서 이미지가 느린 이유

웹과 달리
모바일 앱에서는 이미지가 더 민감하다.

  • 메모리 사용량 제한
  • 네트워크 환경 다양
  • 저사양 기기 존재

특히 리스트 + 이미지 조합은
최적화하지 않으면 바로 성능 문제가 드러난다.

[이미지: 이미지 로딩이 성능에 미치는 영향 구조]


기본 Image 컴포넌트의 한계

React Native 기본 Image는
간단한 용도에는 충분하지만,
실무에서는 한계가 명확하다.

기본 Image의 특징

  • 캐싱 제어가 제한적
  • 대용량 이미지에 취약
  • 스크롤 리스트에서 재로딩 발생 가능

그래서
이미지 많은 앱에서는
별도 전략이 필요해진다.


가장 먼저 해야 할 것: 이미지 사이즈 점검

코드보다 먼저
이미지 자체부터 점검해야 한다.

흔한 실수

  • 원본 4000px 이미지를 그대로 사용
  • 모바일에서 필요 없는 해상도
  • 썸네일용 이미지 따로 없음

이미지 최적화의 50%는
이미지 파일 크기 줄이기다.

권장 기준

  • 썸네일: 200 ~ 400px
  • 리스트 이미지: 화면 표시 크기 기준
  • 포맷: 가능하면 WebP

Image에 반드시 size를 주는 이유

React Native에서는
Image에 width, height가 거의 필수다.

<Image
  source={{ uri: imageUrl }}
  style={{ width: 100, height: 100 }}
/>

사이즈가 없으면

  • 레이아웃 계산이 늦어지고
  • 스크롤 중 깜빡임 발생
  • 성능 저하로 이어질 수 있다

resizeMode 제대로 쓰기

이미지가 깨지거나
비율이 이상할 때 대부분 이 문제다.

<Image
  resizeMode="cover"
/>

자주 쓰는 값은 이 정도다.

  • cover : 영역 꽉 채움 (비율 유지)
  • contain : 전부 보이게
  • stretch : 비율 무시 (권장 X)

리스트 썸네일에서는
cover가 가장 많이 쓰인다.


이미지 캐싱이 왜 중요한가

이미지 캐싱이 없으면
스크롤할 때마다 이런 일이 반복된다.

  • 네트워크 요청
  • 디코딩
  • 메모리 로드

이게 쌓이면
스크롤 성능이 급격히 떨어진다.

그래서 실무에서는
이미지 캐싱을 거의 필수로 고려한다.


이미지 캐싱 전략 선택지

1️⃣ 기본 Image + 서버 캐싱

  • 서버에서 Cache-Control 헤더 설정
  • 간단하지만 제어 한계 있음

2️⃣ 라이브러리 사용 (실무에서 흔함)

  • 캐싱
  • 로딩 플레이스홀더
  • 에러 처리

이미지가 많은 앱이라면
두 번째가 현실적인 선택이다.


이미지 로딩 중 처리하기

이미지가 늦게 뜨면
사용자는 앱이 멈춘 걸로 느낀다.

그래서 보통
로딩 상태를 시각적으로 처리한다.

<View style={{ width: 100, height: 100, backgroundColor: '#eee' }} />
  • 스켈레톤 UI
  • 단순 회색 박스

이것만 있어도
체감 품질이 꽤 달라진다.


FlatList + Image 조합에서 주의할 점

이미지 최적화는
리스트와 함께 봐야 한다.

  • Item 컴포넌트 분리
  • React.memo 적용
  • 이미지 컴포넌트 안에서 불필요한 계산 제거

이미지 하나가
리스트 전체 성능을 망치는 경우도 많다.


실무에서 자주 겪는 문제들

  • 이미지가 늦게 로드되면서 레이아웃 흔들림
  • 스크롤 시 이미지 깜빡임
  • 같은 이미지인데 계속 네트워크 요청 발생

이건 대부분
사이즈, 캐싱, 구조 문제 중 하나다.


실무 기준 이미지 최적화 체크리스트

이미지 성능이 의심되면
아래부터 확인하면 된다.

  • 이미지 해상도 과하지 않은가
  • width / height 명시했는가
  • resizeMode 적절한가
  • 리스트 아이템 분리했는가
  • 캐싱 전략을 고려했는가

정리

  • 이미지 최적화는 체감 성능에 직접적이다
  • 기본 Image는 한계가 있다
  • 이미지 사이즈 관리가 최우선이다
  • 리스트 + 이미지는 특히 주의해야 한다
  • 캐싱을 고려하면 스크롤 품질이 크게 좋아진다

다음 글에서는
앱 배포 전 반드시 거치는 단계
Android / iOS 빌드와 배포 흐름
입문자 기준으로 정리해보려고 한다.