Skip to main content

Releasing React Native 0.59

· 11 min read
Ryan Turner
Core Maintainer & React Native Developer

React Native 0.59 버전을 소개합니다. 이번 릴리스는 88명의 기여자가 참여해 총 644개의 커밋으로 이루어진 대규모 업데이트입니다. 또한, 이슈 관리, 커뮤니티 활성화, 그리고 React Native를 가르치는 등 다양한 형태의 기여도 이루어졌습니다. 여러분의 노력에 감사드립니다. 이번 달에는 많은 사람들이 기다려온 여러 변경 사항이 포함되어 있습니다. 즐겁게 사용해 주시기 바랍니다.

🎣 훅스가 도입되었다

이번 릴리스에는 컴포넌트 간에 상태 로직을 재사용할 수 있는 React 훅스가 포함되었다. 훅스에 대한 관심이 뜨겁지만 아직 잘 모르는 독자를 위해 몇 가지 유용한 자료를 소개한다:

여러분의 앱에서 훅스를 직접 사용해 보길 권한다. 우리가 경험한 것처럼 훅스의 재사용성이 흥미롭게 느껴질 것이다.

📱 업데이트된 JSC로 인한 성능 향상과 안드로이드 64비트 지원

React Native는 여러분의 애플리케이션을 구동하기 위해 JSC(JavaScriptCore)를 사용한다. 안드로이드의 JSC는 몇 년 전 버전이어서 많은 모던 자바스크립트 기능을 지원하지 못했다. 더 나쁜 점은 iOS의 최신 JSC에 비해 성능이 떨어졌다는 것이다. 이번 릴리즈로 이러한 문제가 모두 해결되었다.

@DanielZlotin, @dulmandakh, @gengjiawen, @kmagiera, 그리고 @kudo의 멋진 작업 덕분에 JSC가 몇 년 간의 격차를 따라잡았다. 이로 인해 64비트 지원, 모던 자바스크립트 지원, 그리고 큰 성능 향상이 이루어졌다. 또한, 이제는 유지보수가 가능한 프로세스로 만들어 향후 WebKit 개선 사항을 별도의 노력 없이 활용할 수 있게 해준 점도 칭찬할 만하다. 이 작업을 가능하게 해준 Software Mansion과 Expo에게도 감사드린다.

💨 인라인 리퀘어를 통해 더 빠른 앱 실행

React Native 앱이 기본적으로 뛰어난 성능을 발휘할 수 있도록 돕고자, Facebook의 최적화 기술을 커뮤니티에 제공하려고 한다. 이 기능은 '인라인 리퀘어'라고 불리며, Metro가 지연 로딩할 컴포넌트를 식별할 수 있게 한다. 이로 인해 앱이 필요한 리소스를 필요할 때 로드하므로, 앱 실행 속도가 느려지는 문제를 해결한다. 특히 컴포넌트 구조가 복잡하고 다양한 앱에서 가장 큰 성능 향상을 기대할 수 있다.

0.59 템플릿의 metro.config.js 파일 소스, inlineRequires를 활성화하는 위치를 보여줌

이 기능을 기본적으로 활성화하기 전에, 커뮤니티의 피드백이 필요하다. 0.59 버전으로 업그레이드하면 새로운 metro.config.js 파일이 생성된다. 여기서 옵션을 true로 설정하고 피드백을 보내주길 바란다. 앱의 성능을 측정하고 싶다면 성능 문서에서 인라인 리퀘어에 대해 자세히 알아볼 수 있다.

🚅 Lean Core 진행 중

React Native는 크고 복잡한 프로젝트로, 리포지토리 구조가 복잡하다. 이로 인해 코드베이스는 기여자들이 접근하기 어렵고, 테스트가 힘들며, 개발 의존성으로서 불필요하게 비대해졌다. Lean Core는 이러한 문제를 해결하기 위해 코드를 별도의 라이브러리로 이전해 더 나은 관리를 목표로 하는 노력이다. 지난 몇 차례 릴리스에서 첫 단계를 진행했지만, 이제 본격적으로 시작할 때다.

