Expo custom-updates-server 구현 : 실험실 기능 (1)

오준서·2023년 3월 27일
0
post-thumbnail

실험실 기능을 켜고, 끄고...
해당 상태를 가지고 분기를 태워서 기능을 보여주고 숨기고...

이런 실험실 기능은 유지보수하기 쉽지않다.

이렇게 말고 codepush 기능을 이용해서 실험실 기능을 구현할 수 있지 않을까? 라는 생각이 문득 들었다.

Expo에서 지원하는가?

하지만 Expo를 사용해서 codepush 기능을 사용하고 있다면 동적으로 업데이트 채널을 변경하는것은 불가능하다.
빌드 당시 업데이트 채널을 지정해서 빌드하기 때문이다.

그럼 어떻게 하면 좋을까?

Expo의 codepush 라이브러리인 expo-update는

일종의 업데이트 서버 규격인 Expo Updates Protocol를 지키면 자신만의 custom-updates-server를 만들 수 있다.
(https://docs.expo.dev/distribution/custom-updates-server/)

이걸 사용하면, 서버측에서 동적으로 원하는 업데이트를 내려줄수 있다.

대충 로직은 이렇다.

  1. 일반적인 앱 처럼 dev, state, product 3개로 업데이트 채널을 나누고,
    expo-dev-client용 local 채널도 있다고 가정한다. (업데이트 채널로 사용은 안함)

  2. custom-updates-server를 사용하게 되면,
    앱은 해당 업데이트 서버로 새로운 업데이트가 있는지 확인하는 요청을 날린다.
    -> 이때 updator_id, channel, version, platform 등 업데이트를 받을 때 필요한 정보를 헤더로 같이 넘긴다.

  3. 보통 같으면 channel, version, platform 으로만 판단 후, 가장 최신의 업데이트를 가져와서 넘기지만,
    updator_id로 실험실 기능이 켜져 있는지 먼저 확인 한 후, 켜져 있으면 channel에 prefix를 붙여서 실험실 기능이 포함된 업데이터를 넘겨준다.

위와 같이 custom-updates-server에 로직을 추가해줘서 간단하게 실험실 기능을 추가 할 수 있을거 같다는 생각이 들었다.

Expo의 codepush 기능은 다양한 부가기능을 제공한다. (추후 설명하겠다.)
그래서 그런지 무료로 사용하려면 한달에 1000명의 유니크한 updator(사용자)가 최대이다.

앱 사용자가 한달에 1000명이 넘으면 custom-updates-server 도입을 생각해보자.

microsoft의 react-native-code-push 라이브러리는 기본적으로 지원한다.
(https://github.com/microsoft/react-native-code-push#dynamic-deployment-assignment)

위 내용을 읽어보면, 서버를 한번 거쳐서 동적으로 처리하는 방식을 더 추천하는 것 같다.

다음편에서는 먼저
expo + expo-dev-client + expo-updates
eas build + eas update를 사용해서
가장 기본적인 expo codepush 앱을 만들어보겠다.

profile
React & React Native 개발자

0개의 댓글