안드로이드와 IOS 모바일 앱 개발 방식은 여러가지가 있지만 React를 사용해온 경험으로 React Native를 사용하기로 했다.
개발상 별 어려움을 없을 것이라 생각했고 까다로운 부분은 초기 개발 환경 설정과 배포라고 생각된다.
우선 리액트 네이티브의 개발 방식은 두 가지로 생각하면 된다.
- expo
- react-native-cli
또한 개발자가 사용할 컴퓨터 환경은 3가지다.
- windows
- linux
- mac
워밍업이라 자세한 내용이 아닌 대략 훑어본 것들을 정리한다.
- expo는 많은 기능들을 패키징 시킨 개발 프레임웍이라 생각하면 된다. 예를들어 android와 ios 개발과 배포를 한번에 정리, react-native API를 좀 더 쓰기 쉽게 모듈화 시켜 제공.
expo는 매우 사용하기 간편할 것으로 예상된다.
그래서 처음엔 expo를 사용하기로 맘 먹었다. 하지만 expo에서는 react-native가 제공하는 API 직접 사용할 수 없는 문제로 만약 개발자가 원하는 기능이 expo에 없을 땐 문제가 된다. 이런 경우 expo에서 해결할 수 없으므로 프로젝트를 eject 시켜 react-native-cli 개발 환경으로 변경시켜서 필요할 모듈을 개발 또는 설치하여 해결한다고 한다.
react에서 eject 후 여러가지 문제를 경험한 적이 있어서 어짜피 eject이 필요하면 처음부터 expo를 사용하지 않는 것이 좋다고 판단되었다.
현재 개발 중인 프로젝트에 expo 적용을 검토를 시작하자 마자, 로그인 적용에 문제가 있음을 알았다. 카카오로 로그인 화면을 구성할 시 expo에서는 webview에서 api로 백엔드와 통신을 하여 로그인을 구성해야한다. 반면에 react-native-cli를 사용하면 직접 구현하거나 이미 구현된 카카오 로그인을 통해서 앱 사용자의 카톡에 접근하여 바로 로그인이 가능하다.
이 기능은 매우 편리하고 실제로 여러 앱들을 보면 두 가지 형식 중 하나를 사용하지만 직접 아이디 패스워드를 입력해야하는 전자의 방식은 매우 불편할 수 밖에 없다. 즉, 로그인 편의성이라는 한가지 이유로 react-native-cli를 선택해야 할 것으로 생각된다.
물론 expo에서 카카오 로그인을 지원하는 기능을 언젠간 넣어줄 수도 있겠지만, 로그인 말고도 이런 비슷한 문제들이 생길 것으로 예상되기 때문에 expo를 포기한다.
컴퓨터 환경에서 현재 mac 환경은 구성하지 않는다.
안드로이드 개발로 우선 개발 하면서 맥 환경은 최종적으로 구성할 생각이다.
하지만 맥북으로 안드로이드+IOS 환경을 구성하여 개발하는 것이 가장 깔끔하다는 생각.
개발 컴퓨터 cpu가 ryzen 3 3200g인데 모바일 디바이스 에뮬레이터를 종료할 때 항상 멈춘다. centos7의 환경이 문제인 듯 하여 조만간 ubuntu로 환경을 재구성해볼 생각이면 그래도 문제가 된다면 좀 불편하지만 직접 모바일 디바이스를 연결하여 개발해야할 듯 하다. 하지만 가능하면 가상 에뮬레이터를 사용하는 것이 좋다. 이유는 hot-reloading이 지원되기 때문이며 실제 디바이스 연결을 할 경우 코드가 바뀔 때마다 결과를 확인하려면 빌드->apk파일 생성->디바이스로 전송->실행과정이 있어야 한다. 매우 번거롭고 오래걸린다.
CPU의 가상화 지원여부
최근 CPU라면 가상환경을 모두 지원할 것이다.
그럼에도 안드로이드 스튜디오의 에뮬레이터 실행이 실패할 경우가 있는데 이런 경우 bios에서 CPU의 가상화를 enable 시켜줘야 한다. 대략 cpu 주파수 설정에 들어가 (AMD의 경우 SVM 활성화, INTEL의 경우 VT-x???맞나 모르겠다. 활성화 를 해줘야 한다.) 이걸 활성화 하면 OS에서 알아서 가상화를 지원하도록 설정하고, 리눅스의 경우 때에 따라서 KVM을 설치하는 작업을 한번 더 실행해야한다.)
좀 자세히 환경설정부터 개발 핵심에 대해서 정리하고 싶지만 시간 관계상 간단히 글로 정리하고 정리는 나중에...