프로젝트 Jupyter는 오픈 소스 소프트웨어, 개방형 표준, 그리고 여러개의 프로그래밍 언어에 걸친 인터랙티브 컴퓨팅을 위한 서비스 개발을 위해서 설립된 비영리 단체입니다. 현재 Jupyter Notebook , Jupyter Hub, Jupyter Lab을 개발, 지원하고 있습니다.
저는 아래 위치에서 해당 코드를 찾았습니다. 위치는 다를 수 있으며, 비슷하게 나오면 아래 [USER NAME] 부분만 사용자 이름으로 변경하면 될 거 같습니다.
vi /System/Volumes/Data/Users/[USER NAME]/.pyenv/versions/3.9.7/lib/python3.9/site-packages/ipykernel/eventloops.py
코드에서 아래 부분을 수정해 줍니다. return 부분에 조건을 하나 추가합니다.
변경 전
def _use_appnope():
"""Should we use appnope for dealing with OS X app nap?
Checks if we are on OS X 10.9 or greater.
"""
return sys.platform == 'darwin' and V(platform.mac_ver()[0]) >= V('10.9')
변경 후
def _use_appnope():
"""Should we use appnope for dealing with OS X app nap?
Checks if we are on OS X 10.9 or greater.
"""
return sys.platform == 'darwin' and V(platform.mac_ver()[0]) >= V('10.9') and platform.mac_ver()[2] != 'arm64'
React의 특징으로는 선언형 스타일을 사용하며, Javascript를 이용한 컴포넌트 기반의 아키텍처를 사용합니다. 그리고 강력한 추상화 기능을 제공합니다.
Javascript Native 기능을 이용하는 문법을 사용하기 때문에, 다른 프레임워크에 비해서 빠르게 습득할 수 있으며, Virtual DOM 방식을 이용해서 UI 속도가 매우 빠릅니다.
현재 (2021.08.20) React는 17.0.2 버전이 출시되어 있으며, 버전 18이 준비 중 입니다.
React 프로젝트로 "원활히" 개발을 진행하기 위해서 먼저 node.js 를 설치합니다.
명령 프롬프트를 실행하여 프로젝트 폴더로 이동해서 아래 명령어를 입력합니다.
npx create-react-app my-app
my-app 이라는 폴더가 생성되고 기본 프로젝트 코드가 생성됩니다.
현재 설정된 패키지 버전은 다음과 같습니다.
yarn 혹은 npm 명령어를 이용해서 프로젝트를 실행합니다.
yarn start
혹은
npm start
처음 실행시에는 필요한 라이브러리를 다운로드 받기 때문에 시간이 조금 걸릴 수 있습니다.
웹브라우저에서 http://localhost:3000 를 입력하면, 생성된 프로젝트 결과물이 나옵니다. (설정에 따라 포트 번호는 달라질 수 있습니다.)
아래와 같은 화면이 나옵니다.
Hello World 를 출력해 보기 위해서, src 폴더에 있는 모든 파일들을 삭제하고,
index.css, index.js 파일만 새로 생성해 보았습니다.
아래 파일들 삭제
신규 파일 생성
index.js 파일을 열어서 아래와 같이 코드를 작성합니다.
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
var element = React.createElement('h1', null, "Hello World!")
ReactDOM.render(element, document.getElementById('root'))
저장 후 웹브라우저를 리프래시 하면 아래와 같이 나옵니다.
작성한 코드에 대해서 간단히 설명하자면,
React.createElement 매써드는 html 엘리먼트를 생성해서 돌려주기 때문에,
element 에는 <h1>Hello World!</h1> 에 해당하는 엘리먼트가 지정됩니다.
그리고, ReactDOM.render 매써드는 해당 엘리먼트를 렌더링해 줍니다.
코드는 element에 지정된 것을 root 라는 아이디를 가진 엘리먼트를 찾아서 렌더링 해주라는 의미이고,
public 폴더에 있는 index.html 파일을 열어보면, body 에 "root" 라는 아이디를 가진 div 엘리먼트가 있는 것을 확인할 수 있습니다.
지난 포스트에서 생성한 myApp을 이용합니다. myApp이 없다면 아래 명령으로 생성합니다.
ionic start myApp sidemenu --type react
먼저 명령 프롬프트를 열고 myApp 폴더로 갑니다. 모바일 앱 프로젝트를 설정하기전에 빌드를 한번 합니다.
ionic build
빌드를 한번 해주는 이유는 capacitor에서 모바일 앱 프로젝트 추가시 build 폴더가 없으면, webDir이 www로 잡히기 때문입니다. 설정 파일에서 변경해 주면 되지만 편의를 위해서 build를 먼저 해 주었습니다.
그리고 모바일 앱 프로젝트를 시작합니다. 시작을 위해서는 npx 명령어를 사용합니다.
저는 npm을 주로 쓰기 때문에 npm으로 했지만 yarn도 지원합니다.
npx cap init --npm-client=npm
App name 에는 "My App"을 입력하고, App Package ID 에는 com.example.myapp 을 입력합니다.
해당 정보는 capacitor.config.json 에서 변경이 가능합니다.
이제 Android 플랫폼을 추가하기 위해서 아래 명령을 입력합니다.
npx cap add android
Android 빌드 하기전에 아래 명령어를 통해 리소스 및 변경된 플러그인을 싱크(업데이트) 합니다.
npx cap sync android
Android 빌드는 android 폴더에서 진행하는데, gradlew 명령어를 이용합니다. 원래 경로로 돌아오기 위해 마지막 cd .. 명령어도 추가하였습니다. gradle을 통해 Android 빌드하기 위해서는 환경변수에 ANDROID_SDK_ROOT 를 설정해야 합니다. Android Studio를 설치하고 SDK ROOT를 환경변수에 미리 추가해 둡니다.
cd android
gradlew assembleDebug
cd ..
생성된 Android 빌드는 프로젝트 경로 > android > app > build > outputs > apk > debug 에서 찾을 수 있습니다. (app-debug.apk)
코드 변경 후에 한번에 빌드를 하기 위해서는 아래와 같이 실행하면 됩니다.
ionic build && npx cap sync android && cd android && gradlew assembleDebug && cd ..
Production 빌드를 생성할 때는 다음과 같이 실행하며,
gradlew assemble
빌드는 프로젝트 경로 > android > app > build > outputs > apk > release 에 생성됩니다.
참고로 아래 명령을 사용하면 ionic build 와 npx cap sync android 실행 후 Android Studio 가 실행됩니다.
ionic capacitor build android
Android Studio 만 실행하고자 한다면, 아래 명령을 실행하면 됩니다.
ionic capacitor run android
Android Simulator 에 빌드를 배포할 때는, 아래 명령을 이용합니다.
ionic build && npx cap sync android && cd android && gradlew installDebug && cd ..
Ionic 프레임워크는 웹 기술(html, css, javascript)을 이용해서 모바일 / 데스크탑 앱을 만들어 주는 오픈소스 UI 툴킷이라고 정의하고 있습니다. 현재 Angular, React, Vue 를 지원하고 있습니다. 부가적으로 Appflow 등을 이용하면 앱 빌드 및 배포도 편리하게 관리할 수 있습니다.