실험실 기능을 켜고, 끄고...
해당 상태를 가지고 분기를 태워서 기능을 보여주고 숨기고...
이런 실험실 기능은 유지보수하기 쉽지않다.
이렇게 말고 codepush 기능을 이용해서 실험실 기능을 구현할 수 있지 않을까? 라는 생각이 문득 들었다.
하지만 Expo를 사용해서 codepush 기능을 사용하고 있다면 동적으로 업데이트 채널을 변경하는것은 불가능하다.
빌드 당시 업데이트 채널을 지정해서 빌드하기 때문이다.
Expo의 codepush 라이브러리인 expo-update는
일종의 업데이트 서버 규격인 Expo Updates Protocol를 지키면 자신만의 custom-updates-server를 만들 수 있다.
(https://docs.expo.dev/distribution/custom-updates-server/)
이걸 사용하면, 서버측에서 동적으로 원하는 업데이트를 내려줄수 있다.
일반적인 앱 처럼 dev, state, product 3개로 업데이트 채널을 나누고,
expo-dev-client용 local 채널도 있다고 가정한다. (업데이트 채널로 사용은 안함)
custom-updates-server를 사용하게 되면,
앱은 해당 업데이트 서버로 새로운 업데이트가 있는지 확인하는 요청을 날린다.
-> 이때 updator_id, channel, version, platform 등 업데이트를 받을 때 필요한 정보를 헤더로 같이 넘긴다.
보통 같으면 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 앱을 만들어보겠다.