여러분은 추가 컴포넌트들이 공식적으로 더 이상 사용되지 않는다는 것을 눈치챌 수 있을 것이다. 이는 좋은 소식이다. 이제 해당 기능을 적극적으로 유지보수하는 소유자가 생겼기 때문이다. 경고 메시지를 주의 깊게 확인하고, 새로운 라이브러리로 마이그레이션하라. 이 기능들은 향후 릴리스에서 제거될 예정이다. 아래 표는 컴포넌트, 현재 상태, 그리고 마이그레이션할 수 있는 새로운 위치를 나타낸다.

컴포넌트더 이상 사용되지 않음?새로운 위치
AsyncStorage0.59@react-native-community/react-native-async-storage
ImageStore0.59expo-file-system or react-native-fs
MaskedViewIOS0.59@react-native-community/react-native-masked-view
NetInfo0.59@react-native-community/react-native-netinfo
Slider0.59@react-native-community/react-native-slider
ViewPagerAndroid0.59@react-native-community/react-native-viewpager

앞으로 몇 달 동안 더 많은 컴포넌트가 이 경로를 따라 더 가벼운 코어로 이동할 것이다. 우리는 이 작업에 도움을 필요로 한다. Lean Core umbrella로 가서 기여를 시작해 보라.

👩🏽‍💻 CLI 개선 사항

React Native의 커맨드라인 도구는 개발자가 이 생태계에 접근하는 첫 관문이다. 하지만 오랫동안 문제점이 지적되어 왔고 공식적인 지원도 부족했다. 이제 CLI 도구는 새로운 저장소로 이전되었으며, 전담 관리자 그룹이 몇 가지 흥미로운 개선 작업을 진행했다.

로그 형식이 훨씬 더 깔끔해졌다. 또한 명령어 실행 속도가 거의 즉각적으로 빨라졌다. 체감할 수 있을 정도의 차이가 있다:

0.58 버전의 CLI는 시작 속도가 느리다0.59 버전의 CLI는 거의 즉각적으로 실행된다

🚀 0.59 버전으로 업그레이드

여러분의 React Native 업그레이드 프로세스에 대한 피드백을 듣고, 향후 릴리스에서 경험을 개선하기 위해 조치를 취하고 있다. 0.59 버전으로 업그레이드하려면 rn-diff-purge를 사용해 현재 React Native 버전과 0.59 버전 사이의 변경 사항을 확인한 후, 수동으로 변경 사항을 적용하는 것을 추천한다. 프로젝트를 0.59 버전으로 업그레이드한 후에는 새롭게 개선된 react-native upgrade 명령어(이 명령어는 rn-diff-purge를 기반으로 한다!)를 사용해 0.60 버전 이상으로 업그레이드할 수 있다.

🔨 주요 변경 사항

0.59 버전에서 Android 지원은 Google의 최신 권장 사항에 맞춰 정리되었다. 이로 인해 기존 앱에서 문제가 발생할 수 있다. 런타임 크래시와 함께 "이 액티비티에는 Theme.AppCompat 테마(또는 이를 상속한 테마)를 사용해야 합니다"라는 메시지가 표시될 수 있다. 프로젝트의 AndroidManifest.xml 파일을 업데이트하고, android:theme 값이 AppCompat 테마(예: @style/Theme.AppCompat.Light.NoActionBar)인지 확인하는 것을 권장한다.

0.59 버전에서는 react-native-git-upgrade 명령어가 제거되었고, 새롭게 개선된 react-native upgrade 명령어로 대체되었다.

🙏 감사합니다

많은 새로운 기여자들이 플로우 타입에서 네이티브 코드 생성 활성화Xcode 경고 해결에 도움을 주셨습니다. 이러한 작업은 React Native가 어떻게 동작하는지 배우고 더 큰 선을 위해 기여할 수 있는 훌륭한 방법입니다. 감사합니다! 앞으로도 비슷한 이슈들을 기대해 주세요.

이번에 주목할 만한 주요 변경 사항들 외에도, 흥미로운 업데이트들이 많이 있습니다. 모든 업데이트를 확인하려면 변경 로그를 살펴보세요. 0.59 버전은 대규모 릴리스입니다. 여러분이 직접 사용해 보시길 기대합니다.

올해 남은 기간 동안 더 많은 개선 사항들이 예정되어 있습니다. 계속 지켜봐 주세요!

RyanReact Native 코어 팀