ReactNative 튜토리얼
react native 튜토리얼 한글판 입니다. UI로 시작해서 JS기본, 그 다음엔 custom library 을 사용하는 것 까지 할 예정입니다.
사용한 코드들은 github에 올려놨습니다. 잘 모를시엔 git clone을 해주시고 commit을 되돌려 주세요. git 의 사용방법을 잘 모르시는 분은 검색하시길 바랍니다.
https://github.com/g6ling/react-native-tutorial/
질문등은 https://gitter.im/g6ling/react-native-tutorial-kr 여기서 해주세요. 같이 의견도 교환하면 좋을 것 같습니다.
React Native을 배우기 전에
사실 이걸 마지막에 쓸려고 했는데 url을 공개도 안했는데 보는 사람이 많아져서 지금이라도 부랴부랴 씁니다.
일단 React Native 의 많은 글을 읽고 이 글을 읽을거라고 생각이 됩니다. 혹시 아직 RN에 대해 잘 모르시면 검색하고 많은 글을 읽어보세요. 장단점을 안 뒤 시작하시는게 좋습니다. 일단 React Native(이하 RN)은 매우 특이한 학습곡선을 가지고 있습니다.
대략 이런느낌인데요. 총 2번의 계단이 있습니다.
처음에는 매우 쉽습니다. 하지만 아직 RN이 정식버전이 나오지 않았고, 또한 겨우 1년정도밖에 되지 않았기 때문에 라이브러리의 수도 매우 적습니다.그러다보니 문제가 있는데 검색으로 답이 안나오는 경우가 생깁니다. 결국 자신이 다른사람의 JS 라이브러리(모듈)을 읽고 수정하거나 새로 모듈을 만들어야 하는 경우가 생기는데 그걸 할 수 있는 능력이 필요할때가 바로 첫번째 계단입니다. 이 계단은 아직 프로그래밍을 막 시작한 사람에게는 매우 높은 장벽입니다. 그리고 이걸 해결한다면 또하나의 장벽이 나옵니다. 그건 Native Module을 만들거나 수정해야할 때 입니다. RN은 특정 JS코드를 이용해서 android나 ios 코드를 실행시키는 것입니다. 예를들어서 내가 RN에서 http요청을 한다고 한다면 결국엔 그 요청은 특정 objective-c나 java코드를 실행시키고 그 결과값을 다시 javak, objective-c 코드를 통해서 JS로 보내지게 되는 것입니다. 만약 내가 하고싶은 무언가가 아직 구현되지 않았다면 자신이 android java나 objective-c 코드를 직접 작성해야 합니다.
간단한 프로토타입정도는 문제 없이 만들 수 있지만, 실제로 이걸 통해서 어떠한 제품, 서비스를 만들고자 할 경우에는 native module을 만들어야 하는 경우가 생깁니다. 여기에 필요한 능력은 java나 objective-c 코드로 모듈을 만드는 능력 + JS 모듈을 만드는 능력입니다(물론 90%이상의 확률로 이미 있는 java코드와 JS을 연결하는 Bridge정도를 만드는 수준이지만 부랴부랴 배워서 할수있는 수준은 아닙니다).
너무 어렵게만 느껴지게 얘기를 햇지만 저또한 RN을 하면서 이런 경험을 많이하였기 때문에 알려드립니다. 단순히 JS만으로 앱을 작성할수 있다고 생각한다면 아마 분명 어느순간 만들수없는 부분이 생깁니다.
RN 이런분에게 추천합니다
- java나 android의 개발을 이미 한적이 있는 JS코더(iOS는 그나마 모듈이 있지만 android가 정말 적습니다)
- 프로토타입 정도만 만들 생각인 JS코더
- android, iOS, JS 전부다 한적이 있는 사람(제발 같이 모듈을 만들어요 ㅠㅠ)
- android, iOS의 디자인통일 + 생산성 극대화 를 하고싶은 사람
- 옆에 RN을 많이 한 사람이 있고 자주 물어볼수 있는 경우.(물론 주변에 물어볼 환경이 있다면 뭐든 상관없습니다. 모르면 물어보면 되는데)
- 그냥 한번 RN을 하고 싶은 사람.
RN 이런분에게 절대로 추천하지 않습니다
- 이제 막 프로그래밍을 시작한 사람(절대 하지 마세요. 모든정보가 검색해서 안나옵니다.자기가 해결해야되요)
- 영어가 어려운 사람 (절대 하지 마세요)
- 실제 서비스를 RN으로 만들고 싶은 JS만 아는 코더 (일단 android, objectiv-c에 대해 공부한 다음 하는걸 추천합니다)
- android을 RN, ios는 native로 만들어야지(정말 애매합니다. 반대의 경우는 그나마 괜찮은데 RN이 android에서 성능이나, 문제가 좀 있습니다. android만 필요한 경우에는 추천하지는 않습니다만 굳이 말리진 않습니다)
RN 을 해서 얻을수 있는 것
- 오픈소스의 공헌. (제가 그전에는 거의 github에 issue조차 잘 안올렷는데 RN을 하면서 PR을 몇번째 하는지 모르겠습니다. 아직 모듈이 별로없다 -> 내가 만들 모듈이 많다. 나의 실력이 그만큼 엄청 향상된다)
이래도 아직 RN에 대해 공부하고 싶으시다면 다음장으로 넘어가세요.