- 누군가는 그냥 스토어에 앱을 등록하면 되는 것이 아니냐라고 하겠지만, ios는 등록하기 위한 개발자 계정이 있어야 하고, 개발자 계정을 얻기 위해서는 돈과 시간이 많이 소요된다. 또한 심의도 매우 까다롭다. 따라서 개발이 완료되지도 않았는데 앱을 등록하기에는 어렵다. 개발과정에서도 앱을 등록하지 않고도 배포후에 웹에서 확인 할 방법이 필요했다.
- 누군가는 그냥 로컬에서만 확인하면 되지 않냐라고 하겠지만, 배포 후 CI/CD 파이프라인을 구성해 개발자가 Commit/Push 한 코드를 자동으로 배포하여 팀원들이 웹상에서 확인할 수 있게 하고싶었다. 개발자 또한 자신이 개발한 코드를 Commit/Push 만 하면 웹에서 확인할 수 있기에 훨씬 더 편리하다.
❓ 어떻게 하면 앱 개발 프레임워크로 개발된 것을 웹으로 접속할 수 있을까
📒 해답은 React Native 프레임워크의 특성에 있었다
- 크로스 플랫폼 : RN은 크로스 플랫폼으로써 ios와 안드로이드 둘 다 개발이 가능하다.
- 크로스 플랫폼이란 위의 의미도 있지만 웹/앱이 둘 다 가능하다는 의미도 존재한다. 분명 RN은 앱 개발 프레임워크인데 어떻게 웹이 가능할까?
1 . 과거의 몇몇 앱은 기존의 웹 개발자가 앱을 만들기 여려우니까 웹/앱으로 UI만 레이아웃을 조정해서 앱을 배포하였다. 하지만 이것은 성능이 좋지 않았다.
2 . 하지만 그렇다고 앱 개발 언어인 Swift나 Flutter를 배워서 하기에는 러닝커브가 높았다.
3 . 이를 보완하기 위해 웹 개발자가 쉽게 앱을 개발할 수 있도록 만들어진 프레임워크가 RN이다.
❓ 그럼 웹개발 언어로 만들었으니까 RN이라 한들 빌드한다면 정적파일이 나오지 않을까?
❓ RN도 npm 기반이기때문에 npm 빌드처럼하면 정적파일이 나오지 않을까? 라는 의문이 생겼다.
-> 실제로 아래와 같이 Dockerfile을 작성해 빌드하면 이미지가 생성되고 이미지내의 Nginx에 빌드된 index.html 파일이 전달되었다.
FROM node:18.15 as builder
WORKDIR /app
COPY package.json .
COPY package-lock.json .
RUN npm cache clean --force
RUN npm install
RUN npm install -g expo-cli --force
COPY . .
RUN npm run build
FROM nginx:stable-alpine
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/web-build /usr/share/nginx/html
EXPOSE 80
EXPOSE 19000
EXPOSE 19001
EXPOSE 19002
CMD ["nginx", "-g", "daemon off;"]
결과적으로 배포후에 'daily-pt.com' 도메인으로 웹에 접속했을 때 정상적으로 접속이 되며, 앱을 등록하지 않아도 도메인을 통해 접속해 개발과정을 테스트할 수 있었다.
로컬이 아닌 웹상에서 테스트가 가능하기 때문에 팀원 모두가 테스트를 해보는 것이 수월했다
다만 최적화 과정을 통해 앱을 사용하는 것처럼 조정해야 한다.
📌 RN의 장/단점