React Native 공식 문서 기여하기

강문혁·2025년 9월 3일

회고록

목록 보기
3/3
post-thumbnail

분명 해결했다고 생각했는데...

정신없이 살던 중에 이메일이 왔다.


잉?

16KB 페이지 크기 요구사항을 해결하려고 React Native 버전을 0.79.2로 올려놨기 때문에 해당 이슈는 해결되었다.. 생각하고 있었는데 뜬금없이 이런 이메일이 왔다.

이상하다... 내 기억상으로 0.77 버전에 이미 해당 이슈를 해결한 걸로 기억하고 있었다.
공식 블로그 글


원인 분석 하기

바로 원인 분석을 위해 구글 플레이 콘솔을 켜고 확인해 봤다.

webp... 이미지 컴포넌트에 무슨 문제가 있나..?

고민을 해보니 과거에 Image 컴포넌트에서 webp 혹은 gif 같은 형식을 쓰려면 build.gradle에 어떤 라이브러리를 추가해야 한다고 해서 추가했던 기억이 생각났다.

그래서 "아 버전이 뭔가 오래됐나 보다 생각하고 공식 Docs로 들어가서 버전 체크해 봐야지~" 하고 들어가서 이미지 컴포넌트를 확인했다.

공식 문서를 보니 Fresco 3.2.0 라이브러리를 추가해야 한다.

그래서 내 버전을 확인해 봤는데...

야무지게 구버전을 사용하고 있었다.

세상에 3.1.3 난 대체 얼마나 오래된 버전을 사용하고 있었는가... 하면서 부랴부랴 3.2.0으로 변경했다.

Fresco... 정체가 뭐냐...

근데 문득 이 Fresco라는 라이브러리가 어떤 걸 위해 만들어진 라이브러리인가 궁금해서 공식 Github에 들어가 보았다.


Fresco는 안드로이드 앱에 이미지를 띄우기 위한 강력한 시스템이라고 한다.
요약하자면 Fresco를 쓰면 개발자가 OutOfMemoryError 겪는 일을 줄여줄 수 있다고 한다. (작동 원리 적으면 길어질 것 같아서 생략..)

사실 나는 첫 페이지 상단을 보자마자 당황했었다.
왜 당황했는지 이 글을 읽는 여러분도 찾았을 거라 믿는다.

왜냐하면...

Release 버전이 3.6.0이었기 때문이다.

오...? 뭐지...?

당장 릴리즈 내용을 읽어보았다

AVIF 포맷을 지원한다...
디스크 캐시 읽기 시간 초과 지원...
.
.
.
쭉 읽어보다가 3.4.0 버전에서 난 스크롤을 멈춰버렸다.

3.4.0 버전부터 Android 15를 위한 16KB 페이지 크기가 지원된다는 것이다.

그렇다는 건 3.2.0 버전은 여전히 16KB 페이지 크기를 지원하지 않는다는 의미다.


이게 왜 문제일까?

일단 공식 문서는 React Native로 개발하는 개발자도 보지만
React Native를 처음 시작하는 사람들이 가장 먼저 보는 홈페이지다

공식 문서에 있는 컴포넌트들을 보면서 어떻게 사용할 수 있는지 공부하는데
저런 식으로 오래된 버전의 라이브러리 버전을 유지하면
RN으로 프로젝트를 만드는 사람들은 전부 잠재적으로 16KB 페이지 크기 이슈를 겪을 수 있다는 것이다.

그리고 꽤 충격적인 사실이 있는데...
25년 11월 1일부터 16KB 메모리 페이지 크기를 지원하지 않으면 업데이트를 출시할 수 없게 된다. 이건 치명적이라고 생각한다.

아 Expo 유저는 괜찮다.

아마 이건 RN-CLI를 쓰는 유저만 해당될 것 같다.

??? : 나는 webp나 gif 안 쓸 거라서 Fresco 필요 없는데요?

Fresco를 안 쓴다면 당연히 해당 이슈에서 벗어날 수 있다.
하지만 요즘 WebP는 이미지 압축률도 좋고 애니메이션도 지원하기 때문에 여러 플랫폼에서 사용하고 있는 이미지 포맷이다.

결국 나는 해당 문제를 직접 PR로 올려보기로 했다.


문제 해결하기

어떤 걸 할 땐 항상 이유가 있어야 한다.
왜 이렇게 했는지에 대해 설명 하기 위해 위에서 찾은 내용과 React Native의 깃허브를 좀 찾아보았다.

Release 내역을 찾아보니 0.78부터 이미 Fresco의 버전을 3.6.0으로 대응하고 있었다.

엇 그러면
Fresco는 3.4.0, RN은 0.77 버전부터 16KB 페이지 사이즈를 대응했으니
0.77 버전은 3.4.0으로 해둬야겠다는 생각이 들었다.

왜냐하면 0.77에서 Fresco 3.5.0 혹은 3.6.0 버전으로 하면 혹시 모를 이유로 인해 프로젝트에서 각종 오류가 나오지 않을까 걱정했다..

좀 더 정보를 찾아봤는데
0.77의 Release 내역에서 커밋한 내용을 보니 0.77에서 3.4.0을 대응하는 내용을 찾을 수 있었다.

오케이! 테스트를 해보자


테스트하기

이제 내 논리가 제대로 적용되는지 확인해 볼 시간이었다.
그렇게 대단한 건 아니고 내 프로젝트에 Fresco 버전을 바꾸는 것이었다.
현재 나는 0.79.2를 사용하고 있었기 때문에 가장 최신 버전인 3.6.0을 사용해 보았다.


빌드는 잘되었고 난 이대로 PR을 작성하기로 했다.


PR 작성하기

사실 오픈소스에 PR을 작성하는 건 처음이 아니다.
예전에 Deprecated 된 Repo에 PR을 올렸지만, 당연히 관리를 안 하고 있어 요청이 받아들여지진 못했었다.

하지만 당시에 반응이 좋았다.. 그래서 그런가 더 아쉬웠다...

망한 PR 구경하러 가기

이번에도 GPT의 도움을 받아 PR을 작성하였다.

해당 PR 구경하러 가기

아까 찾았던 Release 내용을 링크를 달아가며 왜 0.77에는 3.4.0을 해야 하는지 간략하게 적어두었다.

중간에 CLA sign을 해야 한다는 메타의 피드백을 받아 다시 PR을 작성했었다.


결과는?

고맙다는 인사와 함께

다행스럽게도 Merge가 되었다!!
React Native Image Component

3.6.0으로 버전이 바뀐 모습을 볼 수 있다..!
이런 간단한 거라도 오픈소스에 기여해서 기분이 참 뿌듯했다..😁


느낀 점

처음으로 컨트리뷰터가 됐는데 나름 치명적인 부분을 기여한 것 같아서 기분이 좋았고
내가 겪는 문제에서 시작되어서 이렇게 오픈소스 기여까지 할 줄은 몰랐다.

사실...


예제 코드 아래쪽에 보면 제때 업데이트되지 않을 수 있다고 명시되어있다.. 하핫 (머쓱)
그래도 처음 하는 사람들한테는 도움이 되지않았을까..?

다음에는 꼭 React Native CLI나 FastAPI 같은 내가 자주 쓰는 곳에 PR을 올려보고 싶다...

profile
흔들리지 말고 나만의 공부를 하자

4개의 댓글

comment-user-thumbnail
2025년 9월 5일

개쩌는군요

1개의 답글
comment-user-thumbnail
2025년 9월 12일

감사합니다.. 덕분에 16KB 대응에 한발짝 더 나아갈 수 있었습니다..

1개의 답글